¿Cómo utilizo el comando chattr en Linux?

Permitidme que hoy os hable del comando chattr, comando no muy conocido, que sirve para cambiar los atributos de un archivo en un sistema GNU/Linux. He vuelto a este comando tras necesitarlo para modificar los atributos de varios de ficheros en un host que gestiono.

Además es genial ya que proporciona más seguridad a nuestros archivos, frente a cambios y eliminaciones no deseados. Existen muchos atributos disponibles para hacerlo. Muy útil en el caso de VPS creados en proveedores de Internet, que en muchos casos te añaden «by the face» sus configuraciones en diferentes partes del sistema. Una manera de evitar su edición tras un reinicio, es indicar que dicho fichero es «inmutable» para que así no se pueda cambiar por un tercero con acceso. Más adelante os explico como.

A primera vista parece similar a chmod, del que ya os hablé.  En el caso de esta herramienta, se encarga de los permisos de usuario, grupo e invitado, en lo referido a la lectura, escritura y ejecución. En cambio con chattr se refiere a atributos que son independientes del usuario o grupo.

Chattr al detalle

Como siempre la mejor manera para saber como funciona y en que consiste un comando es consultar su página de man. Tal y como indican los párrafos anteriores chattr cambia los atributos del archivo en los sitemas de ficheros típicos de GNU/Linux

Su formato es el siguiente:

chattr [ -RVf ] [ -v version ] [ -p project ] [ mode ] files…

El operador + hace que los atributos seleccionados se agreguen a los atributos existentes de los archivos; - hace que se eliminen; y = hace que sean los únicos atributos que tienen los archivos.

Las letras aAcCdDeFijPsStTu seleccionan los nuevos atributos para los archivos: anexar solo (a), sin actualizaciones temporales (A), comprimido (c), sin copia al escribir (C), sin volcado (d), actualizaciones de directorio sincrónicas (D), formato de extensión (e), búsquedas de directorio que no distinguen entre mayúsculas y minúsculas (F), inmutable (i), registro de datos (j), jerarquía del proyecto (P), seguro eliminación (e), actualizaciones síncronas (S), sin fusión de cola (t), parte superior de la jerarquía de directorios (T) e indeleble (u)

Los siguientes atributos son de solo lectura y pueden ser enumerados por lsattr pero no modificados por chattr: cifrado (E), directorio indexado (I) y datos en línea (N).

No todas las banderas o «flags» son compatibles o utilizadas por todos los sistemas de archivos; podemos consultar las páginas de manual específicas del sistema de archivos como btrfs , ext4 y xfs  para obtener más detalles específicos del sistema de archivos.

Sus opciones son:

  • -R Cambiar de forma recursiva los atributos de los directorios y su contenido.
  • -V Sea detallado con la salida de chattr e imprima la versión del programa.
  • -f Suprime la mayoría de los mensajes de error.
  • -v versión (Configure el número de versión / generación del archivo)
  • -p proyecto (Establezca el número de proyecto del archivo)

Una vez tenemos claro esto, continuemos.

Ejemplo de uso de Chattr

Ya os he comentado que una de las cosas que hago cuando creo un VPS en un proveedor de Internet, lo primero que hago es modificar algunos ficheros de configuración básicos, como el /etc/hosts o /etc/resolv.conf, entre otros.

Evitar que se modifique un archivo

Para evitar que al reiniciar se añada la configuración del proveedor, indico que son inmutables, con el parámetro -i, como hemos visto antes.

sudo chattr +i /etc/resolv.conf

Una vez hecho esto podemos comprobar sus atributos:

lsattr /etc/resolv.conf
----i--------------- /etc/resolv.conf

De esta manera vemos que efectivamente se han aplicado los cambios.

Deshabilitar la fecha de acceso

Nos puede interesar evitar que se sepa cuando se ha modificado un fichero (atime), para ello utilizamos el parámetro +A, de la siguiente manera:

chattr +A test.txt

Con el resultado:

lsattr test.txt
-------A------------ test.txt

Comprimir de forma automática

Con el parámetro +c indicamos que el fichero se mantenga comprimido.

chattr +c test.txt

Con el resultado:

lsattr test.txt
--------c---- test.txt

Permitir recuperar un archivo aunque se haya eliminado

Con el parámetro +u indicamos que aunque se borre el fichero, sus datos permanecerán guardados para así poder recuperarlos:

chattr +u test.txt

Vemos su resultado:/p>

lsattr test.txt
-u----------- test.txt

Sobrescribir todos los bloques con 0 al borrar

Al contrario del ejempo anterior, con el parámetro +s, indica que cuando un archivo se borre, de forma automática los bloques utilizados por el mismo serán sobreescritos con 0.

chattr +s test.txt

Lo listamos:

lsattr test.txt
-----------------s- test.txt

Existe una larga lista de parámetros. ¿Tienes experiencia con este comando? ¿Para que lo sueles usar? Se agradecen comentarios.

Fuentes consultadas

Página de man de chattr

Página de man de lsattr