chattr

Zmienia atrybuty pliku na systemie plików ext (np. niezmienność).

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ć. Tylko root (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 program dump przy 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).