[1] ACL – Access Control List
14 marca 2022Ustaw ACL (Access Control Lists) na pliki lub katalogi.
Możliwe jest ustawienie uprawnień dostępu bardziej rygorystycznie niż Posix Linux ACL.
[1] Pakiet ACL jest zawarty w minimalnej instalacji systemu operacyjnego, ale jeśli nie znajduje się w twoim systemie, zainstaluj w następujący sposób.
[root@vlsr01 ~]# dnf install acl
[2] Nie jest konieczne ustawianie ustawień wstępnych, aby korzystać z funkcji ACL, jeśli używasz [xfs], który jest domyślnym systemem plików w CentOS Stream 8. Ale jeśli używasz [ext4], który jest domyślnym systemem plików w RHEL 6/CentOS 6 lub starszym , konieczne jest skonfigurowanie ustawień wstępnych, aby korzystać z funkcji ACL.
[3] Ustaw ACL.
Przykładowo stwórz plik [/home/test.txt] z [root:root(700)] i ustaw na nim ACL.
[root@vlsr01 ~]# ll /home/test.txt -rwx------. 1 root root 0 03-13 19:03 /home/test.txt # ustaw r(odczyt) dla użytkownika [user01] dla /home/test.txt [root@vlsr01 ~]# setfacl -m u:user01:r /home/test.txt # po ustawieniu ACL jest wyświetlany znak [+] obok atrybutów [root@vlsr01 ~]# ll /home/test.txt -rwxr-----+ 1 root root 0 03-13 19:03 /home/test.txt # potwierdź ustawienia [root@vlsr01 ~]# getfacl /home/test.txt getfacl: Usunięcie wiodącego '/' ze ścieżek bezwzględnych # file: home/test.txt # owner: root # group: root user::rwx user:user01:r-- group::--- mask::r-- other::--- # potwierdź możliwość odczyty dla użytkownika user01 [user01@vlsr01 ~]$ cat /home/test.txt Testowy plik ACL. # możliwy odczyt # sprawdź dostęp przez innego użytkownika [user02@vlsr01 ~]$ cat /home/test.txt cat: /home/test.txt: Brak dostępu # niemożliwy odczyt
[4] Ustaw listę ACL na katalog rekurencyjnie.
# ustaw r(odczyt) dla użytkownika [user01] do /home/testdir rekurencyjnie [root@vlsr01 ~]# setfacl -R -m u:user01:r /home/testdir [root@vlsr01 ~]# ll /home/testdir razem 4 -rwxr-----+ 1 root root 24 03-13 19:15 testfile.txt [root@vlsr01 ~]# getfacl -R /home/testdir getfacl: Usunięcie wiodącego '/' ze ścieżek bezwzględnych # file: home/testdir # owner: root # group: root user::rwx user:user01:r-- group::--- mask::r-- other::--- # file: home/testdir/testfile.txt # owner: root # group: root user::rwx user:user01:r-- group::--- mask::r-- other::---
[5] Ustaw ACL dla grup.
# ustaw rw(odczyt/zapis) dla grupy [security] dla /home/testfile.txt [root@vlsr01 ~]# setfacl -m g:security:rw /home/testfile.txt [root@vlsr01 ~]# getfacl /home/testfile.txt getfacl: Usunięcie wiodącego '/' ze ścieżek bezwzględnych # file: home/testfile.txt # owner: root # group: root user::rw- group::r-- group:security:rw- mask::rw- other::r— # sprawdź dostęp dla użytkownika [user01], który należy do grupy [security] [user01@vlsr01 ~]$ echo "test ZAPISU" >> /home/testfile.txt [user01@vlsr01 ~]$ cat /home/testfile.txt Kolejny plik testowy. test ZAPISU # czyli mamy dostęp # sprawdź dostęp użytkownika [user02], który nie należy do grupy [security] [user02@vlsr01 root]$ echo "test ZAPISU 2" >> /home/testfile.txt bash: /home/testfile.txt: Brak dostępu # nie mamy możliwości zapisu
[6] Usuń ACL.
# usuń ACL z /home/test.txt [root@vlsr01 ~]# setfacl -b /home/test.txt # usuń ACL tylko dla użytkownika [user01] z /home/testfile.txt [root@vlsr01 ~]# setfacl -x u:user01 /home/testfile.txt
[7] Ustaw domyślną listę ACL na katalog.
Jeśli pliki/katalogi są tworzone w katalogu z ustawieniem domyślnej listy ACL, dziedziczony jest domyślny atrybut dostępu. Ale bądź ostrożny, jeśli zmienisz atrybut posix za pomocą [chmod], wtedy lista ACL będzie nieprawidłowa.
[root@vlsr01 ~]# setfacl -m u:user01:r-x /home/testdir # ustaw domyślne ACL [r-x(odczyt/wykonanie)] dla użytkownika [user01] dla katalogu [/home/testdir] [root@vlsr01 ~]# setfacl -d -m u:user01:r-x /home/testdir [root@vlsr01 ~]# getfacl /home/testdir getfacl: Usunięcie wiodącego '/' ze ścieżek bezwzględnych # file: home/testdir # owner: root # group: root user::rwx user:user01:r-x group::--- mask::r-x other::--- default:user::rwx default:user:user01:r-x default:group::--- default:mask::r-x default:other::--- [root@vlsr01 ~]# echo "Domyślne ustawienia ACL" > /home/testdir/test.txt [root@vlsr01 ~]# ll /home/testdir/test.txt -rw-r-----+ 1 root root 25 03-13 19:34 /home/testdir/test.txt # sprawdź dostęp dla użytkownika [user01] [user01@vlsr01 ~]$ cat /home/testdir/test.txt Domyślne ustawienia ACL # mamy dostęp
[8] Usuń domyślne ACL.
[root@vlsr01 ~]# setfacl -k /home/testdir [root@vlsr01 ~]# getfacl /home/testdir getfacl: Usunięcie wiodącego '/' ze ścieżek bezwzględnych # file: home/testdir # owner: root # group: root user::rwx user:user01:r-x group::--- mask::r-x other::---
[9] Ustaw ACL z pliku konfiguracyjnego.
# stwórz plik konfiguracyjny dla ACL # jeśli istnieją listy ACL, które chcesz ustawić w innym systemie, istnieje sposób na eksport za pomocą polecenia [getfacl] [root@vlsr01 ~]# mcedit acl.txt # file: /home/testdir # owner: root # group: root user::rwx user:user01:r-x group::--- mask::r-x other::--- # file: /home/test.txt # owner: root # group: root user::rwx user:user01:r-- group::--- mask::r-- other::--- [root@vlsr01 ~]# setfacl --restore=acl.txt [root@vlsr01 ~]# ll /home razem 8 drwxr-x---+ 2 root root 42 03-13 19:34 testdir -rw-rw-r--+ 1 root root 34 03-13 19:27 testfile.txt -rwxr-----+ 1 root root 18 03-13 19:11 test.txt drwx------. 5 user01 user01 126 03-06 16:26 user01 drwx------. 2 user02 user02 83 03-13 19:13 user02