¿Borrado accidental de ficheros críticos en Linux? Prueba a aplicar atributos de fichero

El sistema de permisos de escritura, lectura, ejecución y bits especiales como SUID, GUID o sticky bit suelen acaparar la mayor parte de la atención a la hora de administrar ficheros en sistemas Linux. No obstante también contamos con los atributos de fichero que nos pueden ayudar a personalizar la gestión y securización del sistema.

Paquete necesario: e2fsprogs

Las utilidades de atributos dependen del paquete e2fsprogs. En este caso estoy trabajando con Debian por lo que compruebo con:

root@debian7testing:~# dpkg -l | grep e2fsprogs
ii  e2fsprogs                             1.42.5-1.1                    amd64        ext2/ext3/ext4 file system utilities

En caso de no tenerlo, procedemos a instalarlo:

root@debian7testing:~# apt-get install e2fsprogs

Posible escenario: ficheros críticos que deben ser protegidos

Protegeremos mediante el atributo de inmutabilidad los ficheros que cumplan las siguientes características:

  • Aquellos que no varíen, por lo que quedan descartados ficheros de log o que tengan contenido dinámico.
  • Ficheros de extrema importancia: configuración de sistema, servidores en particular, etc … que vayan a permanecer sin cambios a largo plazo. Para realizar cualquier cambio, habría que retirar el atributo de inmutabilidad.

A modo de ejemplo, vamos a proteger los ficheros del directorio /etc/apache2, que únicamente contiene ficheros de configuración del servidor web Apache.

Listar atributos de fichero

Utilizaremos el comando lsattr:

root@debian7testing:/etc/apache2# lsattr
-------------e-- ./sites-enabled
-------------e-- ./mods-enabled
-------------e-- ./conf.d
-------------e-- ./ports.conf
-------------e-- ./sites-available
-------------e-- ./apache2.conf
-------------e-- ./mods-available
-------------e-- ./envvars
-------------e-- ./magic

No hay ningún atributo aplicado (no os preocupéis por la “e”).

Aplicar atributo de inmutabilidad

En el mismo directorio, aplicaremos los atributos con el comando chattr:

root@debian7testing:~# chattr -R +i ./*

Donde:

  • -R: recursivo, aplica también el atributo al contenido de subdirectorios
  • +i: activa el atributo inmutable

Errores en la aplicación de atributos: enlaces simbólicos

Si observamos errores del tipo:

chattr: Operation not supported while reading flags on apache2//mods-enabled/reqtimeout.load

Se deben a que esos ficheros son enlaces simbólicos. A los enlaces no se les puede aplicar atributos, pero sí al objetivo al que apuntan. Así, vemos el enlace simbólico en el directorio mods-enabled:

lrwxrwxrwx 1 root root 33 Aug  4 10:25 reqtimeout.load -> ../mods-available/reqtimeout.load

/mods-available/reqtimeout.load es el objetivo del enlace simbólico, y a ese objetivo sí se le aplican atributos.

Comprobación de atributos

Comprobamos los atributos aplicados:

root@debian7testing:/etc/apache2# lsattr 
----i--------e-- ./sites-enabled
----i--------e-- ./mods-enabled
----i--------e-- ./conf.d
----i--------e-- ./ports.conf
----i--------e-- ./sites-available
----i--------e-- ./apache2.conf
----i--------e-- ./mods-available
----i--------e-- ./envvars
----i--------e-- ./magic

Por otro lado intentaremos borrar un fichero, incluso siendo root:

root@debian7testing:/etc/apache2# rm -rf ports.conf 
rm: cannot remove `ports.conf': Permission denied

Y añadir contenido a un fichero:

root@debian7testing:/etc/apache2# echo "prueba" >> ports.conf 
-su: ports.conf: Permission denied

Para retirar los atributos, realizaríamos:

chattr -R -i ./*

Como vemos, una manera sencilla de implementar algo más de seguridad a ficheros de sistema críticos sin necesidad de complicarnos demasiado la vida y que además nos puede salvar de algún que otro borrado accidental por error humano.