Capitolul despre Access Control Lists (ACLs) a fost aprofundat în alte articole. Reamintesc doar că Access Control Lists (ACLs) realizează un control granular al permisiunilor mult mai fin, spre deosebire de permisiunile normale rwx/ugo. Acum, vom face doar câteva exerciții referitoare la aplicarea extended ACL pe fișiere sau directoare, exerciții care, într-un fel sau altul, pot să apară într-un examen real RHCSA.
1. Creați un user numit Tux cu parola password. Deschideți un al doilea terminal (sau un alt tab) în care vă conectați ca userul Tux (în primul terminal sunteți conectați ca root). Userul Tux va fi folosit pentru a testa permisiunile.
# useradd tux; echo "password" | passwd --stdin tux
2. Navigați în directorul /tmp și creați 2 noi directoare numite dir1 și dir2, precum și 2 noi fișiere numite file1 și file2.
# cd /tmp # mkdir {dir1,dir2}; touch {file1,file2}
3. Verificați dacă unul dintre fișierele nou create are extended ACL asociat.
# ls -l total 0 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir2 -rw-r--r--. 1 root root 0 Apr 29 02:41 file1 -rw-r--r--. 1 root root 0 Apr 29 02:41 file2
Reamintesc că un fișier sau director are extended ACL asociat doar dacă are semnul "+" la sfârșitul listei de permisiuni. În acest caz, niciunul din fișierele și directoarele nou create nu are extended ACL asociat, fiind în proprietatea userului root.
4. Setați ACL pentru userul tux astfel încât acesta să poată citi și scrie fișierul file1.
# setfacl -m u:tux:rw- file1
Se face verificarea:
# getfacl file1
# file: file1
# owner: root
# group: root
user::rw-
user:tux:rw-
group::r--
mask::rw-
other::r--
5. Setați masca ACL pentru fișierul file1 astfel încât acesta să poată fi doar citit (read only), apoi, în al doilea terminal/tab (cel în care sunteți conectat cu userul tux), încercați să executați comanda echo "test" > /tmp/file1
. Explicați de ce nu funcționează.
# setfacl -m m::r-- file1
Se face verificarea:
# getfacl file1 # file: file1 # owner: root # group: root user::rw- user:tux:rw- #effective:r-- group::r-- mask::r-- other::r--
În terminalul userului tux:
$ echo "test "> /tmp/file1 -bash: /tmp/file1: Permission denied
Userul tux nu poate scrie fișierul file1 chiar dacă are setat ACL cu rw deoarece este limitat de valoarea măștii ACL (read only) care setează permisiunea maximă la read și maschează permisiunea write. Din acest motiv, în dreptul userul tux, comanda getfacl arată că permisiunea efectivă este doar read, în loc de rw, cât este stabilit.
6. Setați permisiunile default ACL pe directorul dir1 astfel încât userul tux să aibă drepturi de citire, scriere și execuție DOAR pentru directoare și subdirectoare (reamintesc faptul că default ACL este util pe directoare DOAR pentru a permite noilor fișiere sau directoare care vor fi create să moștenească permisiunile ACL ale directorului părinte).
# setfacl -m d:u:tux:rwX dir1
Verificare:
# getfacl dir1 # file: dir1 # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:tux:rwx default:group::r-x default:mask::rwx default:other::r-x
7. Folosind comanda setfacl, schimbați permisiunile "other" la zero pe file1:
# setfacl -m o::--- file1
Verificăm:
# ls -l total 4 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir2 -rw-rw----+ 1 root root 1 Apr 29 03:01 file1 -rw-r--r--. 1 root root 0 Apr 29 02:41 file2
8. Copiați setările ACL de la fișierul file1 la fișierul file2.
Listăm valorile actuale ale permisiunilor (se observă că file2 nu are asociat extended ACL):
# ll total 4 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir2 -rw-rw----+ 1 root root 1 Apr 29 03:01 file1 -rw-r--r--. 1 root root 0 Apr 29 02:41 file2
Copiem asocierea ACL de la file1 la file2:
# getfacl file1 | setfacl --set-file=- file2
Listăm valorile actuale ale permisiunilor (se observă asocierea curentă ACL cu file2):
# ll total 4 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir2 -rw-rw----+ 1 root root 1 Apr 29 03:01 file1 -rw-rw----+ 1 root root 0 Apr 29 02:41 file2
Cu comanda getfacl afisăm valorile ACL pentru file1 și file2, pentru a ne convinge că permisiunile au fost copiate:
# getfacl file1 # file: file1 # owner: root # group: root user::rw- user:tux:rw- group::r-- mask::rw- other::--- # getfacl file2 # file: file2 # owner: root # group: root user::rw- user:tux:rw- group::r-- mask::rw- other::---
9. Copiați setările ACL de la directorul dir1 la directorul dir2.
Se procedează în același mod ca la copierea ACL de la un fișier la altul:
# getfacl dir1 | setfacl --set-file=- dir2 # ll total 4 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir2 -rw-rw----+ 1 root root 1 Apr 29 03:01 file1 -rw-rw----+ 1 root root 0 Apr 29 02:41 file2 # getfacl dir1 # file: dir1 # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:tux:rwx default:group::r-x default:mask::rwx default:other::r-x # getfacl dir2 # file: dir2 # owner: root # group: root user::rwx group::r-x other::r-x default:user::rwx default:user:tux:rwx default:group::r-x default:mask::rwx default:other::r-x
10. Ștergeți permisiunile default ACL de pe dir1.
# setfacl --remove-default dir1 # getfacl dir1 # file: dir1 # owner: root # group: root user::rwx group::r-x other::r-x
11. Ștergeți toate permisiunile ACL de pe fișierul file1.
# setfacl --remove-all file1
Verificăm și observăm că fișierul file1 nu mai are asociat extended ACL:
# ll total 4 drwxr-xr-x. 2 root root 6 Apr 29 02:41 dir1 drwxr-xr-x+ 2 root root 6 Apr 29 02:41 dir2 -rw-r-----. 1 root root 1 Apr 29 03:01 file1 -rw-rw----+ 1 root root 0 Apr 29 02:41 file2 # getfacl file1 # file: file1 # owner: root # group: root user::rw- group::r-- other::---
Exersați într-o mașină virtuală cu CentOS 7 - nu aveți nevoie de interfață grafică.
Lasă un răspuns