[1] ACL – Access Control List

14 marca 2022 Wyłączono przez Adam [zicherka] Nogły

Ustaw 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