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

  • Presupun doar acest lucru se aplică modurilor tradiționale de permisiune Unix, care corespund user, group și other 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?
  • Este vorba de o ofertă de undeva? Dacă da, vă rugăm să adăugați sursa și, dacă nu, eliminați formatarea ofertelor.
  • @terdon: Nu este o ofertă; este (așa cum este descris) o parafrază a răspunsul lui Hauke Laging . Cum trebuie tratat acest lucru? (1) Aș fi putut edita celălalt răspuns, dar știu că rescrierile masive ale postărilor altor persoane sunt rău. (Și rețineți, FWIW, că reprezentantul meu de pe acest site a fost < 2000 în octombrie 2014.) (2) aș fi putut să-l postez ca un comentariu la celălalt răspuns. Sau mai bine zis, aș fi putut să-l postez ca o serie de trei comentarii, deoarece este > 1200 de caractere. Dar asta nu este în concordanță cu înțelegerea mea despre scopul comentariilor. … (Continuă)
  • Hei, nu a fost ‘ o plângere! Acesta este un răspuns minunat și l-am găsit doar pentru că mă întrebam același lucru. Aș elimina doar formatarea citatului, care este ‘ toate. Postarea unui răspuns care clarifică unul existent este în regulă atâta timp cât menționezi originalul (ceea ce ai făcut). Da, adăugarea unui link ar fi o idee bună, dar ‘ nu este mare lucru. În mod clar, nu doar copiați răspunsul său în al dvs.
  • Nu credeam că este o plângere; mulțumesc pentru laudă. Dar, cu siguranță, îți dai seama că orice solicitare a unei persoane cu romb are aerul unui pumn de fier într-o mănușă de catifea. 🙂 P.S. Mi-am editat răspunsul în conformitate cu sugestia dvs.

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 

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *