Permisos Unix: Los bits SUID, SGID y sticky

Hola hoy escribiré sobre más permisos, esta vez será sobre los bits Sticky, SUID y SGID. Hablaré sobre ellos porque un seguidor solicitó que escribiera más sobre permisos, en particular estos.

Bit Sticky

El bit Sticky lo que hace es que al ejecutar una aplicación esta resida en memoria por lo que si otro usuario (pensando en sistema multiusuario) accede a esa misma aplicación se ejecutará más rápido ya que se encuentra activo en la memoria.
Entonces este permiso sirve para agilizar las ejecuciones en caso de que varios usuarios accedan a la vez a ella.

Bit SUID

Si aplicamos el bit SUID a una aplicación al correrlo se ejecutará con el UID del dueño del archivo aunque nosotros estemos logueados con un usuario distinto. Así que por ejemplo si necesitamos que todos los usuarios puedan utilizar fdisk sin tener que escalar a root o utilizar sudo sólo debemos aplicar este bit.

Bit SGID

Lo mismo que SUID pero aplica para el grupo al que pertenece la aplicación.


El bit SUID para ejecutar bash scripts como root

A pesar de que al aplicar SGID podemos ejecutar aplicaciones con un usuario diferente al que estamos logueados, hay cosas que de todas formas no podemos hacer aunque sea root el dueño del script.

Primero que todo para que un script se ejecute como root tendríamos que aplicar el bit SUID al shell que utilizamos para ejecutar los scripts ya que la aplicación en este caso es el shell, el script sólo es un archivo que será interpretado por el shell.

Comandos especiales como adduser no pueden ser ejecutados por cualquier otro usuario aunque tengan el SUID de root. Por lo tanto tampoco funcionaría un script que mande ejecutar adduser a pesar de que el shell sea SUID. Sino me creen pruebenlo ;) incluso le puse SUID root a mi shell, a adduser, a mi archivo .sh que mandaba ejecutar adduser y no lo permite.


El bit SUID y GTK+

GTK no soporta el uso de SUID o SGID. Por lo tanto si se intenta correr una aplicación basada en GTK con alguno de estos bits la ejecución mostrará una alerta y no iniciará.


¿Entonces en que se pueden usar estos bits?

Se puede utilizar para crear scripts que escriban archivos sobre directorios en los cuales otros usuarios no tienen permisos. Por ejemplo que cualquier usuario pueda mandar a crear un archivo a la carpeta personal de root.
O como mencioné anteriormente alguna aplicaciones si son posibles de usarse con SUID y SGID como fdisk.

Y tal vez ahora se preguntan bueno un script para mandar a escribir en /root, ¿Pero qué no habías dicho también que para que esto funcione se tiene que hacer que el shell sea el que tenga el bit SUID? Bueno hacer esto puede ser inseguro, el hacer que el shell siempre se ejecute como root quien quiera que sea el que lo utilice, pero hay un pequeño truco para que funcione sin hacer todo el shell root.

Sólo hay que copiar nuestro shell a otro directorio y ya en esa copia del shell aplicamos el SUID para que el shell original no sea siempre ejecutado por root. Ya después apuntamos nuestro sh hacia este shell.
De todas formas no es recomendable permitir tanto poder para correr scripts, pero si puede facilitar muchas cosas si el servidor o equipo donde se va a aplicar lo manejan solamente las personas encargadas o SysAdmin y manejan varias cuentas para acceder.


Los comandos para darle SUID a una copia del shell:

Primero encontremos donde está nuestro shell:





Lo que nos mostrará si estamos utilizando dash o bash, ahora a buscar su verdadera ubicación con la respuesta, utilicemos de ejemplo que nos apareció bash y busquemos como root o sudo para que no aparezcan errores de permiso denegado en la búsqueda:





Ya que lo tenemos lo copiamos a otro sitio en este ejemplo al home del usuario rukia desde /bin/bash:





Ahora aplicamos SUID o SGID a la copia de nuestro shell. 


Los comandos para aplicar estos bits son:

SUID:




Para quitar SUID:





SGID:




Para quitar SGID:




Para aplicar el bit sticky:





Para quitar el bit sticky:






Como se ven los permisos

Como se visualizarían los permisos para SUID si el dueño no tiene permisos para ejecutar la aplicación, en el ejemplo el dueño sólo tiene permisos de lectura y escritura, grupo lectura, otros lectura con SUID:




Visualización con SUID si el dueño si tiene permisos para ejecutar, en el ejemplo el dueño puede leer, escribir y ejecutar, grupo leer, otros leer con SUID:




Visualización con SGID si el grupo no tiene permisos para ejecutar, en el ejemplo el dueño puede leer, grupo leer y escribir, otros leer con SGID:





Visualización con SGID si el grupo tiene permisos para ejecutar, en el ejemplo el dueño puede leer, grupo leer, escribir y ejecutar, otros leer con SGID:





El bit sticky se visualiza de la siguiente forma si otros no tienen permisos de ejecución, en el ejemplo el dueño y grupo tiene todos los permisos, otros sólo de lectura y escritura con el bit sticky:





Y el bit sticky se visualiza de esta forma si otros si tienen permisos de ejecución, en el ejemplo el dueño, grupo y otros tienen todos los permisos con el bit sticky:




Bueno eso sería todo lo que se hasta ahora de estos bits, espero les sea útil, cualquier duda comenten. Saludos!

Comentarios

Entradas populares de este blog

Como calcular permisos de umask

Configuración de un DNS IPv6 local en Linux con Bind