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.