Puncte:0

Pe CentOS 6, cum să permiteți fișierelor create de utilizatori să moștenească permisiunile din directorul părinte?

drapel bh

Deci serverele noastre sunt configurate astfel:
Structura folderului

/asic este dosarul marelui nostru proiect, /200T este un subproiect al acelui mare proiect și foldere chiar sub /200T precum /lbh sunt directoarele personale ale fiecărui lucrător care lucrează la subproiect. /asic, /200T, /lbh toate au fost create de rădăcină și apoi au avut proprietățile reconfigurate de root via chmod -R și chown -R. /asic și /200T sunt deținute de rădăcină și aparține unor grupuri asic și 200T respectiv, în timp ce /lbh este deținut de contul de utilizator al lucrătorului lbh și aparține grupului asic.

Ideea este că conținutul din interior /asic și /200T poate fi văzut de către toți cei care lucrează asic și 200T totuși nu pot avea acces de scriere la aceste 2 directoare -- dacă doresc să creeze ceva, vor trebui să facă asta în propriile directoare (/lbh și altele asemenea). Când un lucrător creează ceva în propriul director, dorim ca alți lucrători ai aceluiași sub-proiect să poată citi acel lucru nou, dar să nu îl modifice accidental. De exemplu, lbh tocmai a creat un fișier banc de testare.v și un folder /rezultate sub /asic/200T/lbh. Alta persoana (glj) pe 200T subproiectul ar trebui să poată citi /asic/200T/lbh/testbench.v și /asic/200T/lbh/results dar nu scrie în ele. Dacă glj dorește să le modifice, va trebui să le copieze în propriul director /asic/200T/glj și apoi fă așa.

Pentru a atinge obiectivele de mai sus, avem nevoie de permisiunile directoarelor create de lbh a fi drwxr-s--- și fișiere să fie rwxr-s--- implicit, însă realitatea arată astfel:
Fișierele și folderele create de lbh și root

Rezultă că fiecare lucrător poate scrie în folderele și fișierele proprii, ceea ce încercăm să evităm. The umask de rădăcină este 0022, si umask a utilizatorilor normali este 0002.

Intrebarile mele:

  1. De ce fișierele sunt create de utilizatori (cum ar fi /lbh) în directoarele lor personale (cum ar fi lbh) ignorând drwxr-s--- permisiunea folderului personal și implicit la (d)rwxrwsr-x?
  2. Există o metodă sigură de a permite lucrătorilor să creeze fișiere și foldere cu (d)rwxr-s--- implicit? Cere fiecărui utilizator să facă manual chmod totul este o bătaie de cap de fiecare dată, iar eu sunt îngrijorat că schimbarea implicită umask valoarea poate duce la noi probleme surprize în continuare.

Mulțumesc mult!


Editați | ×: Structura folderului și permisiunea fișierelor create de lbh și root arată astfel:

[lbh@<mașină> lbh]$ ls -al
total 16
drwxr-s---. 4 lbh 200T 4096 Oct 1 02:40 .
drwxr-sr-x. 4 root 200T 4096 Oct 1 02:18 ..
drwxrwsr-x. 2 lbh 200T 4096 1 octombrie 02:26 aaa_lbh
drwxr-sr-x.2 root 200T 4096 Oct 1 02:26 aaa_root
-rw-rw-r--. 1 lbh 200T 0 1 oct 02:38 file_lbh.txt
-rw-r--r--. 1 root 200T 0 Oct 1 02:40 file_root.txt
[lbh@<mașină> lbh]$ pwd
/asic/200T/lbh
[lbh@<mașină> lbh]$ cd ..
[lbh@<mașină> 200T]$ ls -al
total 16
drwxr-sr-x. 4 root 200T 4096 Oct 1 02:18 .
drwxr-x---. 3 root asic 4096 Oct 1 02:16 ..
drwxr-sr-x. 2 root 200T 4096 Oct 1 02:18 aaa
drwxr-s---. 4 lbh 200T 4096 1 oct 02:40 lbh
[lbh@<mașină> 200T]$ pwd
/asic/200T
[lbh@<mașină> 200T]$ 

Și getfaclrezultatele directoarelor și fișierelor sunt următoarele:

[lbh@<mașină> Desktop]$ getfacl /asic
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic
# proprietar: root
# grup: asic
utilizator::rwx
grupa::r-x
alte::---

[lbh@<mașină> Desktop]$ getfacl /asic/200T/
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/
# proprietar: root
# grup: 200T
# steaguri: -s-
utilizator::rwx
grupa::r-x
altele::r-x

[lbh@<mașină> Desktop]$ getfacl /asic/200T/lbh
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/lbh
# proprietar: lbh
# grup: 200T
# steaguri: -s-
utilizator::rwx
grupa::r-x
alte::---

[lbh@<mașină> Desktop]$ getfacl /asic/200T/lbh/aaa_lbh/
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/lbh/aaa_lbh/
# proprietar: lbh
# grup: 200T
# steaguri: -s-
utilizator::rwx
grup::rwx
altele::r-x

[lbh@<mașină> Desktop]$ getfacl /asic/200T/lbh/aaa_root/
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/lbh/aaa_root/
# proprietar: root
# grup: 200T
# steaguri: -s-
utilizator::rwx
grupa::r-x
altele::r-x

[lbh@<mașină> Desktop]$ getfacl /asic/200T/lbh/file_lbh.txt 
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/lbh/file_lbh.txt
# proprietar: lbh
# grup: 200T
utilizator::rw-
grup::rw-
altele::r--

[lbh@<machine> Desktop] $ getfacl /asic/200T/lbh/file_root.txt 
getfacl: Eliminarea „/” de început din numele căilor absolute
# fișier: asic/200T/lbh/file_root.txt
# proprietar: root
# grup: 200T
utilizator::rw-
grup::r--
altele::r--

[lbh@<mașină> Desktop]$ atingeți hello.txt
[lbh@<mașină> Desktop] $ mkdir salut 
[lbh@<mașină> Desktop]$ ls -al
total 12
drwxr-xr-x. 3 lbh lbh 4096 Oct 9 17:28 .
drwx------. 36 lbh lbh 4096 Oct 9 17:21 ..
-rw-rw-r--. 1 lbh lbh 0 Oct 9 17:27 salut.txt
drwxrwxr-x. 2 lbh lbh 4096 Oct 9 17:28 hi
[lbh@<mașină> Desktop]$ getfacl salut
# fișier: salut
# proprietar: lbh
# grup: lbh
utilizator::rwx
grup::rwx
altele::r-x

[lbh@<mașină> Desktop]$ getfacl hello.txt 
# fișier: hello.txt
# proprietar: lbh
# grup: lbh
utilizator::rw-
grup::rw-
altele::r--

[lbh@<mașină> Desktop]$ 
Puncte:0
drapel za

Linux nu acceptă moștenirea permisiunii, așa că nu puteți face ceea ce ați cerut în subiectul de întrebare.

Cel mai bun lucru pe care îl puteți face este să setați implicit POSIX ACL care se va aplica tuturor fișierelor și directoarelor nou create. Aceasta nu este moștenirea, doar implicit:

setfacl -m default:user:<nume utilizator>:rwx <dir>
setfacl -m default:group:<nume grup>:rwx <dir>

După aceasta, dacă cineva creează un fișier sau un director în (dacă i se permite să creeze obiecte acolo, desigur), acel obiect va primi ACL suplimentar utilizator:<nume utilizator>:rwx și grup:<nume grup>:rwx. Puteți seta permisiunile implicite pentru proprietar și proprietarul grupului prin setare <username> și <groupname> gol.

Acest „implicit” ar putea fi setat doar pe un director, deoarece nu are rost să aplici acest lucru la fișiere. Permisiunile setate în acest fel sunt, de asemenea, mascate cu umasks, așa că dacă un bit este aruncat în umask, acest bit va fi eliminat dintr-o permisiune. De exemplu, când creați un fișier, dacă nu îi dați bit executabil, acesta nu va deveni executabil (cum era de așteptat). Subdirectoarele create vor avea, de asemenea, aceleași ACL-uri „implicite”, astfel încât descendenții săi vor avea și aceste ACL-uri setate. Trebuie să eliminați sau să modificați ACL-urile din subdirectoare după creare pentru a opri această propagare.

Verificați ACL-ul cu getfacl <dir>. Desigur, ar putea exista mai multe astfel de valori implicite (și se pare că trebuie să ajungeți cu mai multe reguli); cel puțin, cerințele pe care le-am întâlnit impuneau întotdeauna prezența a cel puțin două ACL-uri de grup implicite).


Tu nu poti setați „proprietari impliciti de fișiere” în acest fel, proprietarul va fi întotdeauna setat să creeze un uid eficient al procesului. În mod implicit, proprietarul grupului va fi setat să proceseze gid, dar îl puteți modifica folosind setgid bit în directorul părinte:

    chmod g+s <dir>

după aceea, orice obiect creat în acel director își va copia în mod implicit proprietarul grupului, chiar dacă utilizatorul creat nu aparține acelui grup. Acest bit setgit se propagă în subdirectoare.

Proprietarii pot seta proprietarul grupului oricărui grup căruia îi aparțin. Dacă nu aparțin grupului derivat de setgid, își pot schimba proprietarul grupului de fișiere în orice grup din care aparțin, dar după aceea nu îl vor putea schimba înapoi în valoarea setgid.


Vreau să notez din nou în mod explicit, aceasta este nu o moștenire, aceasta este setarea implicită care nu este exact aceeași. Dacă apoi modificați ceva pe obiectul părinte, obiectele deja create își vor păstra întotdeauna permisiunile în Linux.

În timp ce, de exemplu, în Windows, când setați ACL-uri sub-obiect la „moștenire”, modificarea ACL-urilor părinte va afecta descendenții, care este moștenirea adecvată.

NoobAdmin avatar
drapel bh
Mulțumesc mult! Voi încerca să văd dacă această metodă funcționează suficient de bine pentru noi. Deși sunt încă confuz de ce folderele create de utilizatori sunt drwxrwsr-x? O valoare umask de 0022 ar trebui să-l facă drwxrwxr-x, nu? Deci bit-ul gid este moștenit?
NoobAdmin avatar
drapel bh
Corecție: îmi pare rău, mă refeream la o valoare umask de 0002 (utilizator normal), nu 0022 (rădăcină)
Nikita Kipriyanov avatar
drapel za
*nimic* este moștenit. ACL-urile implicite sunt salvate ca ACL, umask este setat ca moduri de fișier și apoi, dacă cineva accesează fișierul, Linux le citește pe ambele, iar ȘI ei calculează permisiunea reală.
NoobAdmin avatar
drapel bh
Deci, în cea de-a doua captură de ecran („Fișiere și foldere create de lbh și root”), folderul „aaa_lbh” creat de lbh este drwxrwsr-x în loc de drwxrwxr-x, iar acel „s” este acolo deoarece Linux a calculat atât umask-ul lui lbh, cât și ACL-ul folderului părinte (/asic/200T/lbh)?
Nikita Kipriyanov avatar
drapel za
„s” nu înseamnă „setgid”? Nu are nimic în comun cu aceste măști. Dar trebuie să recunosc că am uitat de această posibilitate. Le permite descendenților să obțină grupul de proprietari din director în loc să proceseze gid. Dacă doriți să explorați ACL-uri, utilizați `getfacl`, de asemenea, calculează permisiunile eficiente. Și, în sfârșit, toate acestea sunt informații *textuale*, vă rog, nu faceți capturi de ecran, copiați și lipiți în schimb rezultatul consolei.
NoobAdmin avatar
drapel bh
Mulțumesc, tocmai mi-am actualizat postarea inițială cu ieșirile terminale. Fișierele noi create de ```lbh``` pe ```Desktop``` nu au bitul ```setgid```, așa că se pare că fișierele noi create sub ```/asic/200T/lbh`` ` are indicatorul ```s``` deoarece directorul părinte o are.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.