viernes, 31 de julio de 2015

Importancia del comando chattr en servidores GNU-Linux

                                                       (p) Hugo Napoli, 2015                                                     

Protección de directorios en servidores GNU-Linux: un simple comando que todo lo puede.

El comando "chattr" (de "change attribute" -en Español, "cambiar atributo"-) permite modificar las propiedades que poseen, tanto los archivos individuales, como los directorios, ya sea que estén estos vacíos o llenos.

Su función principal es establecer permisos de lectura y escritura, para que distintos usuarios con diferentes niveles de jerarquía dentro del sistema, puedan efectuar diferentes acciones sobre los archivos o directorios, dependiendo de reglas preestablecidas. Por ejemplo, el usuario root podría crear y eliminar directorios, pero los usuarios "comunes", "no administradores" o los del tipo "users", podrían únicamente leer y copiar, pero no mover, cortar ni eliminar archivos ni directorios.

De todos modos, seamos usuarios administradores o no, el comando chattr puede manejar reglas firmes y sólidas, incluso para que también sean respetadas por usuarios administradores o "roots".

Lo que pretendo demostrar, es que si aplicamos este comando en su sintaxis correcta, y en los directorios correctos (posee función recursiva), evitaremos el borrado accidental o voluntario, tanto de archivos como de directorios completos.
Muy útil para servidores Linux... ¿o no?




Utilización del comando chattr sobre archivos de cualquier tipo.

Para impedir el borrado accidental de un archivo, debemos ejecutar desde una terminal "root":

chattr +a [nombre del archivo o ruta hacia él]

Ejemplo:
chattr +a Planilla.ods

(la "a" proviene de "append", es decir, "poder agregar, pero no borrar ni modificar")

Dicho archivo, entonces, podrá ser leído, pero no modificado o borrado.

Para deshacer esta acción (volver a permitir la modificación, borrado, etc.), utilizamos

chattr -a [nombre del archivo o ruta hacia él]


Ejemplo:
chattr -a Planilla.ods


Ahora bien, las posibilidades de querer proteger un solo archivo, o algunos pocos archivos dentro de un servidor Linux, sabemos que son muy escasas.
La necesidad se presenta generalmente cuando nos enfrentamos a la situación de la creación o el mantenimiento de un servidor Linux de aula, en donde poseemos tantos directorios de alumnos como máquinas existan en la institución.
Personalmente, trabajo en varias instituciones educativas haciendo mantenimiento informático, y a todas les he "regalado" un servidor Puppy Linux.
A todas les he aplicado el comando chattr en el mismo directorio: el de los estudiantes.
Ellos pueden crear carpetas y archivos de todo tipo, pero no los pueden borrar.
Tampoco pueden borrar las carpetas o directorios preexistentes (es decir creados por el administrador del sistema).
¿Qué sucederá entonces, cuando guarden una planilla de cálculo o un documento de texto, una imagen de Gimp o Photoshop para ser modificada luego, etc.?
Lo que sucederá, será lo siguiente:

El estudiante trabajará en el aula. Guardará su trabajo una vez. Al pretender guardarlo nuevamente, el sistema le dirá "no se puede guardar el archivo, porque ha sido guardado como de solo lectura. Guarde una copia del mismo" o mensajes por el estilo, y el estudiante se verá obligado a guardar una copia de su propio trabajo cada vez que necesite hacerlo.

Ventajas: el profesor podrá apreciar la evolución del trabajo de sus estudiantes, la cantidad de veces que el archivo ha sido guardado (es una excelente práctica el guardar el trabajo cada 5 o 10 minutos, y el docente podrá insistir sobre esto en los casos en que crea que corresponda).

Desventajas: se desaprovecha el espacio en disco. Un solo trabajo puede quedar guardado entre 5 y 10 veces en la mayoría de los casos, multiplicándose la información y volviendo redundante a la tarea del guardado de archivos.

Pese a su desventaja, hay ventajas que están por encima de este tipo de situación: evitar el borrado, voluntario o no, de archivos y directorios, justifica con creces cualquier desventaja del comando que estamos describiendo.





Utilización del comando chattr sobre directorios vacíos o llenos.


Para conseguir esto, solamente hay que añadir el parámetro "-R" ("Recursive" -en Español "Recursivo") a nuestro comando.


Para impedir el borrado accidental de un directorio, debemos ejecutar desde una terminal "root":


chattr -R +a [nombre del directorio o ruta hacia él]


Ejemplo:
chattr -R +a Directorio_de_red


Para deshacer esta acción (volver a permitir la modificación, borrado, etc.), utilizamos

chattr -R -a Directorio_de_red

NOTA: el "-a", indica "quitar inmutabilidad", mientras que el "+a" significa activarla, pero "-R" no significa "quitar recursividad". Algo confuso, ¿no? Pero... ¿se entiende?




Otras funcionalidades del comando chattr: impedir el guardado, la modificación y el borrado.

Para crear directorios de "solo lectura", poseemos el parámetro "i" (immutable, en Español "inmutable", "fijo", "inalterable"):

chattr +i: permite leer, pero no borrar, guardar ni modificar.

chattr -R +i: función recursiva que permite lo aclarado inmediatamente arriba

-i: desactiva lo anteriormente citado




Comodines en el comando chattr: ¡el tan ansiado asterisco!

El comando chattr, puede ser utilizado en combinación con el asterisco, para aplicar el comando a un directorio determinado, incluyendo a sus archivos y subdirectorios internos:

chattr -R -a *
chattr -R +a *




Fuentes consultadas:

http://lamiradadelreplicante.com/2013/01/06/evitar-el-borrado-accidental-de-archivos-en-gnulinux-con-chattr/

http://www.alcancelibre.org/staticpages/index.php/como-chattr

http://www.tecmint.com/chattr-command-examples/