Listy kontroli dostępu (ACL)

Komendy omówione w poprzednich artykułach nie pozwalają niestety na nadawanie uprawnień na danym pliku więcej niż jednemu użytkownikowi lub grupie. Umożliwiają to listy kontroli dostępu (ACL – Access Control List), które zapewniają możliwość ustawienia na plikach i katalogach rozszerzonej grupy uprawnień. Pozwalają administratorom ustawiać w taki sposób uprawnienia , że różnią się one na poszczególnych katalogach.  Aby możliwe było użycie ACL system plików musi być podmontowany z włączonym wsparciem dla ACL, opcja acl  musi być dodana do montowanego systemu plików w pliku /etc/fstab. W systemie plików XFS takie wsparcie jest domyślnie włączone, w systemach plików EXT wsparcie ACL musi być aktywowane. Listy kontroli dostępu mogą być także używane w systemach plików NFS i CIFS.

ACL podzielone są na dwie kategorie:

  • access ACL – dostępowe listy kontroli dostępu, ustawiane na plikach i katalogach.
  • default ACL – domyślne listy kontroli dostępu, ustawiane tylko na poziomie katalogu. Pliki i podkatalogi wchodzące w skład katalogu z ustawionymi domyślnymi ACL dziedziczą domyślne ACL katalogu nadrzędnego.

Komendy zarządzania ACL

Komenda Opis
# getfacl Wyświetla ustawienia ACL dla pliku i katalogu.
# setfacl Ustawia, modyfikuje i kasuje ACL dla pliku lub katalogu.
# chacl Zmienia ustawienia ACL na pliku lub katalogu. Komenda z systemu IRIX UNIX.

Jeżeli będziemy chcieli zrobić backup plików lub katalogów z ACL musimy zwrócić uwagę na fakt, że tar nie wspiera ACL. W takim wypadku należy użyć star, który pracuje z tymi samymi opcjami co tar a dodatkowo wspiera ACL. Można także wykonać backup ACL używając polecenia getfacl:

Przywracanie ACL:

Rozważmy następujący przykład:

Zwróć uwagę na wiersze związane z uprawnieniami (pogrubione) i dwukropki. W przypadku użycia ACL pomiędzy tymi dwukropkami znajdą się rozszerzone uprawnienia.

Np. ACL:   user:1000:r--  na pliku oznacza, że użytkownik user z UID 1000, który nie jest właścicielem pliku ani członkiem grupy, która jest jego właścicielem, ma uprawnienia tylko do odczytu tego pliku.

Podobnie ACL: group:dba:rw- przyzna grupie dba prawo odczytu i zapisu pliku.

 

Komenda setfacl zawiera wiele opcji:

Opcja Opis
-m Ustawia lub modyfikuje ACL
-x Usuwa konkretne ACL
-d Ustawia domyślne ACL
-k Usuwa wszystkie domyślne ACL
-b Usuwa wszystkie ACL
-R Ustawia ACL rekursywnie na wszystkich plikach i podkatalogach
Zasada ACL Opis
u[ser]:UID:perms Uprawnienia przypisywane do konkretnego użytkownika (nazwa użytkownika lub UID). Użytkownik musi się znajdować w pliku /etc/passwd.
g[roup]:GID:perms Uprawnienia przypisywane do konkretnej grupy  (nazwa użytkownika lub GID). Użytkownik musi się znajdować w pliku /etc/group.
m[ask]:perms  Maksymalne uprawnienia jakie konkretny użytkownik lub grupa może mieć mieć na pliku lub katalogu. Np. rw- oznacza, że żaden użytkownik lub grupa nie będzie miał większych uprawnień niż odczyt i zapis.
o[ther]:perms  Uprawnienia przypisane użytkownikom nie należącym do grupy będącej właścicielem.

 

Znaczenie maski w ACL

Maska ACL determinuje maksymalne możliwe uprawnienia przyznane konkretnemu użytkownikowi bądź grupie do pliku lub folderu. Jeżeli maska na przykład ustawiona jest na rw to żaden użytkownik czy grupa nie przekroczy tych uprawnień. Opcja –c powoduje, że getfacl nie wyświetla nagłówka:

Jeżeli przyznamy użytkownikowi user1 prawo do zapisu i odczytu i zmienimy maskę na tylko do odczytu w tym samym czasie to efektywnymi uprawnieniami dla user1 będzie tylko odczyt:

Czyli użytkownik user1 nie będzie mógł modyfikować tego pliku mimo, że wydaje się, że ma uprawnienia do zapisu. Po zmianie maski jak poniżej użytkownik user1 będzie mógł modyfikować plik file1.

 

Ćwiczenie 1. Określ, ustaw i wykasuj ACL.

1. Zaloguj się jako user1 i utwórz plik file1. Uruchom polecenia ll (ls -l) i getfacl na pliku file1 i sprawdź czy na pliku są ustawione jakieś ACL.

Wyjście wskazuje na to, że na pliku nie ma żadnych ACL.

2. Przełącz się teraz na konto root i sprawdź system plików. Jeżeli jest to system plików extended to odpal mount | grep home aby sprawdzić czy wsparcie dla ACL jest włączone. Jeżeli nie to wydaj komendę:

Wskazówka na egzamin: Jeżeli system plików, na którym używasz ACL to extended, zmodyfikuj plik /etc/fstab i zastąp ‘defaults’ with ‘acl’ (lub dodaj ‘acl’ jeżeli są dodane inne opcje) w polu opcji montowania.

3. Jako użytkownik user1 przyznaj użytkownikowi user3 uprawnienia rwx komendą setfacl. Użyj notacji oktalnej

4. Komendą ll zweryfikuj czy przy ustawieniach uprawnień pojawił się znaczek +. Komendą getfacl zweryfikuj ustawienia ACL pliku.

Dla użytkownika user3 dodany jest nowy wiersz z uprawnieniami rwx. Wiersz z maską rwx także jest dodany.

5. Dodaj użytkownika user4 z uprawnieniami odczyt/zapis do pliku file1 używając notacji symbolicznej:

6. Usuń wpis ACL dla użytkownika user3 i potwierdź:

Wartość maski została zredukowana do odczyt/zapis co odnosi się do maksymalnych uprawnień przyznanych użytkownikowi user4.

7. Usuń wszystkie wpisy ACL na pliku file1 zweryfikuj poleceniem getfacl:

 

Domyślne ACL
Czasami zachodzi potrzeba aby wielu użytkowników, którzy należą do różnych grup, współdzieliło jeden katalog. Potrzebują oni tak ustawionych uprawnień aby pliki i podkatalogi utworzone w katalogu nadrzędnym dziedziczyły te uprawnienia. W taki sposób użytkownicy nie muszą ustawiać uprawnień, które ustawili na katalogu nadrzędnym, na każdym pliku i podkatalogu z osobna. Takie wymaganie spełnia domyślne ACL.

ACL Opis
d[efault]:u:perms Domyślne standardowe uprawnienia dla właściciela.
d[efault]:u:UID:perms Domyślne uprawnienia dla konkretnego użytkownika (jego nazwa lub UID).
d[efault]:g:perms  Domyślne standardowe uprawnienia dla grupy.
d[efault]:g:GID:perms  Domyślne uprawnienia dla konkretnej grupy (jego nazwa lub GID).
d[efault]:o:perms  Domyślne uprawnienia dla innych.
d[efault]:m:perms  Domyślne maksymalne uprawnienia, które może mieć użytkownik lub grupa gdy tworzy plik lub katalog z domyślnymi ACL.

 

Ćwiczenie 2. Ustaw, potwierdź i usuń domyślne ACL.

1. Zaloguj się jako użytkownik user4 i utwórz katalog projects. Poleceniem getfacl sprawdź domyślne uprawnienia.

2. Komendą setfacl przyznaj uprawnienia do odczytu i zapisu użytkownikom user1 i user3. Uruchom to polecenie jako user4 i korzystaj z notacji oktalnej.

3. W katalogu projects utwórz podkatalog prj1 i sprawdź czy odziedziczył ustawienia ACL z katalogu nadrzędnego.

4. Utwórz plik file1 w katalogu projects i sprawdź czy odziedziczył ACL z katalogu nadrzędnego.

Wynika stąd, że maksymalne uprawnienia dla członków grupy to odczyt i zapis. Prawo do wykonywania jest nieefektywne ze względu na ustawienia maski.

5. Skasuj wszystkie domyślne ustawienia ACL dla katalogu i potwierdź.

Leave a Reply

Your email address will not be published. Required fields are marked *