Spis treści
- Czym jest ACL w Linuxie?
- ACL vs. standardowe uprawnienia UNIX
- Typy ACL – access ACL i default ACL
- Instalacja i wymagania systemowe
- Podstawowe komendy: getfacl i setfacl
- Składnia wpisów ACL – szczegółowy opis
- Praktyczne przykłady konfiguracji ACL
- ACL a maska uprawnień
- Default ACL – dziedziczenie uprawnień
- ACL w systemach plików – ext4, XFS, Btrfs, NFS
- Kopiowanie i archiwizacja plików z ACL
- ACL w środowiskach wieloużytkownikowych
- Najczęstsze błędy i jak ich unikać
- ACL w kontekście SELinux i AppArmor
- Dobre praktyki bezpieczeństwa
- FAQ – najczęściej zadawane pytania
1. Czym jest ACL w Linuxie?
ACL (Access Control List) – lista kontroli dostępu – to rozszerzony mechanizm uprawnień w systemach Linux i UNIX, który pozwala przypisać szczegółowe prawa dostępu do plików i katalogów dla dowolnej liczby użytkowników i grup, wykraczając poza tradycyjny model owner/group/others.
Standardowy model uprawnień POSIX (rwxrwxrwx) działa dobrze w prostych środowiskach, ale gdy potrzebujemy dać dostęp do pliku konkretnej osobie bez zmiany właściciela lub grupy, model ten okazuje się niewystarczający. Właśnie tutaj wkraczają ACL.
Kluczowe cechy ACL w Linuxie
- Możliwość nadania uprawnień konkretnemu użytkownikowi (named user) poza właścicielem pliku
- Możliwość nadania uprawnień konkretnej grupie (named group) poza przypisaną grupą pliku
- Obsługa dziedziczenia uprawnień przez nowo tworzone pliki i katalogi (default ACL)
- Pełna kompatybilność z POSIX.1e (IEEE 1003.1e draft)
- Transparentność – narzędzia systemowe jak
ls -lsygnalizują obecność ACL znakiem+
2. ACL vs. standardowe uprawnienia UNIX
Aby w pełni zrozumieć, dlaczego ACL są tak przydatne, warto zestawić oba modele.
Tradycyjny model POSIX (bez ACL)
-rw-r--r-- 1 jan developers 4096 Jun 12 10:00 raport.txt
W tym modelu dostęp do pliku raport.txt mają:
jan(właściciel) – odczyt i zapis (rw-)- Wszyscy członkowie grupy
developers– tylko odczyt (r--) - Pozostali użytkownicy – tylko odczyt (
r--)
Problem: Chcemy, żeby użytkownik anna mogła edytować plik, ale nie chcemy dodawać jej do grupy developers ani zmieniać właściciela. Bez ACL jest to niemożliwe.
Model z ACL
-rw-rw-r--+ 1 jan developers 4096 Jun 12 10:00 raport.txt
Znak + na końcu ciągu uprawnień informuje, że plik ma rozszerzone ACL. Możemy teraz precyzyjnie nadać annie uprawnienia do odczytu i zapisu bez ingerencji w grupy.
| Cecha | Uprawnienia POSIX | ACL |
|---|---|---|
| Liczba podmiotów | 3 (owner, group, others) | Nieograniczona |
| Granularność | Niska | Wysoka |
| Dziedziczenie | Brak | Tak (default ACL) |
| Widoczność | ls -l | getfacl |
| Obsługa przez narzędzia | Powszechna | Wymaga wsparcia FS |
3. Typy ACL – access ACL i default ACL
W Linuksie wyróżniamy dwa główne typy list kontroli dostępu:
Access ACL (listy dostępu)
Access ACL definiuje uprawnienia do konkretnego pliku lub katalogu. Każdy wpis (ACE – Access Control Entry) składa się z trzech elementów:
typ:kwalifikator:uprawnienia
Przykładowe wpisy access ACL:
user::rw- # właściciel pliku
user:anna:rw- # konkretny użytkownik (anna)
group::r-- # przypisana grupa
group:devops:rwx # konkretna grupa (devops)
mask::rw- # maska efektywnych uprawnień
other::r-- # wszyscy pozostali
Default ACL (domyślne listy dostępu)
Default ACL stosuje się wyłącznie do katalogów i definiuje, jakie uprawnienia ACL automatycznie dziedziczą nowo tworzone pliki i podkatalogi. Jest to kluczowa funkcja przy zarządzaniu złożonymi strukturami katalogów.
# Ustawienie default ACL na katalogu /projekty
setfacl -d -m u:anna:rwx /projekty
Od tej chwili każdy nowy plik i katalog tworzony w /projekty automatycznie otrzyma wpis ACL u:anna:rwx.
4. Instalacja i wymagania systemowe
Wymagania
Aby korzystać z ACL w Linuksie, potrzebujesz:
- Jądro Linuksa z obsługą ACL (wszystkie współczesne dystrybucje – Linux ≥ 2.6)
- System plików z obsługą ACL (ext2/3/4, XFS, Btrfs, ZFS, JFS, ReiserFS)
- Narzędzia przestrzeni użytkownika – pakiet
acl
Instalacja pakietu acl
Ubuntu / Debian / Linux Mint:
sudo apt update && sudo apt install acl
RHEL / CentOS / AlmaLinux / Rocky Linux:
sudo dnf install acl
Arch Linux / Manjaro:
sudo pacman -S acl
openSUSE / SLES:
sudo zypper install acl

Weryfikacja obsługi ACL przez system plików
# Sprawdź opcje montowania
mount | grep "acl"
# Lub przejrzyj /proc/mounts
cat /proc/mounts | awk '{print $1, $2, $4}' | grep acl
Włączenie ACL w /etc/fstab (jeśli wymagane)
Na starszych dystrybucjach lub niestandardowych konfiguracjach może być konieczne jawne włączenie ACL:
# /etc/fstab
UUID=xxxx-xxxx /data ext4 defaults,acl 0 2
Uwaga: Na większości współczesnych dystrybucji (Ubuntu ≥ 12.04, RHEL ≥ 7, Fedora) ACL jest domyślnie włączone dla ext4 i XFS. Opcja
aclwfstabnie jest wymagana.
5. Podstawowe komendy: getfacl i setfacl
Dwa główne narzędzia do zarządzania ACL to getfacl (odczyt) i setfacl (zapis).
getfacl – odczytywanie ACL
getfacl plik_lub_katalog
Przykładowe wyjście:
# file: raport.txt
# owner: jan
# group: developers
user::rw-
user:anna:rw-
group::r--
group:devops:r--
mask::rw-
other::r--

Przydatne opcje getfacl:
| Opcja | Opis |
|---|---|
-a | Wyświetl tylko access ACL (domyślnie) |
-d | Wyświetl tylko default ACL |
-R | Rekurencyjnie dla katalogów |
-n | Wyświetl numery UID/GID zamiast nazw |
--skip-base | Pomiń wpisy base ACL (owner, group, other) |
setfacl – ustawianie ACL
setfacl [opcje] wpis plik
Przydatne opcje setfacl:
| Opcja | Opis |
|---|---|
-m | Modyfikuj (dodaj lub zmień wpis ACL) |
-x | Usuń konkretny wpis ACL |
-b | Usuń wszystkie wpisy ACL |
-k | Usuń default ACL |
-R | Rekurencyjnie |
-d | Operuj na default ACL |
--set | Zastąp całe ACL podanym zestawem wpisów |
--set-file | Wczytaj ACL z pliku |
6. Składnia wpisów ACL – szczegółowy opis
Każdy wpis ACL (ACE) ma postać:
[d[efault]:]typ[:kwalifikator]:uprawnienia
Typy wpisów
| Typ | Skrót | Opis |
|---|---|---|
user | u | Właściciel lub konkretny użytkownik |
group | g | Przypisana grupa lub konkretna grupa |
other | o | Wszyscy pozostali |
mask | m | Maska efektywnych uprawnień |
Kwalifikator
- Dla
user: pusta (właściciel) lub nazwa/UID użytkownika - Dla
group: pusta (przypisana grupa) lub nazwa/GID grupy - Dla
otherimask: zawsze pusta
Uprawnienia
Uprawnienia można podawać symbolicznie lub ósemkowo:
| Symbol | Wartość | Opis |
|---|---|---|
r | 4 | Odczyt (read) |
w | 2 | Zapis (write) |
x | 1 | Wykonanie (execute) / wejście do katalogu |
- | 0 | Brak uprawnienia |
Przykłady prawidłowych wpisów ACL:
u::rwx # właściciel – pełne prawa
u:jan:rw- # jan – odczyt i zapis
u:1001:r-- # UID 1001 – tylko odczyt
g::r-x # przypisana grupa – odczyt i wykonanie
g:devops:rwx # grupa devops – pełne prawa
o::--- # pozostali – brak dostępu
m::rw- # maska – maksymalnie rw
d:u:anna:rw- # default ACL dla anny
7. Praktyczne przykłady konfiguracji ACL
Przykład 1: Nadanie uprawnień konkretnemu użytkownikowi
# anna może odczytywać i zapisywać plik raport.txt
setfacl -m u:anna:rw raport.txt
# Weryfikacja
getfacl raport.txt

Przykład 2: Nadanie uprawnień grupie
# Grupa "audytorzy" może tylko czytać katalog /finanse
setfacl -m g:audytorzy:rx finanse
# Sprawdzenie
getfacl finanse

Przykład 3: Usunięcie konkretnego wpisu
# Usuń uprawnienia anny z pliku
setfacl -x u:anna raport.txt
# Usuń uprawnienia konkretnej grupy
setfacl -x g:audytorzy finanse

Przykład 4: Usunięcie wszystkich ACL
# Przywróć standardowe uprawnienia POSIX
setfacl -b raport.txt
Przykład 5: Rekurencyjne ustawienie ACL na katalogu
# Daj użytkownikowi "backup" dostęp do odczytu całego drzewa /var/www
setfacl -R -m u:backup:r-x /var/www
Przykład 6: Kopiowanie ACL między plikami
# Skopiuj ACL z pliku źródłowego do docelowego
getfacl plik_zrodlowy | setfacl --set-file=- plik_docelowy
Przykład 7: Ustawienie ACL z pliku konfiguracyjnego
# Utwórz plik z definicją ACL
cat > moje_acl.txt << 'EOF'
u::rw-
u:anna:rw-
u:piotr:r--
g::r--
g:devops:rw-
m::rw-
o::---
EOF
# Zastosuj ACL z pliku
setfacl --set-file=moje_acl.txt raport.txt

Przykład 8: Odebranie dostępu wszystkim poza właścicielem
# Zablokuj dostęp grupie i pozostałym, zachowując ACL
setfacl -m g::--- -m o::--- plik_poufny.txt

Przykład 9: Wspólny katalog projektowy
Scenariusz: Katalog /projekty/alpha powinien być w pełni dostępny dla zespołu alpha-team, a użytkownik manager powinien mieć prawo tylko do odczytu.
# Utwórz katalog
mkdir -p /projekty/alpha
# Nadaj pełne prawa grupie alpha-team
setfacl -m g:alpha-team:rwx /projekty/alpha
# Nadaj odczyt managerowi
setfacl -m u:manager:rx /projekty/alpha
# Ustaw default ACL, żeby nowe pliki dziedziczyły te prawa
setfacl -d -m g:alpha-team:rwx /projekty/alpha
setfacl -d -m u:manager:rx /projekty/alpha
# Weryfikacja
getfacl /projekty/alpha

8. ACL a maska uprawnień
Maska (mask) to jedno z najważniejszych – i najczęściej źle rozumianych – pojęć w ACL.
Czym jest maska?
Maska definiuje maksymalny zbiór uprawnień, który może obowiązywać dla nazwanych użytkowników (named user), przypisanej grupy (owning group) i nazwanych grup (named group). Nie dotyczy właściciela pliku (user::) ani other.
Jak działa maska?
Efektywne uprawnienia oblicza się jako AND bitowy wpisu ACL i maski:
Wpis ACL: rw- (110)
Maska: r-- (100)
Efektywne: r-- (100)
Oznacza to, że nawet jeśli we wpisie ACL dana osoba ma prawa rw-, gdy maska wynosi r--, efektywnie może tylko czytać.
Automatyczna aktualizacja maski
Gdy modyfikujesz ACL przez setfacl -m, maska jest automatycznie obliczana jako unia wszystkich wpisów named user, owning group i named group. Jeśli chcesz ustawić maskę ręcznie:
setfacl -m m::r-- plik.txt
Wyświetlanie efektywnych uprawnień
getfacl plik.txt
# Wyjście zawiera komentarz #effective: przy wpisach ograniczonych przez maskę:
user:anna:rw- #effective:r--
Kiedy maska jest ważna?
Maska ma szczególne znaczenie przy integracji ze starszymi narzędziami (np. chmod). Gdy wykonasz chmod g-w plik.txt na pliku z ACL, w rzeczywistości modyfikujesz maskę, a nie wpis grupy – to typowe źródło nieporozumień.
chmod 644 plik.txt
# To ustawia:
# user::rw-
# mask::r-- ← zmieniona przez chmod!
# other::r--
9. Default ACL – dziedziczenie uprawnień
Default ACL to mechanizm, który pozwala automatycznie stosować zdefiniowane ACL do nowo tworzonych plików i podkatalogów w danym katalogu.
Ustawianie default ACL
# Dodaj default ACL dla użytkownika anna
setfacl -d -m u:anna:rw wspolny_katalog
# Dodaj default ACL dla grupy
setfacl -d -m g:zespol:rwx wspolny_katalog
# Wyświetl default ACL
getfacl -d wspolny_katalog

Jak działa dziedziczenie?
Gdy setfacl -d jest ustawione na katalogu wspólny_katalog:
- Nowe pliki dziedziczą access ACL z default ACL katalogu (z uwzględnieniem umask dla bitu
x) - Nowe podkatalogi dziedziczą zarówno access ACL, jak i default ACL
# Przykład: katalog /shared z default ACL
mkdir /shared
setfacl -d -m u::rwx,g::rwx,o::---,u:anna:rwx,g:devops:rx shared
# Nowy plik w /shared
touch shared/nowy_plik.txt
getfacl shared/nowy_plik.txt
# → odziedziczy wpisy z default ACL katalogu /shared

Usuwanie default ACL
# Usuń wszystkie default ACL z katalogu
setfacl -k wspolny_katalog
# Lub usuń konkretny wpis default ACL
setfacl -x d:u:anna wspolny_katalog

Default ACL a umask
Istotna różnica: default ACL zastępuje działanie umask dla plików tworzonych w katalogu z default ACL. To oznacza, że nawet jeśli umask użytkownika wynosi 022, plik może odziedziczyć szersze prawa, jeśli tak mówi default ACL.
10. ACL w systemach plików – ext4, XFS, Btrfs, NFS
ext4
Najczęściej używany system plików w Linuksie. ACL jest obsługiwane natywnie od ext2. Domyślnie włączone w większości dystrybucji.
# Sprawdź opcje dla ext4
tune2fs -l /dev/sda1 | grep "Default mount options"
# Powinno zawierać: acl
XFS
XFS obsługuje ACL natywnie i jest domyślnie włączone. Szczególnie polecany dla środowisk enterprise z dużą liczbą plików.
# XFS nie wymaga żadnej dodatkowej konfiguracji
xfs_info /dev/sdb1
Btrfs
Btrfs obsługuje ACL od wersji jądra 2.6.28. Działanie jest identyczne jak w ext4.
tmpfs
ACL jest obsługiwane w tmpfs od Linux 3.9:
# Sprawdź wersję jądra
uname -r
NFS (Network File System)
ACL przez NFS wymaga dodatkowej konfiguracji. NFSv4 ma natywną obsługę ACL (NFSv4 ACL), ale różni się od POSIX ACL.
# NFSv3 z POSIX ACL – wymaga opcji nfsacls na serwerze
# W /etc/exports na serwerze NFS:
/data *(rw,sync,no_subtree_check,acl)
# NFSv4 ma własny model ACL
nfs4_getfacl plik.txt
nfs4_setfacl -a "A::OWNER@:rwaDxtTcCy" plik.txt
SMB/CIFS (Samba)
# Samba z obsługą ACL POSIX
# W smb.conf:
# nt acl support = yes
# inherit acls = yes
# Wymagana opcja montowania dla klientów:
mount -t cifs //serwer/udział /mnt -o acl
11. Kopiowanie i archiwizacja plików z ACL
Jednym z częstych problemów jest utrata ACL podczas kopiowania lub archiwizacji plików. Nie wszystkie narzędzia zachowują ACL.
Narzędzia zachowujące ACL
| Narzędzie | Zachowuje ACL | Opcja |
|---|---|---|
cp | Tak | -p lub --preserve=all |
rsync | Tak | -A lub --acls |
tar | Tak | --acls |
star | Tak | Domyślnie |
cpio | Nie | – |
scp | Nie | – |
cp z zachowaniem ACL
# Kopiowanie z zachowaniem wszystkich atrybutów (w tym ACL)
cp -p plik_zrodlowy plik_docelowy
# Rekurencyjne kopiowanie katalogu z ACL
cp -rp katalog_zrodlowy/ katalog_docelowy/
rsync z ACL
# Synchronizacja z zachowaniem ACL
rsync -aA źródło/ cel/
# Wyjaśnienie flag:
# -a : tryb archiwum (rekurencja, symlinki, czasy, uprawnienia, grupy, właściciel)
# -A : zachowaj ACL
tar z ACL
# Tworzenie archiwum z ACL
tar --acls -czf archiwum.tar.gz katalog/
# Przywracanie archiwum z ACL
tar --acls -xzf archiwum.tar.gz
Eksport i import ACL jako tekst
# Eksport ACL całego drzewa katalogów
getfacl -R katalog > acl_backup.txt
# Import (przywrócenie) ACL
setfacl --restore=acl_backup.txt
To bardzo przydatne przy migracji systemów lub tworzeniu kopii zapasowych konfiguracji ACL.
12. ACL w środowiskach wieloużytkownikowych
Scenariusz: środowisko deweloperskie
# Struktura:
# /projekty/
# ├── frontend/ → dostęp: frontend-team (rwx), backend-team (rx), manager (rx)
# ├── backend/ → dostęp: backend-team (rwx), frontend-team (rx), manager (rx)
# └── wspólne/ → dostęp: wszyscy deweloperzy (rwx), manager (rwx)
# Konfiguracja projekty/frontend
setfacl -m g:frontend-team:rwx projekty/frontend
setfacl -m g:backend-team:rx projekty/frontend
setfacl -m u:manager:rx projekty/frontend
setfacl -d -m g:frontend-team:rwx projekty/frontend
setfacl -d -m g:backend-team:rx projekty/frontend
# Konfiguracja projekty/backend
setfacl -m g:backend-team:rwx projekty/backend
setfacl -m g:frontend-team:rx projekty/backend
setfacl -m u:manager:rx projekty/backend
setfacl -d -m g:backend-team:rwx projekty/backend
setfacl -d -m g:frontend-team:rx projekty/backend
# Konfiguracja projekty/wspólne
setfacl -m g:frontend-team:rwx projekty/wspólne
setfacl -m g:backend-team:rwx projekty/wspólne
setfacl -m u:manager:rwx projekty/wspólne
setfacl -d -m g:frontend-team:rwx projekty/wspólne
setfacl -d -m g:backend-team:rwx projekty/wspólne
Scenariusz: współdzielony serwer plików
# Użytkownik "audytor" powinien mieć dostęp TYLKO do odczytu
# do wszystkich katalogów produkcyjnych, bez możliwości modyfikacji
find produkcja -type d -exec setfacl -m u:audytor:rx {} \;
find produkcja -type f -exec setfacl -m u:audytor:r {} \;
Scenariusz: katalog publiczny z ograniczeniami
# publiczny – każdy może czytać, tylko grupa "redakcja" może pisać
chmod 755 publiczny
setfacl -m g:redakcja:rwx publiczny
setfacl -d -m g:redakcja:rwx publiczny
setfacl -d -m o::r-x publiczny
13. Najczęstsze błędy i jak ich unikać
Błąd 1: chmod nadpisuje maskę ACL
Problem: Po wykonaniu chmod g-w plik.txt wpis user:anna:rw- przestaje działać, bo maska została zmieniona.
Rozwiązanie:
# Zamiast chmod używaj setfacl do zmiany uprawnień
setfacl -m m::rw- plik.txt
# Jeśli musisz użyć chmod, po nim sprawdź maskę
chmod 644 plik.txt
getfacl plik.txt # sprawdź #effective przy wpisach
Błąd 2: Brak wsparcia ACL w systemie plików
Problem: setfacl: plik.txt: Operacja nieobsługiwana
Rozwiązanie:
# Sprawdź czy FS obsługuje ACL
mount | grep $(df plik.txt | tail -1 | awk '{print $1}')
# Jeśli brak "acl" w opcjach, dodaj do /etc/fstab i remontuj
Błąd 3: ACL ginie podczas archiwizacji
Problem: Po cp lub scp pliki tracą ACL.
Rozwiązanie: Używaj cp -p, rsync -A, tar --acls.
Błąd 4: Nieprawidłowa składnia wpisu
Problem: setfacl: Option -m: Invalid argument near character X
Rozwiązanie:
# Błędnie (spacja po dwukropku):
setfacl -m u: anna:rw plik.txt
# Poprawnie:
setfacl -m u:anna:rw plik.txt
Błąd 5: Brak flagi -d przy default ACL
Problem: Ustawione ACL nie dziedziczą się na nowe pliki.
Rozwiązanie:
# Błędnie (brak -d):
setfacl -m u:anna:rw katalog
# Poprawnie (z flagą default):
setfacl -d -m u:anna:rw katalog
Błąd 6: Rekurencja bez -R na istniejących plikach
Problem: Default ACL działa na nowe pliki, ale istniejące pliki nie mają ACL.
Rozwiązanie:
# Ustaw ACL rekurencyjnie na istniejące pliki
setfacl -R -m u:anna:rw katalog
# I dodaj default ACL na przyszłość
setfacl -d -m u:anna:rw katalog
14. ACL w kontekście SELinux i AppArmor
ACL POSIX i mechanizmy MAC (Mandatory Access Control) jak SELinux czy AppArmor działają równolegle i niezależnie. Plik musi przejść wszystkie kontrole dostępu, żeby operacja się powiodła.
Hierarchia kontroli dostępu w Linuksie
Żądanie dostępu
↓
[1] DAC – sprawdzenie POSIX ACL/uprawnień
↓
[2] SELinux/AppArmor – polityki MAC
↓
[3] Inne moduły LSM (Linux Security Modules)
↓
Dostęp przyznany lub odmówiony
SELinux i ACL
SELinux może odmówić dostępu nawet jeśli ACL go zezwala. Zawsze sprawdzaj kontekst SELinux przy problemach:
# Sprawdź kontekst SELinux pliku
ls -Z plik.txt
# Sprawdź odmowy SELinux
ausearch -m avc -ts recent
AppArmor i ACL
AppArmor działa na poziomie profili aplikacji, nie użytkowników. ACL i AppArmor wzajemnie się uzupełniają:
# Sprawdź status AppArmor
apparmor_status
# Profile aplikacji mogą ograniczać dostęp niezależnie od ACL
15. Dobre praktyki bezpieczeństwa
1. Zasada minimalnych uprawnień (Principle of Least Privilege)
Nadawaj użytkownikom i grupom tylko te uprawnienia, które są absolutnie niezbędne. Zamiast dawać rwx, zastanów się czy rx lub r nie wystarczy.
# Dobra praktyka:
setfacl -m u:webapp:r-- etc/app/config.txt # odczyt konfiguracji
setfacl -m u:webapp:rw- var/log/app/ # zapis logów
# Zła praktyka:
setfacl -m u:webapp:rwx etc/ # zbyt szerokie uprawnienia
2. Regularne audyty ACL
# Skrypt do audytu ACL w katalogu
#!/bin/bash
echo "=== Audyt ACL: $(date) ===" >> /var/log/acl_audit.log
getfacl -R /ważny_katalog >> /var/log/acl_audit.log
# Uruchamiaj co tydzień przez cron
# 0 2 * * 0 /usr/local/bin/acl_audit.sh
3. Dokumentowanie zmian ACL
# Eksportuj ACL do pliku z datą
getfacl -R produkcja > "/backup/acl/produkcja_$(date +%Y%m%d).acl"
4. Unikaj nadmiernego używania ACL „other”
Wpis other::rwx w ACL daje dostęp wszystkim użytkownikom systemu. Zawsze rozważ czy tego potrzebujesz.
5. Monitorowanie zmian ACL przez auditd
# Dodaj regułę audytu dla zmian ACL
auditctl -w wrażliwy_katalog -p rwxa -k acl_changes
# Przeglądaj logi audytu
ausearch -k acl_changes
6. Testowanie ACL przed wdrożeniem produkcyjnym
# Testuj uprawnienia jako inny użytkownik (bez su)
sudo -u anna test -r ważny_plik && echo "Odczyt OK" || echo "Brak dostępu"
sudo -u anna test -w ważny_plik && echo "Zapis OK" || echo "Brak dostępu"
16. FAQ – najczęściej zadawane pytania
Czy ACL zastępuje standardowe uprawnienia POSIX?
Nie. ACL rozszerza model POSIX, ale go nie zastępuje. Tradycyjne uprawnienia rwx dla właściciela (user::), grupy (group::) i pozostałych (other::) są integralną częścią ACL (tzw. base ACL entries). Oba systemy działają razem.
Jak sprawdzić, czy plik ma ACL?
# ls -l pokazuje "+" na końcu ciągu uprawnień:
ls -l plik.txt
# -rw-rw-r--+ 1 jan developers 1024 Jun 12 10:00 plik.txt
# ^ znak "+" oznacza obecność ACL
# Lub bezpośrednio:
getfacl plik.txt
Czy ACL działa przez NFS?
Tak, ale z ograniczeniami. NFSv3 obsługuje POSIX ACL przy odpowiedniej konfiguracji. NFSv4 ma własny format ACL (NFSv4 ACL), który jest bogatszy, ale różni się od POSIX ACL.
Czy Docker obsługuje ACL?
Kontenery Docker dziedziczą ACL z systemu hosta dla zamontowanych wolumenów (-v). Wewnątrz kontenera ACL działa normalnie, o ile system plików je obsługuje.
Jak działa umask w połączeniu z default ACL?
Gdy katalog ma default ACL, umask jest ignorowany dla plików tworzonych w tym katalogu – ACL ma pierwszeństwo. Bez default ACL, umask działa normalnie.
Czy setuid/setgid działa z ACL?
Tak. Bity setuid (s), setgid (s) i sticky (t) działają niezależnie od ACL. Ustawia się je przez chmod, a ACL zarządza tylko prawami rwx.
Jaka jest maksymalna liczba wpisów ACL?
Nie ma twardego limitu narzuconego przez POSIX ACL. Systemy plików jak ext4 i XFS obsługują dziesiątki tysięcy wpisów na plik. W praktyce zaleca się ograniczenie do rozsądnej liczby ze względu na wydajność.
Czy można użyć ACL do ograniczenia dostępu właściciela?
Nie. Właściciel pliku (user::) zawsze ma prawa określone przez wpis user:: w ACL. Maska nie ogranicza właściciela. Jedynym sposobem na ograniczenie właściciela jest zmiana właściciela pliku (chown).
Podsumowanie
ACL w Linuksie to potężne narzędzie, które uzupełnia tradycyjny model uprawnień POSIX o precyzyjną kontrolę dostępu na poziomie pojedynczych użytkowników i grup. Dzięki narzędziom getfacl i setfacl możemy budować złożone polityki dostępu bez konieczności tworzenia skomplikowanych struktur grup użytkowników.
Kluczowe wnioski:
- ACL rozszerza, nie zastępuje, standardowe uprawnienia POSIX
- Maska (
mask) jest centralnym elementem kontrolującym efektywne prawa - Default ACL to niezbędne narzędzie przy zarządzaniu katalogami współdzielonymi
- Archiwizacja wymaga świadomego podejścia (
rsync -A,tar --acls) - ACL działa równolegle z SELinux/AppArmor – dostęp musi przejść przez wszystkie warstwy
Opanowanie ACL jest fundamentem administracji bezpiecznych środowisk Linux, szczególnie w środowiskach wieloużytkownikowych, serwerach plików i systemach produkcyjnych.
Artykuł dotyczy dystrybucji Linux z jądrem ≥ 2.6 oraz narzędziami z pakietu acl (getfacl/setfacl). Testowany na Ubuntu 22.04 LTS, RHEL 9, Debian 12 oraz Arch Linux.

