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 getfacl — setfacl 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; wielkieXdajextylko 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ń zchmod.
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.