Sticky bit: otro permiso especial

Además de SUID y SGID, existe otro permiso especial del que hablaremos en esta oportunidad: el sticky bit. Nos basaremos en el man page de chmod, en el cual aparecen la definición y las aclaraciones necesarias sobre este permiso especial. Sin más demora, ¡veamos de qué se trata!

Sticky bit

En un sistema Linux pueden existir directorios en los que TODOS los usuarios del sistema pueden crear, modificar, y borrar archivos. Como ejemplos, podemos nombrar a /tmp y a cualquier directorio compartido (pensemos por ejemplo en el espacio común al que pueden acceder varios usuarios en un servidor FTP).

El sticky bit aplicado a un directorio es un permiso especial que hace que solamente el propietario de un archivo contenido en el mismo (o root) puedan borrarlo. Para probar, crearemos el directorio /comun y le daremos permisos del tipo 777:

mkdir /comun
chmod 777 /comun

A continuación, el usuario gacanepa creará un archivo llamado ejemplogabriel.txt dentro de /comun:

touch /comun/ejemplogabriel.txt

Si el usuario alumno intenta borrar dicho archivo, podrá hacerlo sin inconveniente:

rm /comun/ejemplogabriel.txt

Podemos ver todas las operaciones anteriores en la Fig. 1 a continuación:

Borrar archivos de directorios que NO posean el sticky bit
Figura 1 – Borrar archivos de directorios que NO posean el sticky bit

Por otra parte, si intentamos hacer lo mismo pero habiendo colocado el sticky bit:

chmod 1777 /comun
touch /comun/ejemploconsticky.txt
rm /comun/ejemploconsticky.txt

Como podemos observar en la Fig. 2, esta vez el usuario alumno no pudo borrar un archivo que no sea de su propiedad, aun cuando el directorio padre tenga permisos completos.

El sticky bit en acción
Figura 2 – El sticky bit en acción

Cabe aclarar que no es estrictamente necesario que un directorio tenga permisos 777 para poder colocar el sticky bit. Basta con utilizar un directorio (con permisos 755) propiedad de cierto grupo y realizar las mismas pruebas anteriores con dos usuarios que pertenezcan a dicho grupo. Los resultados deberían ser idénticos a los que hemos observado en los ejemplos de este post.

Espero que este post les haya resultado útil. ¡Nos leemos en breve!