chattr to narzędzie do ustawiania atrybutów plików na linuksowych systemach plików z rodziny ext (ext2/ext3/ext4), choć część atrybutów działa też na innych, np. Btrfs czy XFS. Atrybuty to coś innego niż zwykłe uprawnienia rwx — działają piętro niżej, na poziomie systemu plików, i potrafią rzeczy, których chmod nie umie. Najgłośniejszy przykład: ustawienie pliku jako niezmiennego (immutable), czyli takiego, którego nawet root nie usunie ani nie nadpisze, dopóki atrybut nie zostanie zdjęty. Sprawdzić aktualne atrybuty możesz komendą lsattr.
Składnia i najważniejsze opcje
Podstawowa składnia: chattr [OPCJE] [+-=ATRYBUTY] PLIK...
Operator + dodaje atrybut, - usuwa, a = ustawia podaną listę jako jedyną. Najczęściej używane atrybuty i opcje:
+i— immutable: pliku nie da się zmienić, usunąć, zmienić nazwy ani dowiązać. Tylkoroot(lub proces z CAP_LINUX_IMMUTABLE) może to ustawić i zdjąć.+a— append-only: do pliku można tylko dopisywać, nie nadpisywać. Idealne pod logi.+A— bez aktualizacji czasu dostępu (atime), mniej operacji I/O na dysku.+d— plik pomijany przez programdumpprzy backupie.+c— kompresja w locie (uwaga: ignorowana przez ext2/ext3/ext4 w mainline).-R— rekurencyjnie, razem z podkatalogami.-V— verbose, wypisuje co zostało zrobione.-f— wycisza większość komunikatów o błędach.
Przykłady użycia
sudo chattr +i /etc/resolv.conf— zabezpiecza plik przed nadpisaniem (np. żeby NetworkManager nie podmieniał DNS).sudo chattr -i /etc/resolv.conf— zdejmuje immutable, gdy znów chcesz edytować plik.lsattr /etc/resolv.conf— sprawdza, czy atrybut faktycznie jest ustawiony (zobaczysz literkęi).sudo chattr +a /var/log/audit.log— pozwala tylko dopisywać do logu, blokuje skasowanie historii.sudo chattr -R +i /opt/aplikacja— rekurencyjnie usztywnia cały katalog z aplikacją.
Częste błędy i pułapki
Pierwsza klasyczna wtopa: ustawiasz +i na pliku, a potem dziwisz się, że apt, edytor albo własny skrypt zwraca Operation not permitted — i to nawet jako root. To nie błąd, to działa zgodnie z planem. Najpierw chattr -i, dopiero potem edycja. Druga: atrybuty c, s i u są ignorowane przez ext2/ext3/ext4 w aktualnych jądrach mainline — możesz je ustawić, ale nic nie zrobią, więc nie licz na sekretne kasowanie po s. Trzecia: chattr nie chodzi po dowiązaniach symbolicznych tak, jak się spodziewasz, i wymaga uprawnień root dla najważniejszych atrybutów. Pamiętaj też, że to narzędzie linuksowe — na macOS odpowiednikiem flag plikowych jest chflags, a nie chattr.
Powiązane komendy: lsattr (podgląd atrybutów), chmod i chown (uprawnienia i właściciel), chflags (odpowiednik na BSD/macOS).