chattr: La máxima protección a archivos/carpetas en Linux mediante atributos o flags

Bueno… no todo pueden ser juegos, no es mi intención solo publicar posts hablando de juegos 😉 … yo no soy un usuario que juegue mucho, en casa eso se lo dejo a mi novia (que ahora está enganchada a los Sims 4), es por eso que me motiva más publicar artículos más técnicos, sobre comados o tips en terminal.

En Linux tenemos unos permisos que ciertamente resuelven casi cualquier problema, podemos determinar qué usuario o grupo de usuarios tienen acceso a determinado recurso, carpeta, servicio. No obstante, hay ocasiones en que los permisos no son exactamente lo que necesitamos, pues hay situaciones en que deseamos que ni siquiera root pueda hacer determinada acción.

Supongamos que tenemos una carpeta o archivo que no deseamos que se borre, vamos… ni por nuestro usuario, ni por otro en el ordenador (ehm… mi novia por ejemplo jaja), o bien, que ni siquiera root pueda borrarlo, ¿cómo lograr esto? … los permisos no nos servirán pues root es the-fucking-master, él podrá borrar cualquier cosa, entonces, ahí es donde entran los atributos de archivos o carpetas.

chattr +i

Supongamos que deseamos proteger un archivo para que no pueda ser borrado, el mismo es: passwords.txt ,su ubicación es (por ejemplo) $HOME/passwords.txt

Para establecerle un atributo de solo lectura (o sea, no modificación y no borrado) sería:

sudo chattr +i $HOME/passwords.txt

Como ven necesitamos permisos de administración para el parámetro +i, que dicho sea de paso, +i significa que el archivo será inmutable, ya saben, no se podrá eliminar, no podrá cambiar en ningún sentido.

Luego, pueden intentar eliminar el archivo, inclusive usando sudo… verán que no podrán, aquí les dejo un screenshot:

Para listar o ver los atributos que tenga un archivo podemos usar el comando lsattr, por ejemplo:

lsattr passwords.txt

Luego, para quitarle la protección en vez de usar +i usamos -i y listo 😉

chattr +a

Como acabamos de ver el parámetro +i nos permite protegerlo por completo, pero han habido ocasiones en que necesito que determinado archivo pueda ser modificado, PERO sin alterar su contenido original. Por ejemplo, tengo un listado y deseo que se puedan agregar nuevas líneas e información mediante echo, pero sin alterar las anteriores, para ello:

sudo chattr +a $HOME/passwords.txt

Una vez hecho esto, intentemos escribir algo nuevo en el archivo:

echo "Prueba" > $HOME/passwords.txt

Notarán que les aparece un error … sin embargo, si agregamos contenido en vez de reemplazar (usando >> y no>) :

echo "Prueba" >> $HOME/passwords.txt

Aquí sí que podemos.

Fin!

Sé que alguien conocedor cuando vea que ni siquiera con root puede eliminar/modificar un archivo podría revisar sus atributos… pero, eh! … ¿cuántas veces que notas algo así te detienes a pensar en atributos? … lo digo porque generalmente pensamos simplemente que el HDD o el sector del mismo está corrupto, o que el sistema simplemente enloqueció 😀

Bueno no hay mucho más que agregar… creo que usaré esto del +i para detener la descarga de algo que mi novia esté bajando… ¬_¬ … ehm … ¿no que ella quería descargar Sims 4 gratis? … creo que le enseñaré una cosa o dos sobre licencias y que no deben ser violadas 😀

Saludos!


10 comentarios

  1.   ceso dijo

    Interesante para saber de esta herramienta, lo que si me causa algo de curiosidad, en cierta forma no seria algo similar a los permisos de bit? Es decir setuid, setgid y sticky bit? Si no es así, por que? O.o

    PD: perdí la cuenta de las veces que dices mi novia en este articulo jajaja

    1.    Hugo dijo

      Pues este también es un bit, el bit de la immutabilidad, y está diseñado para que nadie pueda modificar o eliminar el archivo al que se aplique (ni siquiera el root). Yo lo uso por ejemplo para proteger contra escritura archivos de configuración, lo cual es especialmente útil en distribuciones como Zentyal (es una forma mucho más rápida de personalizar la configuración que editando o creando plantillas).

      Combinando este comando con chown, chmod y setfacl, pueden lograrse cosas interesantes.

      FreeBSD tiene algo parecido, que también uso para mi pfSense.

    2.    juan dijo

      Jajaja es una fase conocida.
      http://www.xkcd.
      com/684/

  2.   niandekuera dijo

    [Dr. Bolivar Trask]$ sudo chattr +i *.human

  3.   Tesla dijo

    Muy buena orden. No la conocía.

    Puede ser muy útil si compartimos un PC o si tenemos cierto documento en el que estamos trabajando que no queremos borrar por nada del mundo.

    Gracias y un saludo!

  4.   Luis dijo

    Muy interesante.

    ¿Se podría realizar algo parecido para que ROOT no pueda acceder a determinada carpeta de nuestra home?

    1.    Tesla dijo

      Según el artículo, con este comando ni siquiera root puede acceder al archivo. Supongo que lo mismo aplica a carpetas, puesto que en Linux las carpetas también son archivos, no?

  5.   Joaquin dijo

    Qué casualidad. Este fin de semana intenté borrar una partición raíz y no pude borrar una archivo del directorio /boot. Buscando me encontré con los atributos, que sinceramente no los conocía y ahora entiendo que el tema de los permisos y atributos en un archivo es muy grande. Éste es uno de esos comandos imprescindibles que debemos conocer, junto a “chmod” y “chown”.

  6.   aguatemala dijo

    Esto es de extrema utilidad, sobre todo si, por ejemplo, deseamos cambiar los DNS por defecto de nuestro respectivo ISP, y es cuando debemos modificar el archivo /etc/resolv.conf y para poder hacer esto debemos hacer chattr -i /etc/resolv.conf, modificar las IP’s que aparecen por las de nuestro DNS gratis y/o libre (como los de OpenDNS 208.67.222.222 y 208.67.220.220 o bien los de Google 8.8.8.8 y 8.8.4.4) y luego de haber modificado el archivo hacer de nuevo chattr +i /etc/resolv.conf para que el archivo no se nos modifique al arrancar la máquina.
    Gran artículo… y por cierto, tu novia es como mi esposa, igual de adicta a los juegos, jajajajaja

  7.   rawBasic dijo

    Claramente ‘the-fucking-master’ es tu novia en esta situación. xD

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.