Salut tuturor. Aceasta este traducerea unui articol din cartea RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 și EX300.
De la mine: Sper că articolul va fi util nu doar începătorilor, ci și că va ajuta administratorii mai experimentați să-și organizeze cunoștințele.
Așadar, să începem.

Pentru a accesa fișierele în Linux, se folosesc permisiuni. Aceste permisiuni sunt atribuite trei obiecte: proprietarului fișierului, proprietarului grupului și altui obiect (adică tuturor celorlalți). În acest articol veți învăța cum să aplicați permisiunile.
Articolul începe cu o prezentare generală a conceptelor de bază, după care se discută despre permisiuni speciale (Special permissions) și liste de control al accesului (ACL). La sfârșitul acestui articol se examinează configurarea permisiunilor implicite prin umask, precum și gestionarea atributelor extinse ale utilizatorului.
Gestionarea proprietății fișierelor
Înainte de a discuta despre permisiuni, trebuie să cunoașteți rolul proprietarului fișierului și al directorului. Proprietatea fișierelor și a directorilor este esențială pentru gestionarea permisiunilor. În această secțiune veți învăța mai întâi cum să vedeți proprietarul. Apoi veți învăța cum să schimbați proprietarul grupului și utilizatorului pentru fișiere și directoare.
Afișarea proprietarului fișierului sau directorului
În Linux, fiecare fișier și fiecare director are doi proprietari: utilizator și proprietar de grup.
Acești proprietari sunt stabiliți la crearea fișierului sau a directorului. Utilizatorul care creează fișierul devine proprietarul acestui fișier, iar grupul primar, din care face parte acest utilizator, devine de asemenea proprietarul acestui fișier. Pentru a determina dacă aveți permisiunile necesare pentru a accesa fișierul sau directorul, shell-ul verifică proprietatea acestora.
Acest lucru se întâmplă în următoarea ordine:
- Shell-ul verifică dacă sunteți proprietarul fișierului la care doriți să accesați. Dacă sunteți proprietarul, obțineți permisiunile și shell-ul oprește verificarea.
- Dacă nu sunteți proprietarul fișierului, shell-ul va verifica dacă sunteți membru al grupului care are permisiuni asupra acestui fișier. Dacă sunteți membru al acestui grup, veți obține acces la fișier cu permisiunile stabilite pentru grup, iar shell-ul va opri verificarea.
- Dacă nu sunteți nici utilizator, nici proprietar de grup, obțineți permisiunile altor utilizatori (Other).
Pentru a vedea atribuțiile curente ale proprietarului, puteți folosi comanda ls -l. Această comandă arată utilizatorul și grupul proprietar. Mai jos puteți vedea setările proprietarului pentru directoare în directorul /home.
[root@server1 home]# ls -l
total 8
drwx------. 3 bob bob 74 Feb 6 10:13 bob
drwx------. 3 caroline caroline 74 Feb 6 10:13 caroline
drwx------. 3 fozia fozia 74 Feb 6 10:13 fozia
drwx------. 3 lara lara 74 Feb 6 10:13 lara
drwx------. 5 lisa lisa 4096 Feb 6 10:12 lisa
drwx------. 14 user user 4096 Feb 5 10:35 user
Folosind comanda ls puteti afișa proprietarul fișierelor din acest director. Uneori, poate fi util să obțineți o listă cu toate fișierele din sistem în care acest utilizator sau grup este definit ca proprietar. Pentru asta, puteți folosi find. Argumentul find -user poate fi folosit în acest scop. De exemplu, următoarea comandă arată toate fișierele care au ca proprietar utilizatorul linda:
find / -user lindaDe asemenea, puteți folosi find pentru a căuta fișiere, ale căror grupuri specifice sunt proprietari.
De exemplu, următoarea comandă caută toate fișierele aparținând grupului aveau adrese de email pe domeniile:
find / -group usersSchimbarea proprietarului
Pentru a aplica permisiunile corespunzătoare, primul lucru de avut în vedere este proprietatea. Pentru asta există comanda chown. Sintaxa acestei comenzi nu este greu de înțeles:
chown cine ceDe exemplu, următoarea comandă schimbă proprietarul directorului /home/account la utilizatorul linda:
chown linda /home/accountComanda chown are mai multe opțiuni, una dintre ele fiind deosebit de utilă: -R. Puteți bănui ce face, deoarece această opțiune este disponibilă și pentru multe alte comenzi. Aceasta vă permite să setați recursiv proprietarul, ceea ce vă va permite să setați proprietarul pentru directorul curent și tot ce se află sub el. Următoarea comandă schimbă proprietarul pentru directorul /home și tot ce se află sub el, la utilizatorul linda:
Acum proprietarii arată astfel:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Executăm:
[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#
Acum utilizatorul lisa a devenit proprietarul directorului account:
[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa 62 Sep 25 21:42 lisa
Schimbarea proprietarului grupului
Există două modalități de a schimba proprietatea grupului. Puteți face asta folosind chown, dar există o comandă specială numită chgrp, care îndeplinește această sarcină. Dacă doriți să folosiți comanda chown, utilizați . sau : în fața numelui grupului.
Următoarea comandă schimbă proprietarul grupului pentru /home/account la grupa account:
chown .account /home/account
Puteți folosi chown pentru a schimba proprietarul utilizatorului și/sau grupului în mai multe moduri. Iată câteva exemple:
- chown lisa myfile1 stabilește utilizatorul lisa ca proprietar al fișierului myfile1.
- chown lisa.sales myfile stabilește utilizatorul lisa ca proprietar al fișierului myfile și, de asemenea, stabilește grupa sales ca proprietar al aceluiași fișier.
- chown lisa:sales myfile la fel ca și comanda precedentă.
- chown .sales myfile stabilește grupa sales ca proprietar al fișierului myfile fără a schimba proprietarul utilizatorului.
- chown :sales myfile la fel ca și comanda precedentă.
Puteți folosi comanda chgrp, pentru a schimba proprietarul grupului. Să luăm următorul exemplu, în care puteți folosi chgrp pentru a stabili proprietarul directorului account ca fiind grupa sales:
chgrp .sales /home/accountAsemenea cazului anterior, chown, puteți folosi opțiunea -R de chgrp, de asemenea, pentru a schimba recursiv proprietarul grupului.
Înțelegerea proprietarului implicit
Ați observat poate că atunci când un utilizator creează un fișier, se aplică o proprietate implicită.
Utilizatorul care creează fișierul devine automat proprietarul acestuia, iar grupa principală a acestui utilizator devine automat proprietara acestui fișier. De obicei, aceasta este grupa indicată în fișierul /etc/passwd ca fiind grupa principală a utilizatorului. Totuși, dacă utilizatorul este membru al mai multor grupuri, poate schimba grupa principală eficientă.
Pentru a afișa grupa principală eficientă curentă, utilizatorul poate folosi comanda groups:
[root@server1 ~]# groups lisa
lisa : lisa account sales
Dacă utilizatorul curent linda vrea să schimbe grupa principală eficientă, va folosi comanda newgrp, urmată de numele grupului pe care dorește să-l stabilească ca nouă grupă principală eficientă. După utilizarea comenzii newgrp grupa principală va fi activă până când utilizatorul nu va tasta comanda exit sau nu se va deconecta.
Mai jos este prezentat cum utilizatorul linda folosește această comandă, iar grupa principală devine grupa sales:
lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
După modificarea grupului principal activ, toate fișierele noi create de utilizator vor avea acest grup ca grup deținător. Pentru a reveni la setarea inițială a grupului principal, folosiți exit.
Pentru a putea utiliza comanda newgrp, utilizatorul trebuie să fie membru al grupului pe care dorește să-l folosească ca grup principal. În plus, parola grupului poate fi folosită pentru grup cu comanda gpasswd. Dacă utilizatorul folosește comanda newgrp, dar nu este membru al grupului țintă, shell-ul va solicita parola grupului. După ce introduceți parola corectă a grupului, va fi stabilit un nou grup principal eficient.
Gestionarea drepturilor principale
Sistemul de permisiuni Linux a fost inventat în anii '70. Deoarece nevoile computaționale erau limitate în acele vremuri, sistemul de permisiuni de bază a fost destul de limitat. Acest sistem de permisiuni utilizează trei permisiuni care pot fi aplicate fișierelor și directorilor. În această secțiune veți învăța cum să utilizați și să modificați aceste permisiuni.
Înțelegerea drepturilor de citire, scriere și executare
Cele trei permisiuni de bază vă permit să citiți, scrieți și executați fișiere. Efectul acestor permisiuni este diferit atunci când sunt aplicate fișierelor sau directorilor. În cazul unui fișier, permisiunea de citire vă oferă dreptul de a deschide fișierul pentru citire. Prin urmare, puteți citi conținutul său, dar aceasta înseamnă că computerul dvs. poate deschide fișierul pentru a face ceva cu el.
Un fișier de program, care necesită acces la o bibliotecă, trebuie, de exemplu, să aibă acces de citire la această bibliotecă. Aceasta înseamnă că permisiunea de citire este cea mai fundamentală permisiune de care aveți nevoie pentru a lucra cu fișiere.
În cazul unui director, citirea permite vizualizarea conținutului acestui director. Trebuie să știți că această permisiune nu vă permite să citiți fișierele din director. Sistemul de permisiuni Linux nu cunoaște moștenirea, iar singurul mod de a citi un fișier este de a utiliza permisiunile de citire pentru acel fișier.
Așa cum probabil vă puteți imagina, permisiunea de scriere, dacă se aplică unui fișier, permite scrierea în acel fișier. Cu alte cuvinte, permite modificarea conținutului fișierelor existente. Cu toate acestea, nu permite crearea sau ștergerea de fișiere noi sau modificarea permisiunilor pentru fișier. Pentru aceasta, trebuie să acordați permisiunea de scriere directorului în care doriți să creați fișierul. În directoare, această permisiune permite de asemenea crearea și ștergerea de subdirectoare noi.
Permisiunea de execuție este ceea ce aveți nevoie pentru a rula un fișier. Aceasta nu va fi setată în mod implicit, ceea ce face ca Linux să fie practic complet insensibil la viruși. Numai cineva cu permisiuni de scriere asupra directorului poate aplica permisiunea de execuție.
Mai jos este rezumatul utilizării permisiunilor de bază:

Utilizarea chmod
Pentru gestionarea permisiunilor se folosește comanda chmod. Când utilizați chmod puteți seta permisiuni pentru utilizator (user), grup (group) și alții (other). Puteți folosi această comandă în două moduri: modul relativ și modul absolut. În modul absolut, trei cifre sunt folosite pentru a stabili permisiunile de bază.

Când setați permisiunile, calculați valoarea necesară. Dacă doriți să setați citirea, scrierea și execuția pentru utilizator, citirea și execuția pentru grup, precum și citirea și execuția pentru alții în fișierul /somefile, atunci folosiți următoarea comandă chmod:
chmod 755 /somefileCând utilizați chmod în acest mod, toate permisiunile curente sunt înlocuite cu permisiunile pe care le-ați setat.
Dacă doriți să modificați permisiunile în raport cu permisiunile curente, puteți folosi chmod în modul relativ. Când utilizați chmod în modul relativ, lucrați cu trei indicatori pentru a indica ce doriți să faceți:
- Mai întâi, specificați pentru cine doriți să modificați permisiunile. Pentru aceasta, puteți alege între utilizator (u), grup (g) și alții (o).
- ) Apoi, utilizați operatorul pentru a adăuga sau elimina permisiuni din modul curent sau pentru a le stabili în mod absolut.
- La final, utilizați r, w și x, pentru a specifica ce permisiuni doriți să stabiliți.
Atunci când modificați permisiunile în modul relativ, puteți omite partea „către cine” pentru a adăuga sau elimina permisiuni pentru toate obiectele. De exemplu, această comandă adaugă permisiunea de executare pentru toți utilizatorii:
chmod +x somefileCând lucrați în modul relativ, puteți utiliza, de asemenea, comenzi mai sofisticate. De exemplu, această comandă adaugă permisiunea de scriere pentru grup și elimină permisiunea de citire pentru alții:
chmod g+w,o-r somefileCând folosești chmod -R o+rx /data stabiliți permisiunea de executare pentru toate directoarele, precum și pentru fișierele din directorul /data. Pentru a stabili permisiunea de executare doar pentru directoare, nu pentru fișiere, utilizați chmod -R o+ rX /data.
Majusculele X garantează că fișierele nu vor primi permisiunea de executare dacă fișierul deja nu a stabilit permisiunea de executare pentru anumite obiecte. Acest lucru face ca X să fie un mod mai inteligent de a gestiona permisiunile de executare; va evita stabilirea acestei permisiuni pe fișiere unde nu este necesară.
Permisiuni extinse
Pe lângă permisiunile de bază despre care tocmai ați citit, în Linux există, de asemenea, un set de permisiuni extinse. Acestea nu sunt permisiunile pe care le stabiliți în mod implicit, dar uneori oferă un supliment util. În această secțiune, veți învăța ce reprezintă acestea și cum să le configurați.
Înțelegerea permisiunilor extinse SUID, GUID și sticky bit
Există trei permisiuni avansate. Prima este permisiunea de setare a identificatorului de utilizator (SUID). În anumite cazuri speciale, puteți aplica această permisiune fișierelor executabile. În mod implicit, utilizatorul care rulează un fișier executabil îl rulează cu permisiunile sale proprii.
Pentru utilizatorii obișnuiți, acest lucru înseamnă de obicei că utilizarea programului este limitată. Cu toate acestea, în anumite situații, utilizatorului îi sunt necesare permisiuni speciale, doar pentru a îndeplini o anumită sarcină.
Să luăm, de exemplu, situația în care utilizatorului trebuie să-și schimbe parola. Pentru aceasta, utilizatorul trebuie să scrie noua sa parolă în fișierul /etc/shadow. Cu toate acestea, acest fișier nu este accesibil pentru utilizatorii care nu au drepturi de acces root:
root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow
Permisiunea SUID oferă o soluție pentru această problemă. În utilitarul /usr/bin/passwd, această permisiune este aplicată în mod implicit. Aceasta înseamnă că, la schimbarea parolei, utilizatorul obține temporar drepturi de root, ceea ce îi permite să scrie în fișierul /etc/shadow. Puteți vedea permisiunea SUID cu ls -l cum s în poziția în care te-ai aștepta să vezi x pentru permisiunile utilizatorului:
[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 28 Ian 2010 /usr/bin/passwd
Permisiunea SUID poate părea utilă (și în unele cazuri este), dar în același timp este potențial periculoasă. Dacă este folosită în mod greșit, poți împărți accidental drepturi de acces root. De aceea, recomand să o folosești doar cu maximum de precauție.
Majoritatea administratorilor nu vor trebui să o folosească niciodată; o vei vedea doar în anumite fișiere unde sistemul de operare trebuie să o seteze în mod implicit.
A doua permisiune specială este identificatorul grupului (SGID). Această permisiune are două efecte. Atunci când este aplicată unui fișier executabil, ea oferă utilizatorului care execută fișierul permisiunile proprietarului grupului acestui fișier. Astfel, SGID poate realiza mai mult sau mai puțin același lucru ca SUID. Totuși, pentru acest scop, SGID este utilizat foarte rar.
La fel ca în cazul permisiunii SUID, SGID este aplicat anumitor fișiere de sistem ca setare implicită.
Când este aplicat unui director, SGID poate fi util, pentru că poți folosi această permisiune pentru a stabili proprietarul grupului implicit pentru fișierele și subdirectoarele create în acest director. În mod implicit, atunci când un utilizator creează un fișier, grupul său primar eficient este setat ca proprietar al grupului pentru acel fișier.
Aceasta nu este întotdeauna foarte util, mai ales pentru că utilizatorii de Red Hat/CentOS au ca grup principal un grup cu același nume ca utilizatorul și din care utilizatorul este singurul membru. Astfel, în mod implicit, fișierele pe care le creează utilizatorul vor fi grupate pentru acces general.
Imaginează-ți o situație în care utilizatorii linda și lori lucrează în contabilitate și sunt membri ai grupului account. În mod implicit, acești utilizatori sunt membri ai unui grup privat, cel mai înalt membru al căruia sunt. Totuși, ambii utilizatori sunt membri ai grupului account, dar și ca parametru al unui grup secundar.
Situația implicită este că atunci când oricare dintre acești utilizatori creează un fișier, grupul principal devine proprietarul. Prin urmare, în mod implicit, linda nu poate accesa fișierele create de lori și invers. Totuși, dacă creați un director comun pentru grup (să zicem, /groups/account) și vă asigurați că permisiunea SGID este aplicată la acest director și că contul grupului este setat ca proprietar al grupului pentru acest director, toate fișierele create în acest director și în toate subdirectoarele sale, vor avea de asemenea grupul account ca proprietar implicit al grupului.
Din acest motiv, permisiunea SGID este o permisiune foarte utilă de setat în directoarele grupurilor comune.
Permisiunea SGID este afișată în ieșire ls -l cum s în poziția în care de obicei găsiți permisiunea de execuție pentru grup:
[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account
Al treilea dintre permisiunile speciale este sticky bit. Această permisiune este utilă pentru protejarea fișierelor de ștergerea accidentală într-un mediu în care mai mulți utilizatori au drepturi de scriere într-un singur director. Dacă este aplicat sticky bit, utilizatorul poate șterge un fișier, doar dacă este utilizatorul-proprietar al fișierului sau al directorului în care se află fișierul. Din acest motiv, este aplicat ca permisiune implicită pentru directorul /tmp și poate fi util și pentru directoarele grupurilor comune.
Fără sticky bit, dacă utilizatorul poate crea fișiere în director, el poate de asemenea să șteargă fișiere din acest director. Într-un mediu de grup public, acest lucru poate fi enervant. Imaginați-vă utilizatorii linda și lori, care amândouă au drepturi de scriere în directorul /data/account și obțin aceste permisiuni datorită participării în grupul account. Prin urmare, linda poate șterge fișierele create de lori și invers.
Atunci când aplicați sticky bit, utilizatorul poate șterge fișiere doar dacă se îndeplinește una dintre următoarele condiții:
- Utilizatorul este proprietarul fișierului;
- Utilizatorul este proprietarul directorului în care se află fișierul.
Când folosești ls -l, puteți vedea sticky bit ca t în poziția în care obișnuiți să vedeți permisiunea de execuție pentru alții:
[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/
Aplicarea drepturilor avansate
Pentru a aplica SUID, SGID și sticky bit, puteți de asemenea să folosiți chmod. SUID are valoarea numerică 4, SGID are valoarea numerică 2, iar sticky bit are valoarea numerică 1.
Dacă doriți să aplicați aceste permisiuni, trebuie să adăugați un argument de patru cifre în chmod, prima cifră referindu-se la permisiunile speciale. Linia următoare, de exemplu, va adăuga permisiunea SGID pentru director și va seta rwx pentru utilizator și rx pentru grup și ceilalți:
chmod 2755 /somedirAceasta este destul de nepractic, dacă trebuie să verificați permisiunile curente stabilite înainte de a lucra cu chmod în modul absolut. (Vă expuneți riscului de a suprascrie permisiunile dacă nu faceți acest lucru.) De aceea, vă recomand să lucrați în modul relativ, dacă trebuie să aplicați oricare dintre permisiunile speciale:
- Pentru SUID utilizați chmod u+s.
- Pentru SGID utilizați chmod g+s.
- Pentru sticky bit utilizați chmod +t, apoi numele fișierului sau directorului pentru care doriți să stabiliți permisiunile.
Tabelul rezumă tot ce este important de știut despre gestionarea permisiunilor speciale.

Exemplu de lucru cu drepturi speciale
În acest exemplu, folosiți permisiuni speciale pentru a facilita schimbul de fișiere între membrii grupului în directorul grupului comun. Atribuiți ID bit-ul identificatorului de grup și, de asemenea, sticky bit și observați că, după ce acestea sunt setate, sunt adăugate funcții care facilitează colaborarea membrilor grupului.
- Deschideți terminalul în care sunteți utilizator linda. Puteți crea utilizatorul cu comanda useradd linda, adăugați o parolă passwd linda.
- Creează în rădăcină directorul /data și subdirectorul /data/sales cu comanda mkdir -p /data/sales. Executați cd /data/sales, pentru a accesa directorul sales. Executați touch linda1 și touch linda2, pentru a crea două fișiere goale, al căror proprietar este linda.
- Executați su - lisa pentru a schimba utilizatorul curent la utilizatorul lisa, care de asemenea este membru al grupului sales.
- Executați cd /data/sales și din acest director executați ls -l. Veți vedea cele două fișiere create de utilizatorul linda, care aparțin grupului linda. Executați rm -f linda*. Aceasta va șterge ambele fișiere.
- Executați touch lisa1 și touch lisa2, pentru a crea două fișiere care aparțin utilizatorului lisa.
- Executați su - pentru a crește privilegiile dvs. la nivel de root.
- Executați chmod g+s,o+t /data/sales, pentru a seta bitul identificatorului grupului (GUID) și, de asemenea, bitul sticky în directorul grupului comun.
- Executați su — linda. Apoi, executați touch linda3 și touch linda4. Acum ar trebui să observați că cele două fișiere create de dvs. aparțin grupului sales, care este proprietarul grupului directorului /data/sales.
- Executați rm -rf lisa*. Bitul sticky împiedică ștergerea acestor fișiere în numele utilizatorului linda, deoarece nu sunteți proprietarul acestor fișiere. Rețineți că, dacă utilizatorul linda este proprietarul directorului /data/sales, el poate oricum să șteargă aceste fișiere!
Gestionarea ACL (setfacl, getfacl) în Linux
Chiar dacă permisiunile extinse discutate mai sus adaugă funcționalitate utilă modului în care Linux gestionează permisiunile, acest lucru nu vă permite să oferiți permisiuni mai multor utilizatori sau unui singur grup într-un singur fișier.
Listele de control al accesului oferă această funcție. În plus, ele permit administratorilor să stabilească permisiuni implicite în mod complex, în care permisiunile stabilite pot varia în diverse directoare.
Înțelegerea ACL
Deși subsistemul ACL adaugă funcționalități excelente serverului dvs., are un dezavantaj: nu toate uneltele o susțin. Ca urmare, s-ar putea să pierdeți configurațiile ACL atunci când copiați sau mutați fișiere, iar software-ul de backup s-ar putea să nu salveze configurațiile ACL.
Utilitarul tar nu suportă ACL. Pentru a vă asigura că setările ACL nu vor fi pierdute la crearea unei copii de rezervă, folosiți star în loc de tar. star Funcționează cu aceleași opțiuni ca și tar; pur și simplu adaugă suport pentru setările ACL.
De asemenea, puteți crea o copie de rezervă a ACL cu ajutorul getfacl, care poate fi restaurată cu comanda setfacl. Pentru a crea o copie de rezervă, utilizați getfacl -R /directory > file.acls. Pentru a restaura setările din fișierul de rezervă, utilizați setfacl --restore=file.acl.
Lipsa suportului din partea unor instrumente nu ar trebui să fie o problemă. Listelor ACL li se aplică adesea directorilor ca o măsură structurală, nu fișierelor individuale.
Prin urmare, acestea vor fi puține, doar câteva, aplicate în locuri inteligente ale sistemului de fișiere. Așadar, restaurarea listelor ACL originale cu care ați lucrat este relativ ușoară, chiar dacă software-ul dvs. de backup nu le suportă.
Pregătirea sistemului de fișiere pentru ACL
Înainte de a începe lucrul cu ACL, poate fi necesară pregătirea sistemului de fișiere pentru a susține ACL. Deoarece metadatele sistemului de fișiere trebuie extinse, nu există întotdeauna suport implicit pentru ACL în sistemul de fișiere. Dacă la configurarea listelor ACL pentru sistemul de fișiere primiți mesajul „operațiune nu este acceptată”, este posibil ca sistemul dvs. de fișiere să nu aibă suport pentru ACL.
Pentru a corecta acest lucru, trebuie să adăugați opțiunea acl mount în fișierul /etc/fstab, astfel încât sistemul de fișiere să fie montat cu suport pentru ACL implicit.
Modificarea și vizualizarea setărilor ACL cu setfacl și getfacl
Pentru a stabili ACL, aveți nevoie de comanda setfacl. Pentru a vedea setările curente ale ACL, aveți nevoie de getfacl. Comanda ls -l nu arată niciun ACL existent; arată doar + după lista permisiunilor, ceea ce indică faptul că listele ACL sunt aplicate și fișierului.
Înainte de a configura listele ACL, este întotdeauna util să arătați setările curente ale ACL folosind getfacl. Mai jos, în exemplu, puteți vedea drepturile de acces curente, așa cum sunt prezentate cu ajutorul ls -l, precum și cum sunt prezentate cu getfacl. Dacă priviți suficient de atent, veți observa că informațiile afișate sunt exact aceleași.
[root@server1 \/]# ls -ld \/dir\ndrwxr-xr-x. 2 root root 6 Feb 6 11:28 \/dir\n[root@server1 \/]# getfacl \/dir\ngetfacl: Eliminarea începutului '\/‘ din numele căilor absolute\n# fișier: dir\n# proprietar: root\n# grup: root\nuser::rwx\ngroup::r-x\nother::r-x
Ca urmare a execuției comenzii getfacl mai jos se poate observa că permisiunile sunt afișate pentru trei obiecte diferite: utilizator, grup și altele. Acum să adăugăm ACL pentru a oferi drepturile de citire și execuție grupului sales. Comanda pentru acest lucru setfacl -m g:sales:rx \/dir. În această comandă -m indică faptul că setările curente ale ACL trebuie modificate. După aceasta, g:sales:rx informează comanda să stabilească ACL pentru citire și execuție (rx) pentru grupul (g) sales. Mai jos puteți vedea cum arată comanda, precum și ieșirea comenzii getfacl după modificarea setărilor curente ale ACL.
[root@server1 \/]# setfacl -m g:sales:rx \/dir\n[root@server1 \/]# getfacl \/dir\ngetfacl: Eliminarea începutului '\/‘ din numele căilor absolute\n# fișier: dir\n# proprietar: root\n# grup: root\nuser::rwx\ngroup::r-x\ngroup:sales:r-x\nmask::r-x\nother::r-x
Acum, când înțelegi cum să configurezi un ACL de grup, este ușor să înțelegi ACL-urile pentru utilizatori și alți utilizatori. De exemplu, comanda setfacl -m u:linda:rwx /data oferă permisiuni utilizatorului linda în directorul /data, fără a-i face proprietar și fără a modifica proprietarul actual.
Comanda setfacl are multe funcționalități și opțiuni. O opțiune este deosebit de importantă, parametrul -R. Dacă este utilizată, opțiunea face ca setarea ACL-ului să se aplice tuturor fișierelor și subdirectoarelor care există în prezent în directorul în care configurezi ACL-ul. Este recomandat să folosești întotdeauna această opțiune atunci când modifici listele ACL pentru directoarele existente.
Lucrul cu ACL-uri implicite
Unul dintre avantajele utilizării listelor ACL este că poți acorda permisiuni mai multor utilizatori sau grupuri în director. Un alt avantaj este că poți activa moștenirea, lucrând cu ACL-uri implicite.
Prin stabilirea unui ACL implicit, vei defini permisiunile care vor fi aplicate tuturor elementelor noi create în director. Ține minte că ACL-urile implicite nu schimbă permisiunile pentru fișierele și subdirectoarele existente. Pentru a le modifica, trebuie să adaugi și un ACL obișnuit!
Este important de știut. Dacă dorești să folosești ACL-uri pentru a configura accesul mai multor utilizatori sau grupuri la același director, trebuie să setezi ACL-ul de două ori. Mai întâi folosește setfacl -R -m, pentru a modifica ACL-ul pentru fișierele curente. Apoi folosește setfacl -m d:, pentru a te ocupa de toate elementele noi care vor fi create.
Pentru a stabili un ACL implicit, trebuie doar să adaugi opțiunea d după opțiunea -m (ordinea contează!). Așadar, folosește setfacl -m d:g:sales:rx /data, dacă dorești ca grupul de vânzări să aibă permisiuni de citire și execuție pentru tot ceea ce va fi creat în directorul /data.
Atunci când se folosesc liste de ACL-uri implicite, poate fi de asemenea util să se stabilească ACL-uri pentru alții. În general, aceasta nu are un sens deosebit, deoarece poți de asemenea schimba permisiunile pentru alții folosind chmod. Totuși, ceea ce nu poți face cu ajutorul chmod, specificați drepturile care ar trebui acordate altor utilizatori pentru fiecare fișier nou care va fi creat vreodată. Dacă doriți ca alții să nu aibă nicio permisiune pentru ceva creat în /data, de exemplu, utilizați setfacl -m d:o::- /data.
ACL-urile și permisiunile obișnuite nu sunt întotdeauna bine integrate. Pot apărea probleme dacă ați aplicat ACL-uri implicite unui director, după care elementele au fost adăugate în acel director și apoi încercați să modificați permisiunile obișnuite. Schimbările care sunt aplicate permisiunilor obișnuite nu se vor reflecta bine în revizuirea ACL. Pentru a evita probleme, mai întâi stabiliți permisiunile obișnuite, după care stabiliți ACL-ul implicit (și după aceea încercați să nu le schimbați din nou).
Exemplu de gestionare a permisiunilor extinse utilizând ACL
În acest exemplu, veți continua să lucrați cu directoarele /data/account și /data/sales, pe care le-ați creat anterior. În exemplele anterioare, ați garantat că grupul sales are permisiuni pe /data/sales, iar grupul account are permisiuni pe /data/account.
Mai întâi, asigurați-vă că grupul account primește permisiuni de citire în directorul /data/sales, iar grupul sales primește permisiuni de citire în directorul /data/account.
Apoi, stabiliți listele ACL implicite pentru a vă asigura că toate fișierele noi au permisiunile corecte setate pentru toate elementele noi.
- Deschideți terminalul.
- Executați setfacl -m g:account:rx /data/sales și setfacl -m g:sales:rx /data/account.
- Executați getfacl, pentru a vă asigura că permisiunile au fost setate așa cum ați dorit.
- Executați setfacl -m d:g:account:rwx,g:sales:rx /data/sales, pentru a stabili ACL-ul implicit pentru directorul sales.
- Adăugați ACL-ul implicit pentru directorul /data/account, folosind setfacl -m d:g:sales:rwx,g:account:rx /data/account.
- Asigurați-vă că setările ACL sunt funcționale, adăugând un fișier nou în /data/sales. Executați touch /data/sales/newfile și executați getfacl /data/sales/newfile pentru a verifica permisiunile curente.
Setarea permisiunilor implicite folosind umask
Aici ați învățat cum să lucrați cu ACL-uri implicite. Dacă nu utilizați ACL-uri, există o opțiune de shell care determină permisiunile implicite pe care le veți obține: umask (mască inversă). În această secțiune veți învăța cum să modificați permisiunile implicite folosind umask.
Probabil ați observat că, atunci când creați un fișier nou, se stabilesc unele permisiuni implicite. Aceste permisiuni sunt determinate de setare. umask. Această opțiune de shell se aplică tuturor utilizatorilor la conectarea în sistem. În parametru umask se folosește o valoare numerică, care este scăzută din permisiunile maxime care pot fi setate automat pentru fișier; setarea maximă pentru fișiere este 666, iar pentru director este 777.
Totuși, există unele excepții de la această regulă. Puteți găsi o prezentare generală completă a setărilor umask în tabelul de mai jos.
Din cifrele folosite în umask, ca și în cazul argumentelor numerice pentru comanda chmod, prima cifră se referă la permisiunile utilizatorului, a doua cifră se referă la permisiunile grupului, iar ultima se referă la permisiunile implicite stabilite pentru alții. Valoarea umask implicite 022 dă 644 pentru toate fișierele noi și 755 pentru toate directoarele noi create pe serverul dumneavoastră.
O prezentare completă a tuturor valorilor numerice umask și rezultatele acestora sunt în tabelul de mai jos.

O modalitate simplă de a vedea cum funcționează parametrul umask este următoarea: începeți cu permisiunile implicite pentru fișier, setate la 666, și scădeți umask pentru a obține permisiunile active. Faceți același lucru pentru director și permisiunile sale implicite 777.
Există două modalități de a modifica setarea umask: pentru toți utilizatorii și pentru utilizatori individuali. Dacă doriți să stabiliți umask pentru toți utilizatorii, trebuie să vă asigurați că parametrul umask este luat în considerare la execuția fișierelor de mediu de shell, așa cum este specificat în /etc/profile. Abordarea corectă este să creați un script de shell numit umask.sh în directorul /etc/profile.d și să specificați umask pe care doriți să îl folosiți în acest script de shell. Dacă umask este modificat în acest fișier, acesta se aplică tuturor utilizatorilor după conectarea la server.
O alternativă la configurarea umask prin /etc/profile și fișierele asociate, unde se aplică tuturor utilizatorilor care se conectează la sistem, este modificarea setărilor umask în fișierul numit .profile, care este creat în directorul de acasă al fiecărui utilizator.
Setările aplicate în acest fișier se aplică doar pentru un utilizator individual; prin urmare, acesta este un bun metodă dacă aveți nevoie de mai multă detaliere. Personal, îmi place această funcție, pentru a schimba valoarea umask implicită pentru utilizatorul root la 027, în timp ce utilizatorii obișnuiți lucrează cu umask implicit 022.
Lucrul cu atributele extinse ale utilizatorului
Aceasta este secțiunea finală despre permisiunile în Linux.
Când lucrezi cu permisiunile, întotdeauna există o legătură între obiectul utilizatorului sau grupului și permisiunile pe care aceste obiecte le au pentru un fișier sau un director. O metodă alternativă de protejare a fișierelor pe un server Linux este utilizarea atributelor.
Atributele își îndeplinesc funcția indiferent de utilizatorul care accesează fișierul.
Ca în cazul ACL-urilor, pentru atributele fișierului poate fi necesară activarea parametrului mount.
Aceasta este opțiunea user_xattr. Dacă primești mesajul „operațiune nesuportată” în timp ce lucrezi cu atributele extinse ale utilizatorului, asigură-te că ai setat parametrul mount în fișierul /etc/fstab.
Multe atribute sunt documentate. Unele atribute sunt disponibile, dar încă nu sunt implementate. Nu le folosi; nu îți vor aduce nimic.
Mai jos sunt cele mai utile atribute pe care le poți aplica:
A Acest atribut garantează că timpul de acces la fișier nu se modifică.
De obicei, de fiecare dată când fișierul este deschis, timpul de acces trebuie să fie înregistrat în metadatele fișierului. Acest lucru afectează negativ performanța; de aceea, pentru fișierele la care se accesează frecvent, atributul A poate fi folosit pentru a dezactiva această funcție.
a Acest atribut permite adăugarea, dar nu și eliminarea fișierului.
c Dacă folosești un sistem de fișiere care suportă compresia la nivel de volum, acest atribut al fișierului garantează că fișierul va fi comprimat la prima activare a mecanismului de compresie.
D Acest atribut garantează că modificările din fișiere sunt scrise pe disc imediat și nu sunt mai întâi cache-uite. Este un atribut util pentru fișierele importante din baze de date, asigurându-te că nu sunt pierdute între cache-ul fișierului și hard disk.
d Acest atribut garantează că fișierul nu va fi salvat în copiile de rezervă unde este utilizată utilitarul de dump.
I Acest atribut activează indexarea pentru directorul în care este activat. Aceasta asigură un acces mai rapid la fișiere pentru sistemele de fișiere primitive, cum ar fi Ext3, care nu folosesc o bază de date B-tree pentru acces rapid la fișiere.
i Acest atribut face ca fișierul să fie neschimbabil. Prin urmare, nu pot fi aduse modificări în fișier, ceea ce este util pentru fișierele care necesită protecție suplimentară.
j Acest atribut garantează că, în sistemul de fișiere ext3, fișierul este mai întâi scris în jurnal și apoi în blocurile de date de pe hard disk.
s Rescrierea blocurilor în care fișierul a fost salvat cu 0 după ștergerea fișierului. Acest lucru garantează că recuperarea fișierului este imposibilă după ce a fost șters.
u Acest atribut păstrează informațiile despre ștergere. Acest lucru permite dezvoltarea unei utilitare care lucrează cu aceste informații pentru a recupera fișierele șterse.
Dacă doriți să aplicați atributele, puteți folosi comanda chattr. De exemplu, folosiți chattr +s somefile, pentru a aplica atributele la somefile. Vreți să ștergeți atributul? Atunci folosiți chattr -s somefile, și acesta va fi eliminat. Pentru a obține o prezentare generală a tuturor atributelor care sunt în prezent aplicate, folosiți comanda lsattr.
Rezumat
În acest articol, ați învățat cum să lucrați cu permisiunile. Ați citit despre cele trei permisiuni de bază, permisiunile extinse și cum să aplicați listele ACL în sistemul de fișiere. De asemenea, ați învățat cum să folosiți parametrul umask pentru a aplica permisiuni implicite. La sfârșitul acestui articol, ați învățat cum să utilizați atributele extinse ale utilizatorului pentru a aplica un nivel suplimentar de securitate a sistemului de fișiere.
Dacă v-a plăcut această traducere, vă rog să scrieți despre aceasta în comentarii. Va fi mai multă motivație pentru a face traduceri utile.
În articol am corectat unele greșeli de tipar și gramaticale. Am redus unele paragrafe voluminoase în unele mai mici pentru o mai bună percepție.
În loc de „Numai cineva cu drepturi administrative asupra directorului poate aplica permisiunea de execuție.” am corectat la „Numai cineva cu drepturi de scriere asupra directorului poate aplica permisiunea de execuție.”, ceea ce va fi mai corect.
Mulțumesc pentru observații .
Am înlocuit:
Dacă nu sunteți proprietar utilizator, shell-ul va verifica dacă sunteți membru al grupului care poartă aceeași denumire ca grupul fișierului.Cu:
Dacă nu sunteți proprietarul fișierului, shell-ul va verifica dacă sunteți membru al grupului care are permisiuni asupra acestui fișier. Dacă sunteți membru al acestui grup, veți obține acces la fișier cu permisiunile stabilite pentru grup, iar shell-ul va opri verificarea.Mulțumesc pentru observație
Sursa: habr.com
