En el sistema de ficheros
ext2 (
Second Extended File System) de Linux existen ciertos atributos para los ficheros que pueden ayudar a incrementar la seguridad de un sistema. Estos atributos son los mostrados en la tabla
4.1∞.
Tabla 4.1: Atributos de los archivos en
ext2fs.|| || Atributo || Significado || || A || Don´t update
Atime || || S ||
Synchronous updates || || a ||
Append only || || c ||
Compressed file || || i ||
Immutable file || || d || No
Dump || || s ||
Secure deletion || || u ||
Undeletable file || ||
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 el que más - es
`a'; tan importante es que sólo el administrador tiene el privilegio suficiente para activarlo o desactivarlo. El atributo
`a' sobre un fichero indica que este sólo se puede abrir en modo escritura para añadir datos, pero nunca para eliminarlos. >Qué tiene que ver esto con la seguridad? Muy sencillo: 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 a 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 vea 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 - borrar - en los ficheros (en la mayoría de Unices para realizar esta tarea se necesita ser
root), simplemente ha de resetear 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 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/ (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 a 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 sen enlazados, lo que puede ser problemático en algunas variantes de Linux que utilizan enlaces duros para la configuración de los ficheros 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 recuperarlo; realmente, para un pirata experto esto no supone ningún problema, simplemente un retraso en sus propósitos: en el punto
4.7∞ se trata más ampliamente la amenaza de la recuperación de archivos, y también ahí se comenta que un simple relleno de bloques mediante
bzero() no hace que la información sea irrecuperable.
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 ciertas circunstancias un fichero de
log puede perder información que aún no se haya volcado a disco: imaginemos por ejemplo que alguien 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 - además, ya hemos hablado de las ventajas de instalar un S.A.I. -, si nuestro sistema se apaga frecuentemente sí que nos puede interesar activar el bit
`S' de ciertos ficheros importantes.
Ya hemos tratado los atributos del sistema de ficheros
ext2 que pueden incrementar la seguridad de 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 estado. Para lo primero utilizamos 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 de fichero 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 fichero o un signo
- en el caso de que el atributo no esté activado:
luisa:~# lsattr /tmp/fichero
/tmp/fichero
luisa:~# chattr +a /tmp/fichero
luisa:~# chattr +Ss /tmp/fichero
luisa:~# lsattr /tmp/fichero
s--S-a-- /tmp/fichero
luisa:~# chattr -sa /tmp/fichero
luisa:~# lsattr /tmp/fichero
S
/tmp/fichero
luisa:~#