Când folosesc setfacl pentru a gestiona ce permisiuni ar trebui să aibă fișierele / directoarele copii, dintr-un anumit motiv, fișierele au toate permisiunile, cu excepția celei de executare („x”).
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file
Am crezut că are ceva de-a face cu umask, dar schimbarea acestuia în diferite moduri nu dă niciodată rezultatul așteptat, cu excepția cazului în care îmi lipsește ceva.
Cum se poate rezolva acest lucru?
Răspuns
Răspunsul lui Hauke Laging încearcă să spună:
Orice program care creează un fișier sau director specifică modul (permisiuni) pe care dorește să îl aibă acel fișier. Acesta este aproape întotdeauna codificat în programul C (sau în orice limbă este utilizată) ) și nu este accesibil niciodată direct utilizatorului. Apoi, valoarea umask
și ACL implicit pot dezactiva biții de permisiune, dar nu adăugați-le.
Problema dvs. este că, în timp ce mkdir
specifică un mod 777 (rwxrwxrwx
), aproape toate programele care creează fișiere specifică 666 (rw-rw-rw-
). Aceasta include touch
, shell-ul (pentru redirecționare I / O; de exemplu, program > file
), editorii (vi
, vim
, emacs
, etc …), dd
, split
și așa mai departe. Prin urmare, nu veți obține permisiuni pentru rwxrwxrwx
pentru un fișier simplu imediat după crearea (de către oricare dintre aceste programe), indiferent de ceea ce faceți cu ACL-urile; trebuie să creați fișierul și apoi chmod
acesta.
Există câteva excepții de la această regulă:
-
cp
și programele conexe (de ex.,cpio
,tar
etc.) care copiază sau re -creați un fișier, care va (încerca să) seteze noul fișier în același mod ca și fișierul original. - Compilatoarele, care creează fișiere executabile binare, specifică un mod de 777 (cel puțin, dacă compilarea reușește), astfel încât utilizatorul va putea efectiv să execute programul pe care tocmai l-a compilat.
Comentarii
Răspuns
Nu menționați ce înseamnă ” rezultatul scontat „este. Presupun că sunt fișierele cu x
biți setate.
Nu puteți aplica acest lucru deoarece ACL implicit (cum ar fi umask) împiedică doar permisiunile, dar nu le setează singur. Un nou director sau fișier nu obține mai multe permisiuni (pentru utilizator, grup și altele) decât open()
sau mkdir()
apel care îl creează solicită.
Pentru fișiere este solicitată de obicei numai permisiunea de citire și scriere. Dar dacă un compilator creează un fișier binar, atunci solicită și el permisiunea de executare.
Comentarii
- Răspunsul dvs. este destul de haotic din punct de vedere englezesc. Puteți să-l corectați? De asemenea, ‘ nu sunt sigur ce vrei să spui. Uită-te la codul meu. Pentru directoare funcționează întotdeauna.Pentru fișiere funcționează întotdeauna, cu excepția bitului ” x „. De asemenea, dacă ‘ nu este modalitatea corectă de a face acest lucru, atunci ce este cu excepția setării unei mască de fiecare dată când este accesat un director?
Răspuns
$ touch file && chmod a+x file
Explicațiile din alte răspunsuri sunt superbe. Vreau să adaug ceva care să dea un răspuns la întrebare,
Cum se poate rezolva acest lucru?
cu cod specific. @Scott a spus cum să faceți acest lucru,
trebuie să creați fișierul și apoi
chmod
acesta.
Codul din răspunsul meu arată cum se face și îl evidențiază punându-l pe primul.
Mai multe explicații
Pentru început, pentru simplitate, adaug pur și simplu la touch
dată de OP, în mod specific touch file
devine touch file && chmod a+x file
.
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file
Aici, voi configura aceeași situație pe mașina mea (Cygwin) pentru a arăta că funcționează, apoi fac același lucru pe o casetă virtuală Ubuntu pentru a arăta diferențele în configurare . (Rețineți că comanda actuală pentru remedierea lucrurilor nu se schimbă, vreau pur și simplu să arăt câteva diferențe care ar putea apărea cu setfacl
, precum și să verific pentru mine că funcționează .)
$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file
Răspuns
Puteți încerca acest script simplu înlocuiește înregistrările ACL pentru fiecare fișier și director, oferind permisiunile implicite specificate.
$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x
user
,group
șiother
Intrări ACL. Dacă aveți intrări ACL implicite pentru utilizatori sau grupuri numite, acestea ‘ vor fi moștenite așa cum se specifică, nu?