setfacl

Ustawia rozszerzone listy kontroli dostępu (ACL) dla plików i katalogów.

setfacl to linuksowe narzędzie do ustawiania rozszerzonych list kontroli dostępu (ACL) na plikach i katalogach. Klasyczne uprawnienia (właściciel, grupa, reszta) pozwalają tylko na trzy zestawy praw — a w realnym życiu często musisz dać dostęp dwóm różnym osobom i jednej grupie, każdej co innego. Tu wchodzi ACL: dorzucasz uprawnienia dla konkretnego użytkownika lub grupy bez kombinowania z chmodem i tworzenia dziesięciu grup pomocniczych. Podgląd ustawionych ACL robisz przez getfaclsetfacl to strona zapisująca.

Składnia i najważniejsze opcje

Podstawowa forma: setfacl [opcje] reguła plik...

  • -m — modyfikuje ACL, dodając lub zmieniając podane wpisy (reguła musi zawierać uprawnienia).
  • -x — usuwa wskazane wpisy ACL (przy usuwaniu nie podajesz uprawnień, tylko kogo wywalić).
  • -b — kasuje wszystkie rozszerzone wpisy ACL, zostawiając klasyczne uprawnienia właściciela, grupy i reszty.
  • -k — usuwa domyślne ACL (default ACL) z katalogu.
  • -d — wszystkie operacje stosuje do domyślnego ACL, które dziedziczą nowe pliki w katalogu.
  • -R — działa rekurencyjnie na całym drzewie katalogów.
  • -n — nie przelicza maski efektywnych praw (mask); domyślnie jest przeliczana.
  • --set — ustawia całe ACL od zera, kasując poprzednie wpisy (uważaj, to nadpisanie, nie dopisanie).

Przykłady użycia

  • setfacl -m u:anna:rwx raport.txt — daje użytkowniczce anna pełny dostęp do pliku, niezależnie od jego właściciela.
  • setfacl -m g:devops:rx /opt/app — pozwala grupie devops czytać i wchodzić do katalogu.
  • setfacl -R -m u:deploy:rwX /var/www — rekurencyjnie nadaje prawa; wielkie X daje x tylko katalogom i plikom już wykonywalnym, nie wszystkim.
  • setfacl -d -m g:web:rwx /srv/uploads — ustawia domyślne ACL, więc każdy nowy plik w katalogu od razu dziedziczy prawa grupy web.
  • setfacl -b zdjecie.jpg — czyści wszystkie ACL i wraca do zwykłych uprawnień z chmod.

Częste błędy i pułapki

Najczęstsza wpadka to ignorowanie maski. Po dodaniu wpisu jądro przelicza mask, która ogranicza efektywne prawa wszystkich wpisów poza właścicielem i resztą. Jeśli getfacl pokazuje przy wpisie komentarz #effective:r--, to znaczy, że maska obcięła twoje rwx do r-- — wbrew temu, co wpisałeś. Wtedy ratuje setfacl -m m::rwx plik albo świadome użycie -n.

Druga pułapka: domyślne ACL (-d) działa wyłącznie na katalogach i dotyczy nowych plików — istniejących nie ruszy. Trzecia: --set nadpisuje całe ACL, więc łatwo skasować coś, czego nie chciałeś. I pamiętaj, że ACL musi wspierać system plików (zwykle ext4/xfs z opcją acl) — na egzotycznych mountach albo w wielu kontenerach komenda po cichu nie zadziała.

Powiązane komendy: getfacl, chmod, chown, umask, lsattr.