Chattr (Cambiar atributo) es una utilidad de línea de comandos de Linux que se utiliza para cambiar los atributos del archivo. Puede establecer y desactivar ciertos atributos de un archivo en el sistema Linux para asegurar la eliminación o modificación accidental de archivos y carpetas importantes, aunque haya iniciado sesión como usuario root.
Entonces, usando el comando chattr, hace que el archivo sea inmutable. En otras palabras, significa que se usa para detener la eliminación accidental de archivos y directorios. No puede eliminar los archivos protegidos a través del atributo chattr aunque tenga permiso completo sobre los archivos.
Esto es muy útil en archivos de sistema como archivos shadow y passwd que contienen toda la información de usuario y contraseñas. Estos atributos solo se pueden establecer en archivos y directorios ubicados en un sistema de archivos ext2, ext3 o ext4.
Sintaxis del comando chattr y uso
A continuación se muestra la sintaxis del comando chattr:
chattr [ -RVf ] [ -v version ] [ mode ] files...
Atributos de archivo que podemos usar con el comando chattr:
a
- el archivo solo se puede abrir en modo de adición para escribir.A
- No se modifica el registro atime del archivo. Esto evita una cierta cantidad de E/S de disco para sistemas portátiles.c
- el kernel comprime automáticamente el archivo en el disco. Una lectura de este archivo devuelve datos sin comprimir. Una escritura en este archivo comprime los datos antes de almacenarlos en el disco.C
- el archivo no estará sujeto a actualizaciones de copia en escritura. Este indicador solo se admite en sistemas de archivos que realizan copia en escritura. Si el indicador 'C' se establece en un directorio, no tendrá ningún efecto en el directoriod
- el archivo no es candidato para la copia de seguridad cuando se ejecuta el programa de volcado.D
- cuando se modifica un directorio, los cambios se escriben sincrónicamente en el disco; esto es equivalente a la opción de montaje 'dirsync' aplicada a un subconjunto de archivos.i
- el archivo no se puede modificar, eliminar o renombrar, no se puede crear ningún enlace a este archivo y no se pueden escribir datos en el archivo. Solo el superusuario puede establecer o borrar este atributo.j
- el archivo tiene todos sus datos escritos en el diario ext3 o ext4 antes de escribirse en el archivo mismo,s
- si se elimina el archivo, sus bloques se ponen a cero y se vuelven a escribir en el disco.S
- si se modifica el archivo, los cambios se escriben sincrónicamente en el disco; esto es equivalente a la opción de montaje 'sincronizar' aplicada a un subconjunto de los archivos.t
- el archivo no tendrá un fragmento de bloque parcial al final del archivo fusionado con otros archivosT
- el directorio se considerará como la parte superior de las jerarquías de directorios a los efectos del asignador de bloques de Orlov.u
- hace que si se elimina un archivo, se guarde su contenido. Esto permite al usuario solicitar su eliminación
1) Cómo configurar el atributo de archivo (establecer bit inmutable)
Para establecer un atributo de archivo, usaremos el comando chattr con +
operador seguido del nombre del atributo.
Veamos con ejemplos cómo establecer un atributo inmutable en un archivo. Solo el root o el usuario con privilegios sudo pueden establecer y eliminar el indicador inmutable en un archivo.
Un archivo con un atributo inmutable:
- No se puede modificar, eliminar ni renombrar
- Nadie, incluido el usuario raíz, puede crear ningún enlace suave o fuerte.
- No se pueden escribir datos en el archivo
Vamos a crear un archivo vacío usando el comando táctil de la siguiente manera:
$ touch file1
Ahora veamos cómo enumerar los atributos del archivo usando lsattr
comando:
$ lsattr
-------------e-- ./nagios-cookbook-tutorial
-------------e-- ./chefdk_1.3.40-1_amd64.deb
-------------e-- ./file1
Agregue algo de contenido al archivo usando el comando echo:
$ echo "Test of i attribute" > file1
$ cat file1
Test of i attribute
Ahora podemos establecer un atributo inmutable usando +i
en el archivo (archivo1).
$ sudo chattr +i file1
$ lsattr
-------------e-- ./nagios-cookbook-tutorial
-------------e-- ./chefdk_1.3.40-1_amd64.deb
----i--------e-- ./file1
En los siguientes comandos, intentaremos agregar, eliminar tanto usando el usuario normal como el usuario sudo (raíz):
$ echo "Try to edit after set i attribute" >> file1
-bash: file1: Permission denied
$ sudo echo "Try to edit after set i attribute" >> file1
-bash: file1: Permission denied
$ rm -f file1
rm: cannot remove 'file1': Operation not permitted
$ sudo rm -f file1
rm: cannot remove 'file1': Operation not permitted
Podemos observar que sobre todas las operaciones no están permitidas.
/etc/passwd
o /etc/shadow
, los protege de una eliminación o manipulación accidental y también deshabilitará la creación de cuentas de usuario. Pero cuando intente crear un nuevo usuario del sistema, obtendrá un mensaje de error que dice 'no se puede abrir /etc/passwd'. Si intenta cambiar la contraseña, se le pedirá que ingrese una nueva contraseña, pero cuando inicie sesión la próxima vez, la nueva contraseña no parecerá válida, tendrá que usar la contraseña anterior para iniciar sesión.
2) Cómo eliminar atributos (no establecidos) en archivos
Para eliminar cualquier atributo del archivo, debemos usar -
operador seguido del nombre del atributo.
En el siguiente ejemplo, desactivemos el atributo inmutable del archivo (archivo1).
$ sudo chattr -i file1
$ lsattr file1
-------------e-- ./file1
Ahora debería poder realizar todas las operaciones normales en el archivo.
3) Cómo asegurar directorios con el atributo 'i'
Para asegurar el directorio, tenemos que establecer el atributo recursivamente (-R) usando +
operador.
El siguiente comando establecerá el bit inmutable en el directorio ('linoxide') recursivamente:
$ sudo chattr -R +i linoxide/
$ lsattr -d linoxide
----i--------e-- linoxide/
Para desarmar, debe usar -
operador seguido de i
atributo.
$ sudo chattr -R -i linoxide/
4) Agregar datos en el archivo sin cambiar los datos existentes
Es posible permitir que todos agreguen datos en un archivo sin cambiar o modificar los datos ya ingresados con el a
atributo.
Significa que solo puede agregar contenido en el archivo actual sin modificar los datos ya presentes.
Los siguientes ejemplos establecen un atributo adjunto al archivo (archivo2).
$ sudo chattr +a file2
6) Cómo listar atributos de archivos
Para listar los atributos actuales de archivos o directorios, tenemos que usar el comando lsattr. El siguiente comando mostrará una lista de atributos de archivo para todos los archivos y carpetas en el directorio actual:
$ lsattr
-------------e-- ./coreutils-8.22-18.el7.x86_64.rpm
-------------e-- ./pac
-------------e-- ./utils
-------------e-- ./linox
Puede verificar el atributo de archivo de uno solo usando el siguiente comando:
$ lsattr coreutils-8.22-18.el7.x86_64.rpm
-------------e-- coreutils-8.22-18.el7.x86_64.rpm
Para verificar los atributos de un directorio, use -d
opción
$ lsattr -d test
-------------e-- test/
Conclusión
Ahora sabemos cómo podemos proteger nuestros archivos y carpetas usando el comando chattr en Linux. Espero que hayan disfrutado leyendo este tutorial y dejen sus sugerencias en la sección de comentarios a continuación. Para obtener más información, consulte man chattr.