¿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.