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 como usuario root.

En los sistemas de archivos nativos de Linux, es decir, ext2, ext3, ext4, btrfs, etc., admite todas las banderas, aunque todas las banderas no son compatibles con todos los FS no nativos. No se puede eliminar o modificar un archivo/carpeta una vez que se establecen los atributos 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 en los que 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. Si se accede a un archivo con el conjunto de atributos "A", su registro de hora no se actualiza.
  2. Si un archivo se modifica con el conjunto de atributos "S", los cambios se actualizan sincrónicamente en el disco.
  3. Un archivo está configurado con el atributo "a", solo se puede abrir en el modo de adjuntar para escritura.
  4. Un archivo está configurado con el atributo "i", no se puede modificar (inmutable). Significa que no se cambia el nombre, no se crea un enlace simbólico, no se ejecuta, no se puede escribir, solo el superusuario puede desarmar el atributo.
  5. Se establece un archivo con el atributo "j", toda su información se actualiza al diario ext3 antes de actualizarse al archivo en sí.
  6. Un archivo se configura con el atributo "t", sin fusión de cola.
  7. Un archivo con el atributo "d", ya no será candidato para la copia de seguridad cuando se ejecute el proceso de volcado.
  8. Cuando se elimina un archivo con el atributo "u", sus datos se guardan. Esto permite al usuario solicitar su cancelación.

  1. + : agrega el atributo al atributo existente de los archivos.
  2. - : elimina el atributo del atributo existente de los archivos.
  3. u003d : Conserve los atributos existentes que tienen los archivos.

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 configurar 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 de 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] 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 que se eliminen.

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 diga "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 el directorio completo 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.