Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Salutare tuturor. Aceasta este traducerea unui articol din cartea RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 și EX300.

Apăsaţi: Sper că articolul va fi util nu numai pentru începători, dar va ajuta și administratorii mai experimentați să-și eficientizeze cunoștințele.

Deci să mergem.

Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Pentru a accesa fișierele în Linux, se folosesc permisiuni. Aceste permisiuni sunt atribuite la trei obiecte: proprietarul fișierului, proprietarul grupului și un alt obiect (adică toți ceilalți). În acest articol, veți învăța cum să aplicați permisiunile.

Acest articol începe cu o prezentare generală a conceptelor de bază, urmată de o discuție despre Permisiuni speciale și Liste de control al accesului (ACL). La sfârșitul acestui articol, vom aborda setarea permisiunilor implicite prin umask, precum și gestionarea atributelor extinse ale utilizatorului.

Gestionarea proprietății fișierelor

Înainte de a discuta despre permisiuni, ar trebui să fiți conștient de rolul proprietarului fișierului și directorului. Proprietatea fișierelor și directoarelor este vitală pentru gestionarea permisiunilor. În această secțiune, veți afla mai întâi cum puteți vedea proprietarul. Veți învăța apoi cum să schimbați proprietarul și utilizatorul grupului pentru fișiere și directoare.

Afișarea proprietarului unui fișier sau director

În Linux, fiecare fișier și fiecare director are doi proprietari: un utilizator și un proprietar de grup.

Acești proprietari sunt setați atunci când este creat un fișier sau un director. Utilizatorul care creează fișierul devine proprietarul acelui fișier, iar grupul principal căruia îi aparține același utilizator devine și proprietarul acelui fișier. Pentru a determina dacă, în calitate de utilizator, aveți permisiunea de a accesa un fișier sau un director, shell-ul verifică dreptul de proprietate.

Acest lucru se întâmplă în următoarea ordine:

  1. Shell-ul verifică dacă sunteți proprietarul fișierului pe care doriți să-l accesați. Dacă sunteți proprietarul, obțineți permisiuni și shell-ul nu mai verifică.
  2. Dacă nu sunteți proprietarul fișierului, shell-ul va verifica dacă sunteți membru al unui grup care are permisiuni pentru fișier. Dacă sunteți membru al acestui grup, veți accesa fișierul cu permisiunile pe care grupul le-a stabilit, iar shell-ul va opri verificarea.
  3. Dacă nu sunteți nici utilizator, nici proprietarul unui grup, vi se acordă drepturile altor utilizatori (Altele).

Pentru a vedea atribuirile actuale de proprietar, puteți folosi comanda ls -l. Această comandă arată utilizatorul și proprietarul grupului. Mai jos puteți vedea setările proprietarului pentru directoarele din 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

Cu comanda ls puteți afișa proprietarul fișierelor dintr-un director dat. Uneori poate fi util să obțineți o listă cu toate fișierele de pe sistem care au un anumit utilizator sau grup ca proprietar. Pentru aceasta puteți folosi găsi. Argument găsi-utilizator poate fi folosit în acest scop. De exemplu, următoarea comandă listează toate fișierele care sunt deținute de utilizatorul linda:

find / -user linda

Puteți utiliza, de asemenea găsi pentru a căuta fișiere care au un anumit grup ca proprietar.

De exemplu, următoarea comandă caută toate fișierele care aparțin grupului utilizatorii:

find / -group users

Schimbarea proprietarului

Pentru a aplica permisiunile corespunzătoare, primul lucru de luat în considerare este proprietatea. Există o comandă pentru asta chown. Sintaxa acestei comenzi este ușor de înțeles:

chown кто что

De exemplu, următoarea comandă schimbă proprietarul directorului /home/account în utilizatorul linda:

chown linda /home/account

Echipă chown are mai multe opțiuni, dintre care una este deosebit de utilă: -R. Puteți ghici ce face, deoarece această opțiune este disponibilă și pentru multe alte comenzi. Acest lucru vă permite să setați recursiv proprietarul, ceea ce vă permite să setați proprietarul directorului curent și tot ce este mai jos. Următoarea comandă schimbă proprietarul directorului /home și a tot ceea ce este dedesubt utilizatorului 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

Hai sa facem:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Acum, utilizatorul lisa a devenit proprietarul directorului contului:

[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

Schimbați proprietarul unui grup

Există două moduri de a schimba dreptul de proprietate asupra unui grup. Puteți face acest lucru folosind chown, dar există o comandă specială numită chgrpasta face treaba. Dacă doriți să utilizați comanda chown, utilizare . sau : în fața numelui grupului.

Următoarea comandă schimbă orice proprietar al grupului /home/account în grupul de conturi:

chown .account /home/account

poți să folosești chown pentru a schimba proprietarul unui utilizator și/sau grup în mai multe moduri. Aici sunt cateva exemple:

  • chown lisa myfile1 setează utilizatorul lisa ca proprietar al myfile1.
  • chown lisa.sales myfile setează utilizatorul lisa ca proprietar al fișierului myfile și, de asemenea, setează grupul de vânzări ca proprietar al aceluiași fișier.
  • chown lisa:sales myfile la fel ca și comanda anterioară.
  • chown .sales myfile setează grupul de vânzări ca proprietar al myfile fără a schimba proprietarul utilizatorului.
  • chown :sales myfile la fel ca și comanda anterioară.

Puteți folosi comanda chgrppentru a schimba proprietarul grupului. Luați în considerare următorul exemplu, unde puteți utiliza chgrp setați proprietarul directorului contului la grupul de vânzări:

chgrp .sales /home/account

Ca și în cazul chown, puteți folosi opțiunea -R с chgrp, precum și să schimbe recursiv proprietarul grupului.

Înțelegerea proprietarului implicit

Este posibil să fi observat că atunci când un utilizator creează un fișier, proprietatea implicită este aplicată.
Utilizatorul care creează fișierul devine automat proprietarul acelui fișier, iar grupul principal al utilizatorului respectiv devine automat proprietarul acelui fișier. Acesta este de obicei grupul care este listat în fișierul /etc/passwd ca grup principal al utilizatorului. Cu toate acestea, dacă utilizatorul este membru al mai multor grupuri, utilizatorul poate schimba grupul principal efectiv.

Pentru a afișa grupul primar efectiv efectiv, utilizatorul poate folosi comanda Grupuri:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Dacă utilizatorul linda actual dorește să schimbe grupul primar efectiv, va folosi comanda nougrpurmat de numele grupului pe care dorește să îl stabilească ca noul grup primar efectiv. După folosirea comenzii nougrp grupul principal va fi activ până când utilizatorul introduce o comandă ieşire sau nu deconectați-vă.

Următoarele arată cum folosește utilizatorul linda această comandă, cu vânzările ca grup principal:

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ă schimbarea grupului principal efectiv, toate fișierele noi create de utilizator vor avea grupul respectiv drept proprietar. Pentru a reveni la setarea inițială a grupului principal, utilizați ieşire.

Pentru a putea folosi comanda nougrp, utilizatorul trebuie să fie membru al grupului pe care dorește să-l folosească ca grup principal. În plus, o parolă de grup poate fi utilizată pentru un grup folosind comanda gpasswd. Dacă utilizatorul folosește comanda nougrpdar nu este membru al grupului țintă, shell-ul solicită parola grupului. După ce introduceți parola corectă de grup, va fi stabilit un nou grup primar efectiv.

Managementul drepturilor fundamentale

Sistemul de permisiuni Linux a fost inventat în anii 1970. Deoarece nevoile de calcul erau limitate în acei ani, sistemul de permisiuni de bază era destul de limitat. Acest sistem de permisiuni folosește trei permisiuni care pot fi aplicate fișierelor și directoarelor. În această secțiune, veți învăța cum să utilizați și să modificați aceste permisiuni.

Înțelegerea permisiunilor de citire, scriere și execuție

Trei permisiuni de bază vă permit să citiți, să scrieți și să executați fișiere. Efectul acestor permisiuni diferă atunci când sunt aplicate fișierelor sau directoarelor. Pentru un fișier, permisiunea de citire vă oferă dreptul de a deschide fișierul pentru citire. Prin urmare, puteți citi conținutul acestuia, dar asta înseamnă că computerul 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 acea bibliotecă. Rezultă că permisiunea de citire este cea mai de bază permisiunea de care aveți nevoie pentru a lucra cu fișiere.

Când este aplicată unui director, citirea vă permite să afișați conținutul acelui 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 și singura modalitate de a citi un fișier este utilizarea permisiunilor de citire pentru acel fișier.

După cum probabil puteți ghici, permisiunea de scriere, dacă este aplicată unui fișier, permite scrierea în fișier. Cu alte cuvinte, vă permite să modificați conținutul fișierelor existente. Cu toate acestea, nu vă permite să creați sau să ștergeți fișiere noi sau să modificați permisiunile pentru fișiere. Pentru a face acest lucru, trebuie să acordați permisiunea de scriere directorului în care doriți să creați fișierul. În directoare, această permisiune vă permite, de asemenea, să creați și să ștergeți noi subdirectoare.

Permisiunea de execuție este ceea ce aveți nevoie pentru a executa fișierul. Nu va fi niciodată instalat implicit, ceea ce face Linux aproape complet imun la viruși. Numai cineva cu permisiuni de scriere în director poate aplica permisiunea de execuție.

Următoarele rezumă utilizarea permisiunilor de bază:

Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Folosind chmod

Comanda este folosită pentru a gestiona permisiunile. chmod. Folosind chmod puteți seta permisiuni pentru utilizator (utilizator), grupuri (grup) și altele (altele). Puteți utiliza această comandă în două moduri: modul relativ și modul absolut. În modul absolut, trei cifre sunt folosite pentru a seta permisiunile de bază.

Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Când setați permisiunile, calculați valoarea de care aveți nevoie. Dacă doriți să setați citire/scriere/execuție pentru utilizator, citire/executare pentru grup și citire/executare pentru alții în /somefile, atunci utilizați următoarea comandă chmod:

chmod 755 /somefile

Când utilizați chmod în acest fel, toate permisiunile curente sunt înlocuite cu permisiunile pe care le setați.

Dacă doriți să modificați permisiunile în raport cu permisiunile curente, puteți utiliza chmod în mod relativ. Folosind chmod în modul relativ lucrezi cu trei indicatori pentru a indica ceea ce vrei să faci:

  1. Mai întâi specificați pentru cine doriți să modificați permisiunile. Pentru a face acest lucru, puteți alege între utilizator (u), grup (g) si altii (o).
  2. Apoi utilizați o declarație pentru a adăuga sau elimina permisiuni din modul curent sau pentru a le seta absolut.
  3. La sfarsit folosesti r, w и xpentru a specifica ce permisiuni doriți să setați.

Când schimbați permisiunile în modul relativ, puteți sări peste partea „la” pentru a adăuga sau elimina permisiunea pentru toate obiectele. De exemplu, această comandă adaugă permisiunea de execuție pentru toți utilizatorii:

chmod +x somefile

Când lucrați în modul relativ, puteți utiliza și comenzi mai complexe. De exemplu, această comandă adaugă permisiunea de scriere unui grup și elimină permisiunea de citire pentru alții:

chmod g+w,o-r somefile

Când utilizați chmod -R o+rx /data setați permisiunea de execuție pentru toate directoarele, precum și pentru fișierele din directorul /data. Pentru a seta permisiunea de execuție numai pentru directoare și nu pentru fișiere, utilizați chmod -R o+ rX /data.

X majuscule asigură că fișierele nu primesc permisiunea de execuție decât dacă fișierul a setat deja permisiunea de execuție pentru unele obiecte. Acest lucru face din X o modalitate mai inteligentă de a gestiona permisiunile de execuție; acest lucru va evita setarea acestei permisiuni pentru fișierele în care nu este necesară.

Drepturi extinse

Pe lângă permisiunile de bază despre care tocmai ați citit, Linux are și un set de permisiuni avansate. Acestea nu sunt permisiunile pe care le setați implicit, dar uneori oferă un plus util. În această secțiune, veți afla ce sunt acestea și cum să le configurați.

Înțelegerea permisiunilor extinse SUID, GUID și Sticky Bit

Există trei permisiuni avansate. Prima dintre acestea este permisiunea de a seta un identificator de utilizator (SUID). În unele cazuri speciale, puteți aplica această permisiune fișierelor executabile. În mod implicit, un utilizator care rulează un executabil rulează acel fișier cu propriile permisiuni.

Pentru utilizatorii obișnuiți, acest lucru înseamnă de obicei că utilizarea programului este limitată. Cu toate acestea, în unele cazuri, utilizatorul are nevoie de permisiuni speciale, doar pentru a efectua o anumită sarcină.

Luați în considerare, de exemplu, o situație în care un utilizator trebuie să-și schimbe parola. Pentru a face acest lucru, utilizatorul trebuie să scrie noua parolă în fișierul /etc/shadow. Cu toate acestea, acest fișier nu poate fi scris de utilizatorii non-root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Permisiunea SUID oferă o soluție la această problemă. Utilitarul /usr/bin/passwd folosește această permisiune în mod implicit. Aceasta înseamnă că la schimbarea parolei, utilizatorul devine temporar root, ceea ce îi permite să scrie în fișierul /etc/shadow. Puteți vedea permisiunea SUID cu ls -l ca s într-o poziție în care te-ai aștepta în mod normal să vezi x pentru permisiuni personalizate:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 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ă nu este aplicat corect, puteți da accidental permisiunile root. Prin urmare, recomand să-l folosești doar cu cea mai mare grijă.

Majoritatea administratorilor nu vor trebui să-l folosească niciodată; îl veți vedea doar în unele fișiere în care sistemul de operare ar trebui să îl seteze implicit.

A doua permisiune specială este identificatorul de grup (SGID). Această permisiune are două efecte. Când este aplicat unui fișier executabil, îi oferă utilizatorului care execută fișierul permisiunile proprietarului grupului fișierului. Deci SGID poate face mai mult sau mai puțin același lucru ca SUID. Cu toate acestea, SGID nu este practic utilizat în acest scop.

Ca și în cazul permisiunii SUID, SGID este aplicat unor fișiere de sistem ca setare implicită.

Când este aplicat unui director, SGID-ul poate fi util, deoarece îl puteți utiliza pentru a seta proprietarul implicit al grupului pentru fișierele și subdirectoarele create în acel director. În mod implicit, atunci când un utilizator creează un fișier, grupul său principal efectiv este setat ca proprietar de grup pentru acel fișier.

Acest lucru nu este întotdeauna foarte util, mai ales că utilizatorii Red Hat/CentOS au grupul lor principal setat la un grup cu același nume ca și utilizatorul și din care utilizatorul este singurul membru. Astfel, în mod implicit, fișierele pe care utilizatorul le creează vor fi partajate în bloc.

Imaginați-vă o situație în care utilizatorii linda și lori lucrează în contabilitate și sunt membri ai unui grup cont. În mod implicit, acești utilizatori sunt membri ai unui grup privat din care sunt singurul membru. Cu toate acestea, ambii utilizatori sunt membri ai grupului de conturi, dar și ca parametru secundar al grupului.

Situația implicită este că atunci când oricare dintre acești utilizatori creează un fișier, grupul principal devine proprietar. Prin urmare, în mod implicit, linda nu poate accesa fișierele create de lori și invers. Cu toate acestea, dacă creați un director de grup partajat (să spunem /groups/account) și vă asigurați că permisiunea SGID este aplicată acelui director și că contul de grup este setat ca proprietar de grup pentru acel director, toate fișierele create în acel director și toate din subdirectoarele sale, obțineți și contul de grup ca proprietar al grupului în mod implicit.

Din acest motiv, permisiunea SGID este o permisiune foarte utilă de setat în directoarele de grup publice.

Permisiunea SGID este afișată în ieșire ls -l ca s în poziția în care ați găsi în mod normal permisiunea de a executa un grup:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

A treia dintre permisiunile speciale este sticky bit. Această permisiune este utilă pentru protejarea fișierelor împotriva ștergerii accidentale într-un mediu în care mai mulți utilizatori au acces de scriere la același director. Dacă se folosește un bit sticky, un utilizator poate șterge un fișier numai dacă este proprietarul utilizatorului fișierului sau directorului care conține fișierul. Din acest motiv, este folosit ca permisiunea implicită pentru directorul /tmp și poate fi util și pentru directoarele de grup publice.

Fără sticky bit, dacă utilizatorul poate crea fișiere într-un director, poate șterge și fișiere din acel director. Într-un mediu de grup public, acest lucru poate fi enervant. Imaginați-vă utilizatorii linda și lori, care au ambele permisiuni de scriere în directorul /data/account și obțin acele permisiuni fiind membri ai grupului de conturi. Prin urmare, linda poate șterge fișierele create de lori și invers.

Când aplicați sticky bit, utilizatorul poate șterge fișiere numai dacă una dintre următoarele condiții este adevărată:

  • Utilizatorul este proprietarul fișierului;
  • Utilizatorul este proprietarul directorului în care se află fișierul.

Când utilizați ls -l, puteți vedea partea lipicioasă ca t în poziția în care ați vedea în mod normal 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 extinse

Pentru a aplica SUID, SGID și sticky bit puteți folosi și chmod. SUID are o valoare numerică de 4, SGID are o valoare numerică de 2, iar sticky bit are o valoare numerică de 1.

Dacă doriți să aplicați aceste permisiuni, trebuie să adăugați un argument de patru cifre la chmod, a cărui primă cifră se referă la permisiuni speciale. Următoarea linie, de exemplu, va adăuga permisiunea SGID în director și va seta rwx pentru utilizator și rx pentru grup și altele:

chmod 2755 /somedir

Acest lucru este destul de nepractic dacă trebuie să vedeți permisiunile curente care sunt setate înainte de a lucra cu acestea chmod în regim absolut. (Experiți riscul de a suprascrie permisiunile dacă nu o faceți.) Prin urmare, vă recomand să rulați în modul relativ dacă trebuie să aplicați oricare dintre permisiunile speciale:

  1. Pentru utilizare SUID chmod u+s.
  2. Pentru utilizare SGID chmod g+s.
  3. Pentru utilizarea sticky bit chmod +t, urmat de numele fișierului sau directorului pentru care doriți să setați permisiunile.

Tabelul rezumă tot ce trebuie să știți despre gestionarea permisiunilor speciale.

Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Exemplu de lucru cu drepturi speciale

În acest exemplu, utilizați permisiuni speciale pentru a facilita accesul membrilor grupului la fișiere în directorul de grup partajat. Alocați bitul ID ID-ului grupului setat, precum și bitului sticky și vedeți că odată ce sunt setate, sunt adăugate caracteristici pentru a facilita colaborarea membrilor grupului.

  1. Deschideți un terminal în care sunteți utilizatorul linda. Puteți crea un utilizator cu comanda Linda, adăugați parola passwd Linda.
  2. Creați directorul /data în rădăcină și subdirectorul /data/sales cu comanda mkdir -p /data/sales. Complet cd /date/salespentru a merge la directorul de vânzări. Complet atinge linda1 и atinge linda2pentru a crea două fișiere goale deținute de linda.
  3. urmări su-lisa pentru a comuta utilizatorul curent la utilizatorul lisa, care este și membru al grupului de vânzări.
  4. urmări cd /date/sales și din acel director executați ls -l. Veți vedea două fișiere care au fost create de utilizatorul linda și aparțin grupului linda. Complet rm -f linda*. Acest lucru va elimina ambele fișiere.
  5. urmări atinge lisa1 и atinge lisa2pentru a crea două fișiere care sunt deținute de utilizatorul lisa.
  6. urmări su- pentru a-ți ridica privilegiile la root.
  7. urmări chmod g+s,o+t /data/salespentru a seta bitul de identificare a grupului (GUID), precum și bitul sticky din directorul de grup partajat.
  8. urmări su-linda. Atunci fa atinge linda3 и atinge linda4. Ar trebui să vedeți acum că cele două fișiere pe care le-ați creat sunt deținute de grupul de vânzări, care este proprietarul grupului al directorului /data/sales.
  9. urmări rm -rf lisa*. Bitul lipicios î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, oricum poate șterge aceste fișiere!

Gestionarea ACL (setfacl, getfacl) în Linux

Chiar dacă permisiunile extinse discutate mai sus adaugă funcționalități utile modului în care Linux gestionează permisiunile, nu vă permite să acordați permisiuni pentru mai mult de un utilizator sau grup în același fișier.

Listele de control acces oferă această caracteristică. În plus, acestea permit administratorilor să stabilească permisiunile implicite într-un mod complex, unde permisiunile setate pot varia de la un director la altul.

Înțelegerea ACL-urilor

Deși subsistemul ACL adaugă o funcționalitate excelentă serverului dvs., acesta are un dezavantaj: nu toate utilitățile îl acceptă. Prin urmare, este posibil să pierdeți setările ACL atunci când copiați sau mutați fișiere, iar software-ul dvs. de rezervă ar putea să nu reușească să faceți copii de rezervă ale setărilor ACL.

Utilitarul tar nu acceptă ACL-uri. Pentru a vă asigura că setările ACL nu sunt pierdute atunci când creați o copie de rezervă, utilizați stea în loc de gudron. stea funcționează cu aceleași opțiuni ca tar; doar adaugă suport pentru setările ACL.

De asemenea, puteți face copii de rezervă ACL-uri cu getfacl, care poate fi restaurat folosind comanda setfacl. Pentru a crea o copie de rezervă, utilizați getfacl -R /directory > fișier.acls. Pentru a restabili setările dintr-un fișier de rezervă, utilizați setfacl --restore=file.acl.

Lipsa de sprijin din partea unor instrumente nu ar trebui să fie o problemă. ACL-urile sunt adesea aplicate directoarelor ca măsură structurală, mai degrabă decât fișierelor individuale.
Prin urmare, nu vor fi multe dintre ele, ci doar câteva, aplicate în locuri inteligente din sistemul de fișiere. Prin urmare, restaurarea ACL-urilor originale cu care ați lucrat este relativ ușoară, chiar dacă software-ul dvs. de rezervă nu le acceptă.

Pregătirea sistemului de fișiere pentru ACL-uri

Înainte de a începe să lucrați cu ACL-uri, poate fi necesar să vă pregătiți sistemul de fișiere pentru a accepta ACL-uri. Deoarece metadatele sistemului de fișiere trebuie extinse, nu există întotdeauna suport implicit pentru ACL-uri în sistemul de fișiere. Dacă primiți un mesaj „operațiune neacceptată” când configurați ACL-uri pentru un sistem de fișiere, este posibil ca sistemul dvs. de fișiere să nu accepte ACL-uri.

Pentru a remedia acest lucru, trebuie să adăugați opțiunea montura acl în /etc/fstab, astfel încât sistemul de fișiere să fie montat implicit cu suport ACL.

Modificarea și vizualizarea setărilor ACL cu setfacl și getfacl

Pentru a seta un ACL aveți nevoie de comanda setfacl. Pentru a vedea setările curente ACL, aveți nevoie getfacl. Echipă ls -l nu afișează niciun ACL-uri existente; arată doar un + după lista de permisiuni, ceea ce indică faptul că ACL-urile se aplică și fișierului.

Înainte de a configura ACL-uri, este întotdeauna o idee bună să afișați setările ACL curente cu getfacl. În exemplul de mai jos, puteți vedea permisiunile curente, așa cum se arată cu ls -l, și, de asemenea, așa cum se arată cu getfacl. Dacă te uiți suficient de atent, vei vedea că informațiile afișate sunt exact aceleași.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Ca urmare a executării comenzii getfacl mai jos puteți vedea că permisiunile sunt afișate pentru trei obiecte diferite: utilizator, grup și altele. Acum să adăugăm un ACL pentru a acorda permisiuni de citire și executare și grupului de vânzări. comanda pentru asta setfacl -mg:sales:rx /dir. În această echipă -m indică faptul că setările curente ACL trebuie modificate. După care g:sales:rx spune comenzii să seteze ACL de citire-execuție (rx) pentru grup (g) vânzări. Mai jos puteți vedea cum arată comanda, precum și rezultatul comenzii getfacl după modificarea setărilor curente ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Acum că înțelegeți cum să configurați un ACL de grup, este ușor să înțelegeți ACL-urile pentru utilizatori și alți utilizatori. De exemplu, comanda setfacl -mu:linda:rwx /data oferă permisiuni utilizatorului linda în directorul /data fără a-l face proprietar sau a schimba atribuirea proprietarului actual.

Echipă setfacl are multe caracteristici și opțiuni. O opțiune este deosebit de importantă, parametrul -R. Dacă este utilizată, opțiunea setează ACL-ul pentru toate fișierele și subdirectoarele care există în prezent în directorul în care setați ACL-ul. Este recomandat să utilizați întotdeauna această opțiune atunci când schimbați ACL-urile pentru directoare existente.

Lucrul cu ACL-uri implicite

Unul dintre avantajele utilizării ACL-urilor este că puteți acorda permisiuni mai multor utilizatori sau grupuri dintr-un director. Un alt avantaj este că puteți activa moștenirea lucrând cu ACL-urile implicite.

Prin setarea ACL implicită, determinați permisiunile care vor fi setate pentru toate elementele noi create în director. Rețineți că ACL implicit nu modifică permisiunile pentru fișierele și subdirectoarele existente. Pentru a le schimba, trebuie să adăugați și un ACL normal!

Acest lucru este important de știut. Dacă doriți să utilizați un ACL pentru a configura mai mulți utilizatori sau grupuri pentru a accesa același director, trebuie să setați ACL de două ori. Prima utilizare setfacl -R -mpentru a modifica ACL-urile pentru fișierele curente. Apoi folosiți setfacl-md:să aibă grijă de toate elementele noi care vor fi, de asemenea, create.

Pentru a seta ACL implicit, trebuie doar să adăugați opțiunea d după opțiune -m (ordinea contează!). Deci folosește setfacl -md:g:sales:rx /datadacă doriți ca vânzările de grup să citească și să execute orice a fost creat vreodată în directorul /data.

Când utilizați ACL-uri implicite, poate fi util să setați ACL-uri pentru alții. De obicei, acest lucru nu are prea mult sens, deoarece puteți modifica și permisiunile pentru alții chmod. Totuși, cu ce nu poți face chmod, este de a specifica drepturile care trebuie acordate altor utilizatori pentru fiecare fișier nou creat vreodată. Dacă doriți să împiedicați alții să obțină permisiuni pentru orice creat în /data, de exemplu, utilizați setfacl -md:o::- /data.

ACL-urile și permisiunile normale nu sunt întotdeauna bine integrate. Pot apărea probleme dacă aplicați un ACL implicit unui director, apoi elementele sunt adăugate în acel director și apoi încercați să modificați permisiunile normale. Modificările care se aplică permisiunilor normale nu vor fi bine reflectate în prezentarea generală a ACL. Pentru a evita problemele, setați mai întâi permisiunile normale, apoi setați ACL-urile implicite (și încercați să nu le modificați din nou după aceea).

Exemplu de management ridicat al drepturilor folosind ACL-uri

În acest exemplu, veți continua cu directoarele /data/account și /data/sales pe care le-ați creat mai devreme. În exemplele anterioare, v-ați asigurat că grupul de vânzări are permisiuni pentru /data/sales și grupul de conturi are permisiuni pentru /data/account.

În primul rând, asigurați-vă că grupul de conturi primește permisiuni de citire în directorul /data/sales, iar grupul de vânzări primește permisiuni de citire în directorul /data/account.

Apoi setați ACL-uri implicite pentru a vă asigura că toate fișierele noi au permisiunile corecte setate pentru toate elementele noi.

  1. Deschide un terminal.
  2. urmări setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. urmări getfaclpentru a vă asigura că permisiunile au fost setate așa cum ați dorit.
  4. urmări setfacl -md:g:account:rwx,g:sales:rx /data/salespentru a seta ACL implicit pentru directorul de vânzări.
  5. Adăugați un ACL implicit pentru directorul /data/account folosind setfacl -md:g:sales:rwx,g:account:rx /data/account.
  6. Verificați dacă setările ACL sunt în vigoare adăugând un nou fișier la /data/sales. Complet atingeți /date/sales/newfile și executați getfacl /data/sales/newfile pentru a verifica permisiunile curente.

Setarea permisiunilor implicite cu umask

Mai sus, ați învățat cum să lucrați cu ACL-uri implicite. Dacă nu utilizați un ACL, există o opțiune shell care determină permisiunile implicite pe care le veți obține: masca (mască inversă). În această secțiune, veți învăța cum să schimbați permisiunile implicite cu masca.

Este posibil să fi observat că atunci când creați un fișier nou, sunt setate unele permisiuni implicite. Aceste permisiuni sunt determinate de setare masca. Această setare shell se aplică tuturor utilizatorilor la conectare. În parametru masca se folosește o valoare numerică, care se scade din permisiunile maxime care pot fi setate automat pentru fișier; setarea maximă pentru fișiere este 666 și pentru directoare este 777.

Cu toate acestea, se aplică unele excepții de la această regulă. Puteți găsi o prezentare completă a setărilor masca în tabelul de mai jos.

Dintre numerele folosite în masca, ca și în cazul argumentelor numerice pentru comandă chmod, prima cifră se referă la permisiunile utilizatorului, a doua cifră se referă la permisiunile grupului, iar ultima se referă la permisiunile implicite setate pentru alții. Sens masca 022 implicit oferă 644 pentru toate fișierele noi și 755 pentru toate directoarele noi create pe serverul dumneavoastră.

Prezentare completă a tuturor valorilor numerice masca și rezultatele acestora în tabelul de mai jos.

Permisiuni în Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

O modalitate simplă de a vedea cum funcționează setarea umask este următoarea: începeți cu permisiunile implicite ale fișierului setate la 666 și scădeți umask pentru a obține permisiunile efective. Faceți același lucru pentru director și permisiunile sale implicite de 777.

Există două moduri de a modifica setarea umask: pentru toți utilizatorii și pentru utilizatorii individuali. Dacă doriți să setați umask pentru toți utilizatorii, trebuie să vă asigurați că setarea umask este luată în considerare la pornirea fișierelor de mediu shell, așa cum este specificat în /etc/profile. Abordarea corectă este să creați un script shell numit umask.sh în directorul /etc/profile.d și să specificați umask pe care doriți să îl utilizați în acel script shell. Dacă umask este schimbat în acest fișier, acesta este aplicat tuturor utilizatorilor după conectarea la server.

O alternativă la setarea umask prin /etc/profile și fișierele aferente, unde se aplică tuturor utilizatorilor care se conectează, este modificarea setărilor umask într-un fișier numit .profile care este creat în directorul principal al fiecărui utilizator.

Setările aplicate în acest fișier se aplică numai utilizatorului individual; prin urmare, aceasta este o metodă bună dacă aveți nevoie de mai multe detalii. Personal îmi place ca această caracteristică să schimbe umask implicit pentru utilizatorul root la 027, în timp ce utilizatorii normali rulează cu umask implicit 022.

Lucrul cu atribute de utilizator extinse

Aceasta este ultima secțiune despre permisiunile Linux.

Când lucrați cu permisiuni, există întotdeauna o relație între un utilizator sau un obiect de grup și permisiunile pe care utilizatorul sau obiectele de grup le au asupra unui fișier sau director. O metodă alternativă de a proteja fișierele de pe un server Linux este să lucrezi cu atribute.
Atributele își fac treaba indiferent de utilizatorul care accesează fișierul.

Ca și în cazul ACL-urilor, este posibil ca atributele fișierului să fie nevoie să includă opțiunea monta.

Aceasta este o opțiune user_xattr. Dacă primiți un mesaj „operațiune neacceptată” atunci când lucrați cu atribute extinse de utilizator, asigurați-vă că setați parametrul monta în /etc/fstab.

Multe atribute sunt documentate. Unele atribute sunt disponibile, dar nu sunt încă implementate. Nu le folosi; nu-ți vor aduce nimic.

Mai jos sunt cele mai utile atribute pe care le puteți aplica:

A Acest atribut asigură că timpul de acces la fișierul fișierului nu se modifică.
De obicei, de fiecare dată când un fișier este deschis, timpul de acces al fișierului trebuie înregistrat în metadatele fișierului. Acest lucru are un impact negativ asupra performanței; deci pentru fișierele care sunt accesate în mod regulat, atributul A poate fi folosit pentru a dezactiva această caracteristică.

a Acest atribut vă permite să adăugați, dar nu să eliminați un fișier.

c Dacă utilizați un sistem de fișiere care acceptă compresia la nivel de volum, acest atribut de fișier asigură că fișierul este comprimat prima dată când mecanismul de comprimare este activat.

D Acest atribut asigură că modificările aduse fișierelor sunt scrise imediat pe disc și nu mai întâi stocate în cache. Acesta este un atribut util pentru fișierele de baze de date importante pentru a vă asigura că nu se pierd între memoria cache a fișierelor și hard disk.

d Acest atribut asigură că fișierul nu va fi salvat în copii de siguranță în care este utilizat utilitarul de descărcare.

I Acest atribut permite indexarea directorului în care este activat. Acest lucru oferă acces mai rapid la fișiere pentru sistemele de fișiere primitive, cum ar fi Ext3, care nu utilizează baza de date B-tree pentru acces rapid la fișiere.

i Acest atribut face fișierul imuabil. Prin urmare, nu pot fi aduse modificări fișierului, ceea ce este util pentru fișierele care necesită protecție suplimentară.

j Acest atribut asigură că, pe un sistem de fișiere ext3, fișierul este mai întâi scris în jurnal și apoi în blocurile de date de pe hard disk.

s Suprascrieți blocurile în care fișierul a fost salvat la 0 după ștergerea fișierului. Acest lucru asigură că fișierul nu poate fi restaurat odată ce a fost șters.

u Acest atribut stochează informații despre ștergere. Acest lucru vă permite să dezvoltați un utilitar care funcționează cu aceste informații pentru a salva fișierele șterse.

Dacă doriți să aplicați atributele, puteți utiliza comanda vorbărie. De exemplu, folosiți chattr +s un fișierpentru a aplica atribute unui fișier. Trebuie să eliminați un atribut? Apoi folosiți chattr -s somefilesi va fi eliminat. Pentru a obține o prezentare generală a tuturor atributelor care sunt aplicate în prezent, utilizați comanda lsattr.

Rezumat

În acest articol, ați învățat cum să lucrați cu permisiuni. Citiți despre cele trei permisiuni de bază, permisiuni avansate și despre cum să aplicați ACL-uri pe un sistem de fișiere. De asemenea, ați învățat cum să utilizați opțiunea umask pentru a aplica permisiunile implicite. La sfârșitul acestui articol, ați învățat cum să utilizați atributele extinse de utilizator pentru a aplica un nivel suplimentar de securitate a sistemului de fișiere.

Dacă ți-a plăcut această traducere, atunci te rog să scrii despre ea în comentarii. Va fi mai multă motivație pentru a face traduceri utile.

Am corectat unele greșeli de scriere și greșeli gramaticale din articol. Am redus unele paragrafe voluminoase în altele mai mici pentru o mai bună lizibilitate.

În loc de „Numai cineva cu drepturi administrative la director poate aplica permisiunea de execuție”. fixat la „Numai cineva cu permisiuni de scriere în director poate aplica permisiunea de execuție.”, ceea ce ar fi mai corect.

Multumesc pentru comentarii berez.

Înlocuit:
Dacă nu sunteți proprietarul utilizatorului, shell-ul va verifica dacă sunteți membru al unui grup, cunoscut și sub numele de grupul fișierului.

Pe:
Dacă nu sunteți proprietarul fișierului, shell-ul va verifica dacă sunteți membru al unui grup care are permisiuni pentru fișier. Dacă sunteți membru al acestui grup, veți accesa fișierul cu permisiunile pe care grupul le-a stabilit, iar shell-ul va opri verificarea.

multumesc pentru comentariu CryptoPirate

Sursa: www.habr.com

Adauga un comentariu