5 comandos 'chattr' para hacer que los archivos importantes sean INMUTABLES (inmutables) en Linux


chattr (Cambiar atributo) es una utilidad de línea de comandos de Linux que se utiliza para establecer/desarmar ciertos atributos de un archivo en el sistema Linux para asegurar la eliminación o modificación accidental de archivos y carpetas importantes, aunque esté registrado en como usuario root.

En los sistemas de archivos nativos de Linux, es decir, ext2, ext3, ext4, btrfs, etc., es compatible con todos los indicadores, aunque todos los indicadores no son compatibles con todos los FS no nativos. No se puede eliminar o modificar un archivo/carpeta una vez que los atributos se establecen con el comando chattr, aunque uno tenga permisos completos sobre él.

Esto es muy útil para establecer atributos en archivos del sistema como passwd y archivos shadow donde se encuentra la información del usuario.

# chattr [operator] [flags] [filename]

A continuación se muestra la lista de atributos comunes y los indicadores asociados que se pueden configurar/desarmar usando el comando chattr.

  1. If a file is accessed with ‘A‘ attribute set, its atime record is not updated.
  2. If a file is modified with ‘S‘ attribute set, the changes are updates synchronously on the disk.
  3. A file is set with ‘a‘ attribute, can only be open in append mode for writing.
  4. A file is set with ‘i‘ attribute, cannot be modified (immutable). Means no renaming, no symbolic link creation, no execution, no writable, only superuser can unset the attribute.
  5. A file with the ‘j‘ attribute is set, all of its information updated to the ext3 journal before being updated to the file itself.
  6. A file is set with ‘t‘ attribute, no tail-merging.
  7. A file with the attribute ‘d‘, will no more candidate for backup when the dump process is run.
  8. When a file has ‘u‘ attribute is deleted, its data are saved. This enables the user to ask for its undeletion.
  1. + : Adds the attribute to the existing attribute of the files.
  2. : Removes the attribute to the existing attribute of the files.
  3. = : Keep the existing attributes that the files have.

Aquí, vamos a demostrar algunos de los ejemplos del comando chattr para establecer/desarmar atributos en un archivo y carpetas.

1. Cómo agregar atributos a los archivos para evitar que se eliminen

Para fines de demostración, hemos utilizado la carpeta demo y el archivo important_file.conf respectivamente. Antes de configurar los atributos, asegúrese de verificar que los archivos existentes tengan algún atributo establecido mediante el comando "ls -l". ¿Viste los resultados? Actualmente no hay ningún atributo establecido.

[[email protected] tecmint]# ls -l
total 0
drwxr-xr-x. 2 root root 6 Aug 31 18:02 demo
-rwxrwxrwx. 1 root root 0 Aug 31 17:42 important_file.conf

Para establecer el atributo, usamos el signo + y para desarmar usamos el signo - con el comando chattr. Por lo tanto, establezcamos un bit inmutable en los archivos con indicadores + i para evitar que alguien elimine un archivo, incluso un usuario root no tiene permiso para eliminarlo.

[[email protected] tecmint]# chattr +i demo/
[[email protected] tecmint]# chattr +i important_file.conf

Nota: El bit inmutable + i solo puede ser configurado por un usuario superusuario (es decir, root) o un usuario con privilegios sudo puede configurarlo.

Después de configurar el bit inmutable, verifiquemos el atributo con el comando "lsattr".

[[email protected] tecmint]# lsattr
----i----------- ./demo
----i----------- ./important_file.conf

Ahora, intenté eliminar a la fuerza, renombrar o cambiar los permisos, pero no se permitió dice "Operación no permitida".

[[email protected] tecmint]# rm -rf demo/
rm: cannot remove âdemo/â: Operation not permitted
[[email protected] tecmint]# mv demo/ demo_alter
mv: cannot move âdemo/â to âdemo_alterâ: Operation not permitted
[[email protected] tecmint]# chmod 755 important_file.conf
chmod: changing permissions of âimportant_file.confâ: Operation not permitted

2. Cómo desarmar atributos en archivos

En el ejemplo anterior, hemos visto cómo establecer un atributo para proteger y evitar que los archivos se eliminen accidentalmente, aquí en este ejemplo, veremos cómo restablecer (deshabilitar el atributo) los permisos y permite hacer que un archivo se pueda cambiar o alterar usando - yo bandera.

[[email protected] tecmint]# chattr -i demo/ important_file.conf

Después de restablecer los permisos, verifique el estado inmutable de los archivos usando el comando "lsattr".

[[email protected] tecmint]# lsattr
---------------- ./demo
---------------- ./important_file.conf

Verá en los resultados anteriores que se eliminó la marca "-i", lo que significa que puede eliminar de forma segura todos los archivos y carpetas que residen en la carpeta tecmint.

[[email protected] tecmint]# rm -rf *

[[email protected] tecmint]# ls -l
total 0

3. Cómo proteger los archivos / etc / passwd y / etc / shadow

Establecer un atributo inmutable en los archivos /etc/passwd o /etc/shadow , los protege de una eliminación accidental o manipulación y también deshabilita la creación de cuentas de usuario.

[[email protected] tecmint]# chattr +i /etc/passwd
[[email protected]ecmint tecmint]# chattr +i /etc/shadow

Ahora intente crear un nuevo usuario del sistema, obtendrá un mensaje de error que dice "no se puede abrir/etc/passwd".

[[email protected] tecmint]# useradd tecmint
useradd: cannot open /etc/passwd

De esta manera, puede establecer permisos inmutables en sus archivos importantes o archivos de configuración del sistema para evitar su eliminación.

4. Agregar datos sin modificar los datos existentes en un archivo

Supongamos que solo desea permitir que todos agreguen datos en un archivo sin cambiar o modificar los datos ya ingresados, puede usar el atributo "a" de la siguiente manera.

[[email protected] tecmint]# chattr +a example.txt

[[email protected] tecmint]# lsattr example.txt
-----a---------- example.txt

Después de configurar el modo de agregar, el archivo se puede abrir para escribir datos solo en el modo de agregar. Puede desarmar el atributo adjuntar de la siguiente manera.

[[email protected] tecmint]# chattr -a example.txt

Ahora intente reemplazar el contenido ya existente en un archivo example.txt, obtendrá un error que dice "Operación no permitida".

[[email protected] tecmint]# echo "replace contain on file." > example.txt
-bash: example.txt: Operation not permitted

Ahora intente agregar contenido nuevo en un archivo example.txt existente y verifíquelo.

[[email protected] tecmint]# echo "replace contain on file." >> example.txt
[[email protected] tecmint]# cat example.txt
Here is the example to test 'a' attribute mean append only.
replace contain on file.

5. Cómo proteger directorios

Para proteger todo el directorio y sus archivos, usamos el interruptor "-R" (recursivamente) con el indicador "+ i" junto con la ruta completa de la carpeta.

[[email protected] tecmint]# chattr -R +i myfolder

Después de configurar el atributo recursivamente, intente eliminar la carpeta y sus archivos.

[[email protected] tecmint]# rm -rf myfolder/
rm: cannot remove 'myfolder/': Operation not permitted

Para desarmar el permiso, usamos el mismo interruptor "-R" (recursivamente) con el indicador "-i" junto con la ruta completa de la carpeta.

[[email protected] tecmint]# chattr -R -i myfolder

¡Eso es! Para saber más sobre los atributos, banderas y opciones del comando chattr, use las páginas de manual.