Atributos de ficheros en Linux y Unix: chattr y chflags

terminal
Logo de terminal

Conjuntamente con los permisos, los atributos de ficheros en Unix es una opción muy válida para restringir aún más, las operaciones a realizar con nuestros ficheros y directorios.

En sistemas Linux, se usa el comando chattr para cambiar estos atributos. Una vez “dominado” es uno de los comandos mas útiles en linux para salvaguardar la integridad de muchos de sus ficheros importantes conjuntamente con los permisos.

Es un comando poco conocido por muchos usuarios e incluso administradores de sistemas. Con chattr, y en sistemas de ficheros ext2 o posteriores, es posible asignarle atributos a los ficheros y directorios que residan en los mismos. El uso del comando está restringido naturalmente a root y en algunos casos al propietario del fichero (consultar la página man)

La tabla con los atributos y sus significados, la podemos ver aqui:

Atributo Significado Ejemplo de uso
A El valor de la fecha de acceso no será cambiado en cada lectura del fichero. Puede incrementar los tiempos de lectura al ahorrarse la actualización de este dato.
s El espacio que ocupaba el fichero, será rellenado por bloques de ceros cuando el fichero sea eliminado. Muy util para realizar un borrado pseudoseguro de forma rápida. No obstante, es recomendable el uso de srm.
a El fichero únicamente podrá ser abierto para añadir datos al mismo. Este atributo está pensado principalmente para usarlo con logs. Podemos modificarlos para añadir líneas pero no modificar más.
c Activa la compresión de los datos del fichero. En kernels con soporte de compresión, se comprime el espacio del fichero en disco de forma transparente para las aplicaciones.
D Este atributo hace que los datos escritos en un directorio, se sincronicen en el discto de forma automática. Es muy util en el caso de discos en memoria RAM o bien en aquellos que la escritura sea en formato raw. No es muy seguro para equipos de uso habitual.
d Elimina el fichero o directorio de las copias de seguridad realizadas con la utilidad dump. Util para directorios como /tmp o aquellos de los que no queramos hacer backup o se hagan con otras herramientas.
I Suele venir por defecto en ext4 y ext3. Está relacionado con la utilización de la indexación vía htree de estos sistemas. Desactivando este atributo, podemos ahorrar tiempo de acceso en el caso de estar utilizando otros sistemas de indexación, aunque rara vez se dará el caso.
i Pone el fichero en modo solo lectura y no es posible crear enlaces hacia el. Interesante atributo para activarlo en ficheros que rara vez son escritos. Binarios, ficheros de un servidor web, repositorios de consulta, o incluso ficheros de BBDD que no son accedidos vía web para su modificación.
j En sistemas con ext3 o superior, es posible realizar el “journaling” de los ficheros con este atributo en el caso de que la partición no sea montada con tal opción. Puede ahorrar tiempos de acceso a disco montar un sistema de estas caracterìsticas y activar el journaling solo para determinados ficheros. No es muy recomendable.
S Este atributo tiene el mismo significado para los ficheros, que el D para los directorios. Es muy util en el caso de discos en memoria RAM o bien en aquellos que la escritura sea en formato raw. No es muy seguro para equipos de uso habitual.
T Activa el denominado Orlov block allocator en un directorio. Esto es, que el directorio con este atributo, se escribirá en las partes mas “rápidas” del disco. Este atributo es muy util para utilizarlo con algunos directorios con gran número de accesos como un directorio de un servidor web, el servidor de ficheros, etc.
t Los ficheros con este atributo, no presentan fragmentación en el sistema de ficheros. Realmente, no tiene mucho uso salvo para antiguos sistemas. Actualmente, los sistemas modernos, cuentan con FS resistentes a la fragmentación.

 

La forma de asignar un atributo es con el signo “+” y retirarlo es con el signo “-“. Para listar los atributos de los ficheros, se puede utilizar el comando lsattr.

Vamos a ver un ejemplo:

-bash-3.2# touch prueba
-bash-3.2# chattr +i prueba
-bash-3.2# rm prueba
rm: remove write-protected regular empty file `prueba'? y
rm: cannot remove `prueba': Operation not permitted
-bash-3.2#id uid=0(root) gid=0(root) groups=0(root)....

En este ejemplo, hemos activado el flag i, inmutable, y como vemos, ni siquiera el propio root puede eliminar el fichero. Otro ejemplo muy interesante:

-bash-3.2# chattr +a prueba
-bash-3.2# rm prueba
rm: remove regular empty file `prueba'? y
rm: cannot remove `prueba': Operation not permitted
-bash-3.2# echo HOLA > prueba
-bash: prueba: Operation not permitted
-bash-3.2# echo HOLA >> prueba

En este segundo ejemplo, activando el atributo a, append, no nos permite enviar datos al fichero para cambiar su contenido completamente, pero sí que nos permite la escritura para añadir datos al mismo.

En Unix, e incluyo naturalmente a OSX, el comando el cuestión es chflags y la utilidad del mismo es muy similar. Como siempre, recomiendo muchísima precaución a la hora de usar estos comandos ya que pueden dejar el sistema operativo totalmente inutilizable e inaccesible.

Saludos,

Related Posts Plugin for WordPress, Blogger...
Print Friendly
Facebooktwittergoogle_plusredditlinkedinmailFacebooktwittergoogle_plusredditlinkedinmail

2 Comments

  1. Hola Alfredo,

    Gracias por tu comentario. Conozco muchos administradores de sistemas que lo desconocian. Se que no es una opción muy común, pero como bien dices, es muy útil. Te recomiendo que leas el libro “la biblia de Linux”, en el que encontrarás muchos comandos para Linux y Unix muy interesantes pero poco conocidos 🙂

    Un saludo,

  2. Soy un estudiante de sistemas y se ven los permisos y ACL’s en la asignatura pero esto no se ve. Lo ver muy util y no se el motivo por el que no se explican los atributos. Gracias por compartirlo

Dejar una contestacion

Tu dirección de correo electrónico no será publicada.


*