Zarządzanie prawami dostępu za pomocą ACL setfacl
, getfacl
1. Wprowadzenie do ACL
Wyobraź sobie, że jesteś organizatorem imprezy (albo administratorem systemu). Chcesz, żeby goście mogli wchodzić do niektórych pokoi, a do innych tylko za twoją zgodą. Podstawowe prawa dostępu w Linuxie rwx
pozwalają ci zarządzać dostępem tylko dla trzech kategorii: właściciela (user), grupy (group) i wszystkich innych (others). Ale co, jeśli chcesz dać dostęp do pokoju tylko szczególnemu przyjacielowi? Strażnik standardowego modelu praw powie ci: "Hej, tak się nie da". I właśnie tutaj wkraczają ACL, gotowe przyjść z pomocą.
ACL (Access Control Lists
) rozwiązują problem ograniczeń klasycznego trójpoziomowego systemu praw, pozwalając nadawać prawa dostępu konkretnym użytkownikom i grupom.
Główne możliwości ACL:
- Ustalanie indywidualnych praw do plików i katalogów dla określonych użytkowników i grup.
- Dziedziczenie praw dla nowych plików wewnątrz katalogu.
- Bardziej elastyczna konfiguracja niż tradycyjne podejście
chmod
.
2. Jak sprawdzić, czy ACL są włączone?
Zanim zaczniemy zarządzać ACL, sprawdźmy najpierw, czy są one obsługiwane przez Twój system. Możesz to sprawdzić przy pomocy polecenia:
mount | grep acl
Jeśli system plików został zamontowany z opcją acl
, jesteś gotowy do działania! W przeciwnym razie trzeba będzie ponownie zamontować partycję z dodaniem opcji acl
:
sudo mount -o remount,acl /your/mount/point
Gotowe, teraz jesteś uzbrojony po zęby. Czas zanurzyć się w praktykę.
3. Główne komendy do pracy z ACL
Komenda | Opis |
---|---|
getfacl |
Pobiera listę aktualnych ACL dla pliku lub katalogu. |
setfacl |
Ustawia lub modyfikuje ACL dla pliku lub katalogu. |
setfacl -m |
Zmienia (modify) aktualne prawa dostępu. |
setfacl -x |
Usuwa (remove) określone prawa dostępu. |
setfacl -b |
Usuwa wszystkie wpisy ACL dla pliku lub katalogu. |
setfacl -d |
Ustawia domyślne prawa dla katalogu, które są dziedziczone przez pliki. |
Przejdźmy teraz na przykładach przez każdą z tych komend!
Uzyskiwanie aktualnych ACL getfacl
Załóżmy, że mamy plik example.txt
. Chcemy zobaczyć aktualne prawa dostępu używając ACL. Do tego wystarczy jedna komenda:
getfacl example.txt
Przykładowy wynik wygląda tak:
# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---
Ten spis pokazuje standardowe prawa: właściciel user1
może czytać i pisać, grupa group1
tylko czytać, a inni użytkownicy w ogóle nie mają dostępu.
Ustalanie indywidualnych praw dostępu (setfacl
)
Teraz wyobraźmy sobie, że użytkownik user2
musi mieć prawo do zapisu do pliku example.txt
. Można to zrobić w następujący sposób:
sudo setfacl -m u:user2:rw example.txt
Komenda oznacza:
-m
: modyfikacja praw.u:user2:rw
: dodanie lub zmiana praw dla użytkownikauser2
(read-write).
Sprawdźmy wynik:
getfacl example.txt
Teraz wynik wygląda tak:
# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw # Dodatkowe reguła!
group::r--
other::---
Usuwanie indywidualnych praw dostępu setfacl -x
Jeśli uznasz, że użytkownik user2
nie powinien już mieć prawa do zapisu, prawa można usunąć:
sudo setfacl -x u:user2 example.txt
Sprawdźmy:
getfacl example.txt
Już żadnych dodatkowych reguł dla user2
!
Ustalanie praw dla grup
Prawa przez ACL można ustalać nie tylko dla poszczególnych użytkowników, ale i dla całych grup. Na przykład, aby dać grupie devteam
dostęp do odczytu i zapisu, wykonaj:
sudo setfacl -m g:devteam:rw example.txt
Ustalanie praw domyślnych setfacl -d
Często trzeba automatycznie ustalać prawa dla wszystkich nowych plików i katalogów w określonym katalogu. Na przykład, chcesz, aby wszystkie pliki w katalogu project_dir
miały prawo do zapisu dla użytkownika developer
. W takim przypadku:
sudo setfacl -d -m u:developer:rw project_dir
Sprawdź prawa w ten sposób:
getfacl project_dir
Teraz dla wszystkich nowych plików i podkatalogów w project_dir
będzie stosowana ta reguła domyślnie.
Usuwanie wszystkich ACL setfacl -b
Jeśli chcesz całkowicie usunąć wszystkie ACL dla pliku:
sudo setfacl -b example.txt
Teraz plik wraca do standardowego modelu praw dostępu user:group:others
.
4. Praktyczne zastosowanie ACL
Scenariusz: Wspólna praca nad projektem
Załóżmy, że masz projekt zapisany w katalogu /project
. Nad nim pracują trzy osoby:
Alice
powinna mieć pełny dostęp (odczyt, zapis, wykonywanie).Bob
powinien tylko czytać pliki.Eve
w ogóle nie powinna widzieć katalogu.
Ustawiamy to za pomocą ACL:
Dajemy
Alice
pełny dostęp:sudo setfacl -m u:alice:rwx /project
Dajemy
Bob
dostęp tylko do odczytu:sudo setfacl -m u:bob:r-- /project
Dla
Eve
nic nie robimy — domyślnie nie ma dostępu.
Sprawdźmy aktualną listę ACL:
getfacl /project
Output:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
Teraz Alice
może pracować bez ograniczeń, Bob
może tylko przeglądać pliki, a Eve
pozostaje na uboczu.
5. Potencjalne błędy i ich rozwiązanie
ACL nie działają, mimo że je skonfigurowałeś. Może być tak, że partycja nie została zamontowana z opcją
acl
. Użyjmount
, aby to sprawdzić i zamontuj ponownie, jeśli zajdzie taka potrzeba.Konflikt między standardowymi uprawnieniami a ACL. ACL zawsze mają priorytet nad standardowymi uprawnieniami. Na przykład, nawet jeśli dla "others" jest ustawiony zakaz odczytu, ACL może zezwolić na dostęp konkretnemu użytkownikowi.
Zapomnisz o dziedziczonych ACL. Jeśli skonfigurowałeś prawa
-d
(default), sprawdź, czy te reguły zostały odziedziczone przez nowe pliki.
Dlaczego to ważne?
Zarządzanie uprawnieniami przez ACL pozwala elastycznie konfigurować dostęp dla różnych użytkowników i grup. Jest to szczególnie przydatne na serwerach roboczych, gdzie wymaga się podziału dostępu według ról. Na przykład, w firmach ACL są używane do ograniczania dostępu tylko dla tych, którzy "są w temacie" — to jeden z kluczowych elementów bezpieczeństwa.
Dodatkowo możesz zapoznać się z oficjalnym przewodnikiem po ACL, aby jeszcze lepiej zrozumieć ich możliwości.
GO TO FULL VERSION