Además de los permisos de lectura, escritura, y de ejecución asociados con el dueño, el grupo propietario y el resto de los usuarios del sistema, Linux nos permite establecer otros atributos en archivos y directorios. Estas propiedades son específicas del tipo de sistema de archivos. En este post hablaremos de algunas de las que podemos encontrar en filesystems del tipo extended (utilizaremos como ejemplo ext4). A continuación, mostraremos cómo utilizar lsattr y chattr para leer y cambiar estos atributos especiales.
Lsattr y chattr
Para empezar, crearemos dos archivos llamados prueba1.txt y prueba2.txt en nuestro directorio actual. En cada uno de ellos agregaremos luego el siguiente contenido:
echo "Yo soy el archivo prueba1.txt" > prueba1.txt echo "Yo soy el archivo prueba2.txt" > prueba2.txt
En primer lugar, veamos cómo ver la lista de atributos especiales que fueron asignados a estos nuevos archivos:
lsattr prueba*
La Fig. 1 nos muestra la lista de atributos especiales que fueron asignados a estos nuevos archivos. La letra e
que podemos ver en la salida del comando anterior indica que estos archivos utilizan extents para reducir la fragmentación.
Ahora nos interesa setear los siguientes atributos especiales
- append only, representado con una
a
, y - immutable, representado con una
i
.
Estos atributos nos permiten:
- solamente agregar contenido al archivo pero no borrar nada, y
- evitar que sea borrado, renombrado, editado, o que se agregue un enlace al mismo,
respectivamente.
Para ver la lista completa de atributos podemos consultar el man page de
chattr
.
Establecer atributos con chattr
Con una cuenta con permisos de superusuario, agreguemos el atributo append only a prueba1.txt y también el immutable a prueba2.txt:
chattr +a prueba1.txt chattr +i prueba2.txt
Ahora regresemos a nuestra cuenta de usuario común. A continuación, veamos en la Fig. 2 qué sucede cuando 1) tratamos de agregar y borrar contenido de prueba1.txt, 2) hacer lo mismo con prueba2.txt, 3) borrar, renombrar, editar, o crear un enlace a prueba2.txt.
Las operaciones que fallaron no podrán realizarse mientras los atributos mencionados estén presentes. Finalmente, para quitarlos, deberemos hacer (también como root):
chattr -a prueba1.txt chattr -i prueba2.txt
Espero que este post les haya resultado útil. ¡Nos leemos en breve!
¡Aprovechá la oportunidad de suscribirte al blog para recibir en tu correo el post nuestro de cada día, novedades, y promociones exclusivas!