Saltar la navegación

El bit SUID

Cuando se ejecuta un programa, al proceso creado se le asignan cuatro números que indican a quién pertenece. Estos son los UID y GID reales y efectivos. Normalmente, los UID y GID efectivos son los mismos que los reales, concretamente los del usuario que ejecuta el programa. El sistema GNU/Linux utiliza los UID y GID efectivos para determinar los permisos de acceso de un proceso a los ficheros.

GNU/Linux determina los permisos de acceso de un proceso a un fichero de la siguiente forma: si el UID efectivo de un proceso es el mismo que el UID del propietario del fichero, entonces ese proceso tiene los permisos de acceso del propietario del fichero, si no es así, si el GID efectivo del proceso concuerda con el GID del grupo asociado al fichero, entonces el proceso tiene los permisos de acceso del grupo del fichero, en última instancia, el proceso tiene los permisos de acceso de los otros.

Determinación de permisos

El establecimiento del permiso SUID para un programa binario (no para los scripts) cambia algunos matices. Cuando este permiso está establecido, todos los procesos creados por el programa tendrán el UID efectivo del propietario del programa y no el del usuario que lo ejecuta.

Puesto que los permisos de acceso a los ficheros son determinados a partir del UID efectivo, no del real, el proceso correspondiente a un programa con el permiso SUID activado tiene los mismos permisos de acceso que el propietario del programa, sin importar quién lo ejecute.

Para comprender mejor este funcionamiento veamos un ejemplo. Consideremos los siguientes ficheros:

-rw-r--r-- 1 root root /etc/passwd
-rwsr-xr-x 1 root root /usr/bin/passwd

El fichero /usr/bin/passwd es el programa ejecutable que nos permite cambiar la contraseña. Como ya sabemos, esta se almacena codificada en el fichero /etc/passwd (es igual el razonamiento para /etc/shadow). Si nos fijamos en los permisos de este último (rw-r--r--) podemos observar que solo el propietario (root) tiene permiso de escritura. ¿Cómo es posible entonces que cualquier usuario pueda cambiar su contraseña y modifique el fichero /etc/passwd? Esto es posible gracias al permiso SUID que posee el programa /usr/bin/passwd, y que aparece como una s en la posición del permiso de ejecución del propietario. De este modo cuando cualquier usuario lo ejecute (tiene permiso de ejecución para todos los usuarios), el UID efectivo del proceso lanzado será el del propietario del programa, que en este caso, es el usuario root, y así la modificación del fichero /etc/passwd se hará como root.

Como el permiso SUID solapa al permiso de ejecución, lo que se hace para saber si este se encuentra activo o no cuando lo está el SUID, es mostrar una s minúscula cuando el permiso de ejecución está también activo, o una S mayúscula cuando no lo está.

Para establecer el permiso SUID se utiliza la orden chmod en notación simbólica:

chmod u+s fichero

o bien en notación octal:

chmod 4xxx fichero

Para quitarlo:

chmod u-s fichero

 

Licencia: licencia de software libre GPL