11 jun 2011

Atributos de ficheros en Linux y Unix: chattr y chflags

 

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:

AtributoSignificadoEjemplo de uso
AEl 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.
sEl 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.
aEl 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.
cActiva 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.
DEste 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.
dElimina 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.
ISuele 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.
iPone 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.
jEn 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.
SEste 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.
TActiva 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.
tLos 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 pruebarm: remove write-protected regular empty file `prueba'? yrm: 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 iinmutable, 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 pruebarm: remove regular empty file `prueba'? yrm: 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 aappend, 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,

 

7 comentarios:

  1. espectacular, llevo muchos años usando linux, me considero un usuario bastante avanzado, pero no lo conocía. La verdad que su FS es espectacular, tiene muchísimas opciones. Me encantaría que las interfaces gráficas fueran mas amigables en el manejo de estos atributos. Todas las que ví solo permiten hacer el típico chmod, o chgrp/chown.

    ResponderEliminar
  2. Esta es la clase de cosa que no se aprende en la universidad y lo digo con conocimiento de causa. Recion terminé la ingeniería y este comando ni lo olí.

    ResponderEliminar
  3. Si jesus se lo ha currado... un buen aporte! :D

    ResponderEliminar
  4. [...] en el artículo de hace unos días vimos las operaciones con los permisos básicos (lectura, escritura y ejecución) hoy vamos a ver [...]

    ResponderEliminar
  5. [...] Fuente: http://www.flu-project.com/atributos-de-ficheros-en-linux-y-unix-chattr-y-chflags.html [...]

    ResponderEliminar
  6. [...] Atributos de ficheros en linux y unix - un listado de atributos de ficheros, la verdad es que esta muy interestante, recomendaria leerlo aunque no lo parezca. [...]

    ResponderEliminar
  7. Es increíble como todo se conecta. Me tope con el problema de modificar un archivo de los ejercicios Level07 de http://exploit-exercises.com/nebula/level07. utilice lo que conocía chmod y chown. y no lo logre.Es asi como primero llegue a esta pagina:http://recursostic.educacion.es/observatorio/web/ca/software/software-general/562-elvira-misfud-donde se discuten escenarios donde el comando chattr, seria util; como lo menciona, no es un obstaculo para los hackers, pero requiere gran conocimiento por parte de ellos.y finalmente, despues de visitar el anterior link, busque el comando, y llegue a este post.Espero que les haya gustado la historia, me gustaría saber como llegaste tu al comando.Muchas Gracias.

    ResponderEliminar