Cum să setați listele de control al accesului (ACL) și cotele de disc pentru utilizatori și grupuri


Listele de control al accesului (cunoscute și ca ACL) sunt o caracteristică a nucleului Linux care permite definirea unor drepturi de acces mai detaliate pentru fișiere și directoare decât cele specificate de permisiunile obișnuite ugo/rwx.

De exemplu, permisiunile standard ugo/rwx nu permit setarea unor permisiuni diferite pentru diferiți utilizatori sau grupuri. Cu ACL-uri, acest lucru este relativ ușor de făcut, așa cum vom vedea în acest articol.

Verificarea compatibilității sistemului de fișiere cu ACL-uri

Pentru a vă asigura că sistemele dvs. de fișiere acceptă în prezent ACL-uri, ar trebui să verificați dacă acestea au fost montate utilizând opțiunea acl. Pentru a face acest lucru, vom folosi tune2fs pentru sistemele de fișiere ext2/3/4, așa cum este indicat mai jos. Înlocuiți /dev/sda1 cu dispozitivul sau sistemul de fișiere pe care doriți să îl verificați:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

Notă: cu XFS, listele de control al accesului sunt acceptate imediat.

În următorul sistem de fișiere ext4, putem vedea că ACL-urile au fost activate pentru /dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"

Dacă comanda de mai sus nu indică faptul că sistemul de fișiere a fost montat cu suport pentru ACL-uri, cel mai probabil se datorează opțiunii noacl prezente în /etc/fstab.

În acest caz, eliminați-l, demontați sistemul de fișiere și apoi montați-l din nou sau pur și simplu reporniți sistemul după ce ați salvat modificările în /etc/fstab.

Introducerea ACL-urilor în Linux

Pentru a ilustra modul în care funcționează ACL-urile, vom folosi un grup numit dezvoltatori și vom adăuga utilizatori walterwhite și saulgoodman (da, sunt fan Breaking Bad! ) la el.:

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Înainte de a continua, să verificăm dacă ambii utilizatori au fost adăugați la grupul de dezvoltatori:

# id walterwhite
# id saulgoodman

Acum să creăm un director numit test în /mnt și un fișier numit acl.txt în interior (/mnt/test/acl .txt).

Apoi vom seta proprietarul grupului la dezvoltatori și vom modifica permisiunile implicite ugo/rwx recursiv la 770 (asigurând astfel citire, scriere și execuție permisiunile acordate atât proprietarului, cât și proprietarului grupului fișierului):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

După cum era de așteptat, puteți scrie la /mnt/test/acl.txt ca walterwhite sau saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit

Până acum, bine. Cu toate acestea, vom vedea în curând o problemă când va trebui să acordăm acces de scriere la /mnt/test/acl.txt pentru un alt utilizator care nu este în grupul de dezvoltatori.

Permisiunile standard ugo/rwx ar necesita ca noul utilizator să fie adăugat la grupul de dezvoltatori, dar asta i-ar oferi aceleași permisiuni pentru toate obiectele deținute de grup. Tocmai aici sunt utile ACL-urile.

Setarea ACL-urilor în Linux

Există două tipuri de ACL: ACL-uri de acces sunt (care sunt aplicate unui fișier sau director) și ACL-uri implicite (opționale), care pot fi aplicate numai unui director .

Dacă fișierele din interiorul unui director în care a fost setat un ACL implicit nu au un ACL propriu, ele moștenesc ACL-ul implicit al directorului părinte.

Să oferim utilizatorului gacanepa acces de citire și scriere la /mnt/test/acl.txt. Înainte de a face asta, să aruncăm o privire la setările curente ACL din acel director cu:

# getfacl /mnt/test/acl.txt

Apoi modificați ACL-urile din fișier, utilizați u: urmat de numele de utilizator și :rw pentru a indica permisiunile de citire/scriere:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

Și rulați din nou getfacl pe fișier pentru a compara. Următoarea imagine arată \„Înainte” și \„După”:

# getfacl /mnt/test/acl.txt

În continuare, va trebui să acordăm altora permisiuni de execuție în directorul /mnt/test:

# chmod +x /mnt/test

Rețineți că, pentru a accesa conținutul unui director, un utilizator obișnuit are nevoie de permisiuni de executare pe acel director.

Utilizatorul gacanepa ar trebui să poată scrie acum în fișier. Comutați la acel cont de utilizator și executați următoarea comandă pentru a confirma:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Pentru a seta un ACL implicit la un director (pe care conținutul său îl va moșteni dacă nu este suprascris altfel), adăugați d: înainte de regulă și specificați un director în loc de nume de fișier:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

ACL-ul de mai sus va permite utilizatorilor care nu fac parte din grupul de proprietari să aibă acces de citire la conținutul viitor al directorului /mnt/test. Observați diferența dintre rezultatul getfacl /mnt/test înainte și după modificare:

Pentru a elimina un anumit ACL, înlocuiți -m în comenzile de mai sus cu -x. De exemplu,

# setfacl -x d:o /mnt/test

Alternativ, puteți utiliza și opțiunea -b pentru a elimina TOATE ACL-urile într-un singur pas:

# setfacl -b /mnt/test

Pentru mai multe informații și exemple despre utilizarea ACL-urilor, consultați capitolul 10, secțiunea 2 din Ghidul de securitate openSUSE (disponibil și pentru descărcare gratuită în format PDF ).

Setați cote de disc Linux pe utilizatori și sisteme de fișiere

Spațiul de stocare este o altă resursă care trebuie utilizată și monitorizată cu atenție. Pentru a face acest lucru, cotele pot fi stabilite pe bază de sistem de fișiere, fie pentru utilizatori individuali, fie pentru grupuri.

Astfel, este pusă o limită pentru utilizarea discului permisă pentru un anumit utilizator sau pentru un anumit grup și puteți fi siguri că discurile dumneavoastră nu vor fi umplute la capacitate maximă de către un utilizator neglijent (sau greșit).

Primul lucru pe care trebuie să-l faceți pentru a activa cotele pe un sistem de fișiere este să îl montați cu opțiunile usrquota sau grpquota (pentru cote de utilizator și, respectiv, de grup) în /etc/fstab.

De exemplu, să activăm cotele bazate pe utilizatori pe /dev/vg00/vol_backups și cotele bazate pe grup pe /dev/vg00/vol_projects.

Rețineți că UUID-ul este folosit pentru a identifica fiecare sistem de fișiere.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Demontați și remontați ambele sisteme de fișiere:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Apoi verificați dacă opțiunile usrquota și grpquota sunt prezente în rezultatul mount (vezi evidențiat mai jos):

# mount | grep vg00

În cele din urmă, rulați următoarele comenzi pentru a inițializa și a activa cotele:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

Acestea fiind spuse, acum să atribuim cote numelui de utilizator și grupului pe care le-am menționat mai devreme. Puteți dezactiva ulterior cotele cu quotaoff.

Setarea cotelor de disc Linux

Să începem prin a seta un ACL pe /home/backups pentru utilizatorul gacanepa, care îi va oferi permisiuni de citire, scriere și executare în acel director:

# setfacl -m u:gacanepa:rwx /home/backups/

Apoi cu,

# edquota -u gacanepa

Vom face blocurile soft limit=900 și hard limit=1000 (1024 bytes/bloc * 1000 blocuri=1024000 bytes=1 MB ) de utilizare a spațiului pe disc.

De asemenea, putem stabili o limită de 20 și 25 ca limite soft și stricte asupra numărului de fișiere pe care acest utilizator le poate crea.

Comanda de mai sus va lansa editorul de text ($EDITOR) cu un fișier temporar în care putem seta limitele menționate anterior:

Aceste setări vor determina afișarea unui avertisment utilizatorului gacanepa atunci când acesta a atins fie limitele de 900-block, fie de 20-inode pentru o valoare prestabilită perioada de gratie de 7 zile.

Dacă situația de depășire a cotei nu a fost eliminată până atunci (de exemplu, prin eliminarea fișierelor), limita soft va deveni limita strictă și acest utilizator va fi împiedicat să utilizeze mai mult spațiu de stocare sau să creeze mai mult fişiere.

Pentru a testa, lăsăm utilizatorului gacanepa să încerce să creeze un fișier gol de 2 MB numit test1 în /home/backups:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1

După cum puteți vedea, fișierul operațiunii de scriere eșuează din cauza depășirii cotei de disc. Deoarece numai primii 1000 KB sunt scrise pe disc, rezultatul în acest caz va fi cel mai probabil un fișier corupt.

În mod similar, puteți crea un ACL pentru grupurile de dezvoltatori pentru a oferi membrilor acelui grup acces rwx la /home/projects:

# setfacl -m g:developers:rwx /home/projects/

Și setați limitele de cotă cu:

# edquota -g developers

La fel cum am făcut mai devreme cu utilizatorul gacanepa.

Perioada de grație poate fi specificată pentru orice număr de secunde, minute, ore, zile, săptămâni sau luni prin execuție.

# edquota -t

și actualizarea valorilor din Perioada de grație Blocare și perioada de grație Inode.

Spre deosebire de blocarea sau utilizarea inodului (care sunt setate pe bază de utilizator sau grup), perioada de grație este stabilită la nivelul întregului sistem.

Pentru a raporta cotele, puteți folosi quota -u [utilizator] sau quota -g [grup] pentru o listă rapidă sau repquota -v [/path/to /filesystem] pentru un raport mai detaliat (verbos) și frumos formatat.

Desigur, veți dori să înlocuiți [user], [group] și [/path/to/filesystem] cu un anumit utilizator/numele grupurilor și sistemul de fișiere pe care doriți să le verificați.

rezumat

În acest articol, am explicat cum să setați listele de control al accesului și cotele de disc pentru utilizatori și grupuri. Folosind ambele, veți putea gestiona mai eficient permisiunile și utilizarea discului.

Dacă doriți să aflați mai multe despre cote, puteți consulta Mini-HowTo pentru cote din Proiectul de documentare Linux.

Inutil să spunem că vă puteți baza și pe noi pentru a răspunde la întrebări. Trimiteți-le folosind formularul de comentarii de mai jos și vom fi mai mult decât bucuroși să aruncăm o privire.