La comanda chattr a Linux: atributs de fitxers | Iespai

La comanda chattr a Linux: fitxers immutables i només d’afegir



La comanda chattr (change attributes) canvia els atributs especials d’un fitxer o directori. Aquests atributs són a part dels permisos habituals (rwx) i els aplica directament el sistema de fitxers. Els més útils són dos: i (immutable), que impedeix qualsevol canvi en un fitxer, fins i tot a root, i a (append-only), que només permet afegir-hi dades al final. Els atributs es consulten amb lsattr.

chattr forma part del paquet e2fsprogs i va néixer per a ext2/3/4, però molts atributs també funcionen a XFS, Btrfs i altres sistemes de fitxers. Per posar o treure i i a cal ser root (o tenir la capacitat CAP_LINUX_IMMUTABLE).

Sintaxi

chattr [opcions] [+-=]atributs fitxer...
  • + afegeix els atributs indicats.
  • - els treu.
  • = deixa exactament els atributs indicats i treu tots els altres.

Opcions

OpcióQuè fa
-RRecursiu: aplica el canvi al directori i a tot el seu contingut
-VMostra la versió i els atributs que queden després del canvi
-fNo mostra la majoria de missatges d’error

Atributs més útils

AtributNomQuè fa
iImmutableEl fitxer no es pot modificar, esborrar, reanomenar ni enllaçar, i no se’n poden canviar els permisos. Ni tan sols root, fins que no tregui l’atribut. En un directori, no s’hi poden crear ni esborrar fitxers
aAppend-onlyNomés s’hi pot escriure afegint dades al final. No es pot sobreescriure, truncar, esborrar ni reanomenar. En un directori, s’hi poden crear fitxers però no esborrar-ne
ANo atimeNo s’actualitza la data d’últim accés quan es llegeix el fitxer
dNo dumpLa comanda dump (còpies de seguretat d’ext2/3/4) no inclourà el fitxer
SSíncronEls canvis s’escriuen al disc immediatament, com si el sistema estigués muntat amb l’opció sync
CNo copy-on-writeDesactiva el copy-on-write en sistemes com Btrfs (útil per a imatges de màquines virtuals i bases de dades)
cComprimitEl sistema de fitxers comprimeix el fitxer de manera transparent (Btrfs, per exemple)

Hi ha altres atributs que lsattr mostra però que no es poden canviar amb chattr, com e (el fitxer fa servir extents, l’habitual a ext4) o I (directori indexat). Els veuràs sovint a la sortida de lsattr; no cal que hi facis res.

Exemples

Fer un fitxer immutable:

$ sudo chattr +i fitxer.txt
$ lsattr fitxer.txt
----i----------------- fitxer.txt

A partir d’aquí, qualsevol canvi falla, també amb sudo:

$ echo "més text" | sudo tee -a fitxer.txt
tee: fitxer.txt: Operation not permitted
$ sudo rm fitxer.txt
rm: cannot remove 'fitxer.txt': Operation not permitted
$ sudo mv fitxer.txt altre.txt
mv: cannot move 'fitxer.txt' to 'altre.txt': Operation not permitted
$ sudo chmod 600 fitxer.txt
chmod: changing permissions of 'fitxer.txt': Operation not permitted

Treure l’atribut per tornar-lo a poder modificar:

sudo chattr -i fitxer.txt

Un fitxer de registre on només es pugui afegir:

sudo chattr +a registre.log

Ho tens explicat pas a pas a chattr +a log.txt.

Protegir un directori sencer i el seu contingut:

sudo chattr -R +i /srv/configuracio-bona

I desfer-ho:

sudo chattr -R -i /srv/configuracio-bona

No actualitzar la data d’accés d’un fitxer que es llegeix molt (aquest no necessita root si el fitxer és teu):

chattr +A dades.db

Per a què serveix l’immutable a la pràctica

  • Evitar que un programa sobreescrigui un fitxer de configuració. L’exemple clàssic és /etc/resolv.conf, que alguns serveis de xarxa reescriuen. Avui és millor configurar bé el servei que el gestiona (systemd-resolved, NetworkManager…) que bloquejar-lo amb +i.
  • Protegir fitxers crítics contra errors propis, com un rm -rf en el lloc equivocat.
  • Fer més difícil la feina a un atacant, tot i que no és una protecció de veritat: si algú aconsegueix ser root, pot treure l’atribut amb chattr -i.

Compte amb…

  • Recorda que l’has posat. Un fitxer immutable dona errors estranys: les actualitzacions de paquets fallen, un servei no pot desar la configuració, rm diu Operation not permitted encara que siguis root. Si t’hi trobes, mira els atributs amb lsattr abans de buscar més lluny.
  • Els descriptors oberts no es veuen afectats: si un programa ja tenia el fitxer obert per escriure abans del +i o el +a, hi pot continuar escrivint.
  • No tots els sistemes de fitxers ho admeten. En particular, no funciona en sistemes FAT, NTFS ni en la majoria de recursos de xarxa; chattr respon Operation not supported o Inappropriate ioctl for device.
  • Atributs que no fan res a ext4: segons la pàgina de manual, c (compressió), s (esborrat segur) i u (recuperació en esborrar) no s’apliquen a ext2, ext3 ni ext4. No hi confiïs per esborrar dades de manera segura ni per recuperar-les.

Correccions respecte a la versió anterior

La primera versió d’aquest article tenia alguns errors que val la pena aclarir:

  • L’atribut d no vol dir «directori» ni protegeix d’un rm -rf: vol dir no dump, és a dir, que la comanda dump no farà còpia de seguretat del fitxer.
  • L’atribut u no és per a «atributs definits per l’usuari»: en teoria serveix per poder recuperar un fitxer esborrat, però a ext4 no està implementat.
  • c només fa alguna cosa en sistemes de fitxers amb compressió (com Btrfs); a ext4 no.

Comandes relacionades

  • lsattr: veure els atributs d’un fitxer.
  • chattr +a log.txt: un fitxer de registre on només es pot afegir.
  • chmod: els permisos de lectura, escriptura i execució.
  • chown i chgrp: propietari i grup dels fitxers.

Esta web usa cookies.