Cómo utilizar el comando Chattr en Linux
El comando chattr (cambiar atributo) en Linux es una potente herramienta utilizada para modificar los atributos de los archivos en un sistema de archivos ext2, ext3 o ext4. Permite a los usuarios establecer ciertos atributos que controlan cómo se puede acceder a los archivos y modificarlos. Por ejemplo, la opción +i puede hacer que un archivo sea inmutable, lo que significa que no puede ser alterado, borrado o renombrado, ni siquiera por el usuario root, hasta que se elimine el atributo inmutable. Otros atributos son +a, que permite abrir un archivo sólo en modo append, y +c, que marca el archivo para su compresión. Este comando es especialmente útil para los administradores del sistema que necesitan aplicar controles de acceso estrictos y proteger los archivos críticos del sistema de cambios accidentales o malintencionados. El comando chattr debe utilizarse con precaución, ya que un uso inadecuado puede restringir el acceso a los archivos de formas no deseadas.
Requisitos previos
- Un servidor con sistema operativo Linux.
- Una contraseña de root configurada en el servidor.
Sintaxis básica
A continuación se muestra la sintaxis básica del comando chattr:
chattr [OPTIONS] [OPERATOR][ATTRIBUTES] FILE
A continuación se muestra una breve explicación de cada opción:
- +: Se utiliza para añadir los atributos específicos al archivo.
- -: Se utiliza para eliminar los atributos específicos del archivo.
- =: Se utiliza para establecer los atributos especificados como los únicos atributos.
- a: Sólo se puede abrir en modo anexar para escribir.
- A: No se actualiza el registro atime.
- c: Comprimirá automáticamente el archivo.
- i: Protegerá el archivo de un borrado accidental.
- S: Los cambios del archivo se escriben sincrónicamente en el disco.
Proteger un archivo de un borrado accidental
Asegurar los archivos importantes es muy importante para cualquier administrador del sistema. Puedes utilizar el comando chattr para asegurar tu archivo, de forma que ningún usuario pueda borrarlo, renombrarlo o modificarlo.
Para entenderlo mejor, crea un directorio llamado dir1 y un fichero llamado file1 con el siguiente comando:
mkdir dir1 touch file1
A continuación, imprime los atributos de file1 y dir1 con el siguiente comando:
ls -l
Salida:
drwxr-xr-x 2 root root 4096 May 3 11:56 dir1 -rw-r--r-- 1 root root 0 May 3 11:56 file1
A continuación, establece las banderas +i tanto en dir1 como en file1 para impedir que nadie borre un archivo.
chattr +i dir1 chattr +i file1
A continuación, verifica el atributo con el siguiente comando:
ls -l
Salida:
drwxr-xr-x 2 root root 4096 May 3 11:56 dir1 -rw-r--r-- 1 root root 0 May 3 11:56 file1
Ahora, intenta borrar el archivo y el directorio:
rm -rf file1 dir1
Salida:
rm: cannot remove ‘file1’: Operation not permitted rm: cannot remove ‘dir1’: Operation not permitted
Ahora, intenta renombrar el archivo:
mv file1 file2
Salida:
mv: cannot move ‘file1’ to ‘file2’: Operation not permitted
Ahora, intenta cambiar el permiso del fichero:
chmod 777 file1
Salida:
chmod: changing permissions of ‘file1’: Operation not permitted
Cómo restablecer el atributo de los archivos
También puedes utilizar el comando chattr para restablecer el atributo del archivo que hemos establecido en el paso anterior. Para que cualquiera pueda modificar y borrar el archivo.
Puedes utilizar la bandera -i para eliminar el atributo del archivo y del directorio:
chattr -i file1 dir1
Ahora puedes verificar el estado del archivo y del directorio con el siguiente comando:
lsattr
Salida:
-------------e-- ./dir1 -------------e-- ./file1
Permitir Anexar Datos sin Modificar los Existentes en un Fichero
Si quieres permitir a todos los usuarios que sólo añadan los datos sin modificar o cambiar los datos existentes. Entonces, puedes utilizar la bandera +a en el archivo.
Vamos a crear un nuevo archivo con algún contenido:
echo "Hi How Are You" > newfile.txt
A continuación, establece el atributo +a en el archivo:
chattr +a newfile.txt
Ahora, intenta sustituir el contenido ya existente:
echo "I am replacing" > newfile.txt
Deberías obtener el siguiente error:
bash: newfile.txt: Operation not permitted
Ahora, intenta añadir nuevo contenido a un archivo existente:
echo "This is new content" >> newfile.txt
Ahora, verifica el contenido de un archivo:
cat newfile.txt
Salida:
Hi How Are You This is new content
Proteger directorios recursivamente
Puedes utilizar la bandera -R con +i para proteger el directorio y los subdirectorios de forma recursiva.
Primero, crea un directorio y subdirectorios con el siguiente comando:
mkdir -p test/dir1/dir2 mkdir -p test/dir3/dir4 mkdir -p test/dir5/dir6
Ahora, protege el directorio de prueba y todos los subdirectorios con el siguiente comando:
chattr -R +i test
Ahora, intenta borrar el directorio de prueba con todos los subdirectorios:
rm -rf test/
Deberías obtener el siguiente error:
rm: cannot remove ‘test/dir1/dir2’: Permission denied rm: cannot remove ‘test/dir5/dir6’: Permission denied rm: cannot remove ‘test/dir3/dir4’: Permission denied
Ahora, restablece el atributo del directorio de prueba con el siguiente comando:
chattr -R -i test
Ya puedes borrar el directorio de prueba con todos los subdirectorios.
Conclusión
En la guía anterior, has aprendido a proteger archivos y directorios con el comando chattr. Espero que esto te ayude a proteger tus archivos de configuración importantes.