En esta nueva publicación en mi Blog, os enseñaré de una forma muy rápida como impedir que tanto ficheros como directorios sean borrados accidental ó intencionadamente. Solamente necesitamos un equipo con GNU/Linux en cualquiera de sus "sabores" para poder probar y practicar lo que os indique en este artículo. Es un tutorial muy sencillo y el nivel de conocimiento/experiencia para llevarlo a cabo es prácticamente cero por tanto no tengas miedo de hacerlo mal o equivocarte.
⬇️ Compra en Amazon el hardware que utilizo ⬇️
- 💻 Ordenador Portátil: Descúbrelo aquí
- 🖥️🖥️ Monitores: Mis 2 súper monitores
- ⌨️ Teclado: Mini teclado + Lector DNIe
- 🖱️ Ratón: Mi ratón programable
- 🎧 Auriculares: Súper Auriculares TOP!
- 🖨️ Impresora: Mi fantástica impresora
- 🗄️ NAS Backup: Mi NAS para Backups
- 🔌 HUB USB: Mi HUB para puertos USB
- 📱 Smartphone: Mi Smartphone
- 📲 Tablet: Mi tablet para viajes
- ⌚ Smartwatch: Mi Smartwatch favorito
- 📹 Cámara deportiva: Mi cámara para deportes
Os voy a explicar muy brevemente como crear y modificar un fichero y/o directorios para que ningún usuario del sistema, ni siquiera root puedan borrarlos.
Cualquier duda, problema ó sugerencia, podéis dejar un comentario abajo del tutorial. ¡Allá vamos!
1.- ELEMENTOS UTILIZADOS EN ESTE TUTORIAL
- GNU/Linux Debian 8 64bits
2.- EL COMANDO CHATTR
El comando para conseguir que un fichero esté a salvo incluso del borrardo con privilegios de root, es chattr. Tiene multitud de parámetros los cuales se aplican con el símbolo "+" delante de ellos y se desactivan con el símbolo "-" delante. ara ver estos atributos especiales es necesario el comando lsattr:
Los parámetros que admite chattr son:
a : Append Only
A : Do not update Atime
c : Compressed Attribute
C : No copy-on-write
d : No dump
D : Sychronous Directory Update
e : Extents
E : Experimental Attribute
i : Immutable
I : Directory is being indexed
j : Data journaling
s : Secure deletion
S : Sychronous Update
t : No tail merging
T : Top of directory Hierachy
u : Undeletable
3.- PROBANDO EL COMANDO
Crearemos un fichero y un directorio con los permisos normales como se ve a continuación:
Creación de fichero y directorio
Si queremos ver los atributos especiales, ejecutaremos lsattr para poder visualizarlos:
# lsattr
Atributos por efecto
Para "convertir" un fichero y/ó directorio a inmutable, deberemos ejecutar chattr +i
# chattr +i /tutorial_chattr/fichero_de_pruebas.txt
# chattr +i /tutorial_chattr/directorio_pruebas
Ahora si visualizamos los atributos especiales con lsattr, podemos ver como el atributo "i" está activo:
Atributos con +i
Si usamos el comando "ls" normal, dichos atributos especiales no sale y no podemos verlos. En la imagen siguiente se puede ver que tanto el fichero como el fichero pertenecen al usuario root y grupo root:
Propietario, grupo y permisos del fichero y directorio
Ahora viene la prueba de fuego: ¿qué sucede si intentamos borrar un fichero de root, pero es inmutable? La respuesta es sencilla, ni siquiera root puede borrar dicho fichero/directorio:
Intentando borrar un fichero inmutable con root
Si quitamos el atributo de inmutable, y probamos a borrar, veremos como si nos deja borrarlo:
# chattr -i /tutorial_chattr/fichero_de_pruebas.txt
# chattr -i /tutorial_chattr/directorio_pruebas
Borrando el mismo fichero sin atributo de inmutable
Este procedimiento podemos aplicarlo tanto a ficheros como directorios.
4.- APLICACIÓN EN EL MUNDO REAL
A modo de ejemplo, os puedo comentar que en la versión de Transmission (torrent) de Raspbian de mi Raspberry Pi, cada vez que el equipo se reinicia o el servicio Transmission, el fichero de configuración pierde los valores configurados manualmente. Para evitar esto simplemente he convertido el fichero de configuración a inmutable y el proceso de Transmission ya nunca podrá sobreescribir mis cambios manuales del fichero de configuración.
ENJOY!