En el sistema de ficheros ext2 y ext3 de GNU/Linux existen ciertos atributos para los archivos que pueden ayudar a incrementar la seguridad de un sistema. De todos ellos, de cara a la seguridad algunos no nos interesan demasiado, pero otros sí que se deben tener en cuenta. Uno de los atributos interesantes quizás es a. Tan importante es que sólo el administrador tiene el privilegio suficiente para activarlo o desactivarlo. El atributo a sobre un archivo indica que es sólo puede abrir en modo escritura para añadir datos, pero nunca para eliminarlos. ¿En qué influye esto con la seguridad?
Es simple, cuando un intruso ha conseguido el privilegio suficiente en un sistema atacado, lo primero que suele hacer es borrar sus huellas. Para esto existen muchos programas (denominados zappers, rootkits…) que, junto con otras funciones, eliminan estructuras de ciertos ficheros de log como lastlog, wtmp o utmp. Así consiguen que cuando alguien ejecute last, who, users, w o similares, no vean ni rastro de la conexión que el atacante ha realizado a la máquina. Evidentemente, si estos archivos de log poseen el atributo a activado, el pirata y sus programas lo tienen más difícil para borrar datos de ellos.
Ahora viene la siguiente cuestión, si el pirata ha conseguido el suficiente nivel de privilegio como para poder escribir y borrar en los ficheros (en la mayoría de UNIXs para realizar esta tarea se necesita ser root), simplemente ha de resetar el atributo a del archivo, eliminar los datos comprometedores y volver a activarlo.
Obviamente, esto es así de simple, pero siempre hemos de recordar que en las redes habituales no suelen ser atacadas por piratas con un mínimo nivel de conocimientos, sino por los intrusos más novatos de la red, tan novatos que generalmente se limitan a ejecutar programas desde sus flamantes Windows sin tener ni la más remota idea de lo que están haciendo en UNIX, de forma que una protección tan elemental como un fichero con el flag a activado se convierte en algo imposible de modificar para ellos, con lo que su acceso queda convenientemente registrado en el sistema.
Otro atributo del sistema de archivos ext2 y ext3 es i (fichero inmutable). Un archivo con este flag activado no se puede modificar de ninguna forma, ni añadiendo datos ni borrándolos, ni eliminar el archivo, ni tan siquiera enlazarlo mediante ln. Igual que sucedía antes, sólo el administrador puede activar o desactivar el atributo i de un fichero. Podemos aprovechar esta característica en los archivos que no se modifican frecuentemente, por ejemplo muchos de los contenidos en /etc (en donde se encuentran ficheros de configuración, scripts de arranque…, incluso el propio fichero de contraseñas si el añadir o eliminar usuarios tampoco es frecuente en nuestro sistema); de esta forma conseguimos que ningún usuario pueda modificarlos incluso aunque sus permisos lo permitan. Cuando activemos el atributo i en un archivo hemos de tener siempre en cuenta que el archivo no va poder ser modificado por nadie, incluido el administrador, y tampoco por los programas que se ejecutan en la máquina; por tanto, si activáramos este atributo en un fichero de log, no se grabaría ninguna información en él, lo que evidentemente no es conveniente.
También hemos de recordar que los archivos tampoco van a poder ser enlazados, lo que puede ser problemático en algunas variante de GNU/Linux que utilzan enlaces duros para la configuración de los ficheron de arranque del sistema. Atributos que también pueden ayudar a implementar una correcta política de seguridad en la máquina, aunque menos importantes que los anteriores, son s y S. Si borramos un archivo con el atributo s activo, el sistema va a rellenar sus bloques con ceros en lugar de efectuar un simple unlink, para así dificultar la tarea de un atacante que intente recupearlo; realmente, para un pirata experto esto no supone ningún problema, simplemente un retraso en sus propósitos.
Por su parte, el atributo S sobre un fichero hace que los cambios sobre el archivo se escriban inmediatamente en el disco en lugar de esperar el sync del sistema operativo. Aunque no es lo habitual, bajo cierta circunstancias un fichero de log puede perder información de aún no se haya volcado a disco. imaginemos por ejemplo que alguien se conecta al sistema y cuando éste registra la entrada, la máquina se apaga súbitamente; toda la información que aún no se haya grabado en disco se perderá. Aunque como decimos, esto no suele ser habitual, si nuestro sistema se apaga frecuentemente sí que nos puede interesar activar el bit S de ciertos ficheros importantes. Ya hemos tratados los atributos del sistema de ficheros ext2 y ext3 que pueden incrementar la seguridad de GNU/Linux; vamos a ver ahora, sin entrar en muchos detalles (recordemos que tenemos a nuestra disposición las páginas del manual) cómo activar o desactivar estos atributos sobre ficheros, y también cómo ver su esstado.
Para lo primero utilizaremos la orden chattr, que recibe como parámetros el nombre del atributo junto a un signo + o -, en función de si deseamos activar o desactivar el atributo, y también el nombre del archivo correspondiente. Si lo que deseamos es visualizar el estado de los diferentes atributos, utilizaremos lsattr, cuya salida indicará con la letra correspondiente cada atributo del archivo o un signo – en el caso de que el atributo no esté activado.
Formato del mandato chattr
chattr [-RV] +-=[AacDdijsSu] [-v versión] archivos
La opción R cambia recursivamente los atributos de los directorios y sus contenidos. El operador = hace que solamente hayan los atributos especificados.
Atributos
El atributo A hace que la fecha del último acceso en el archivo no sea modificada. El atributo D cuando se trata de un directorio, establece que los datos se escriben inmediatamente en lugar de esperar la operación correspondiente del sistema operativo. Es equivalente a la opción dirsync del comando mount, pero aplicada a un conjuntos de archivos. Este atributo trabaja igual que el atributo S, con la diferencia de que este último trabaja sobre archivos y el pirmero en sobre directorios.
El atributo j en sistemas de archivos ext3, cuando se montan con las opciones data=ordered o data=writeback, se establece que el archivo será escrito el registro diario (Journal). Si el sistema de archivos se monta con la opción data=journal, todo el sistema de archivos se escribe en el registro por diario y por tanto el atributo no tiene efecto.
En atributo u cuando un archivo con este atributo es eliminado, sus contenidos son guardados permitiendo recuperar el archivo con alguna herramienta para tal propósito.
Ejemplos
El siguiente ejemplo lista los atributos del archivo prueba.txt
lsattr prueba.txt
– – – – – – – – – – – – – – prueba.txt
chattr +a prueba.txt
Si volvemos a listar los atributos del archivo, obtendremos la siguiente salida
lsattr prueba.txt
– – – – – a – – – – – – – – prueba.txt
Para eliminar el modo de solo adjuntar del ejemplo anterior, solo tenemos que ejecutar lo siguiente
chattr -a prueba.txt
Ahora en el siguiente mandato se establecerá que el archivo se le agregará los atributos S y s
chattr +Ss prueba.txt
Y posteriormente al listar sus atributos obtenermos lo siguiente
lsattr prueba.txt
s – S – – – – – – – – – – – prueba.txt
El siguiente mandato le agrega el atributo inmutable al archivo prueba.txt
chattr +i prueba.txt
Fuente: Libro Permisos Especiales, Hamnlet Rivera (FCLD)