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 |
|---|---|
-R | Recursiu: aplica el canvi al directori i a tot el seu contingut |
-V | Mostra la versió i els atributs que queden després del canvi |
-f | No mostra la majoria de missatges d’error |
Atributs més útils
| Atribut | Nom | Què fa |
|---|---|---|
i | Immutable | El 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 |
a | Append-only | Nomé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 |
A | No atime | No s’actualitza la data d’últim accés quan es llegeix el fitxer |
d | No dump | La comanda dump (còpies de seguretat d’ext2/3/4) no inclourà el fitxer |
S | Síncron | Els canvis s’escriuen al disc immediatament, com si el sistema estigués muntat amb l’opció sync |
C | No copy-on-write | Desactiva el copy-on-write en sistemes com Btrfs (útil per a imatges de màquines virtuals i bases de dades) |
c | Comprimit | El 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 -rfen 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ó,
rmdiuOperation not permittedencara que siguis root. Si t’hi trobes, mira els atributs amblsattrabans de buscar més lluny. - Els descriptors oberts no es veuen afectats: si un programa ja tenia el fitxer obert per escriure abans del
+io 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;
chattrresponOperation not supportedoInappropriate ioctl for device. - Atributs que no fan res a ext4: segons la pàgina de manual,
c(compressió),s(esborrat segur) iu(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
dno vol dir «directori» ni protegeix d’unrm -rf: vol dir no dump, és a dir, que la comandadumpno farà còpia de seguretat del fitxer. - L’atribut
uno és per a «atributs definits per l’usuari»: en teoria serveix per poder recuperar un fitxer esborrat, però a ext4 no està implementat. cnomé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ó.chownichgrp: propietari i grup dels fitxers.
Esta web usa cookies.