Setuid

De Wikipedia, la enciclopedia libre
(Redirigido desde «Setgid»)
Saltar a: navegación, búsqueda

Setuid y Setgid son términos de Unix, abreviaturas para "Set User ID" y "Set Group ID", respectivamente. Setuid, también llamado a veces "suid", y "setgid" son permisos de acceso que pueden asignarse a archivos o directorios en un sistema operativo basado en Unix. Se utilizan principalmente para permitir a los usuarios del sistema ejecutar binarios con privilegios elevados temporalmente para realizar una tarea específica.

Si un fichero tiene activado el bit "Setuid" se identifica con una “s” en un listado de la siguiente forma:

-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd

Esta propiedad es necesaria para que los usuarios normales puedan realizar tareas que requieran privilegios más altos que los que dispone un usuario común. Algunas tareas que requieren privilegios elevados pueden no ser obvias (por ejemplo, el comando ping, que debe enviar y escuchar paquetes de control por una interfaz de red).

Setuid en ejecutables[editar]

Normalmente este bit se activa en ejecutables. Cuando a un ejecutable binario se le asigna el atributo setuid, usuarios normales del sistema pueden ejecutar ese archivo y obtener privilegios del usuario que posee dicho archivo (generalmente, root) en el proceso creado. Cuando el proceso obtiene privilegios de administrador, la aplicación puede realizar tareas en el sistema que usuarios normales generalmente no podrían hacer. El sistema impedirá al usuario que invocó el ejecutable alterar el nuevo proceso de ningún modo, como utilizando ptrace, LD_LIBRARY_PATH o enviarle señales a él (señales desde la propia terminal sí se aceptarán).

Por ejemplo el bit setuid se utiliza en el fichero /usr/bin/passwd para que todo el mundo pueda cambiar su contraseña de forma controlada. Pudiendo ejecutar este programa se consigue que un usuario pueda escribir en el fichero de claves (/etc/shadow, no confundirlo con /etc/passwd) pero sin tener que dar permisos de escritura al fichero, lo cual seria un gran agujero de seguridad

Aunque la característica setuid es muy útil en muchos casos, puede plantear un riesgo de seguridad si el atributo setuid se asigna a programas ejecutables que no fueron diseñados cuidadosamente. Los usuarios pueden explotar vulnerabilidad en programas defectuosos para conseguir privilegios elevados permanentemente, o ejecutar de forma no intencionada un troyano.

El atributo setgid permitirá cambiar los privilegios basados en el grupo en un proceso, del mismo modo que setuid hace para privilegios basados en el usuario.

Setuid en directorios[editar]

El indicador setgid en un directorio tienen un significado completamente distinto a su aplicación sobre ficheros. Los directorios con permiso setgid fuerzan a todos los archivos y subdirectorios creados en ellos a pertenecer al grupo del dueño del directorio y no al grupo del usuario que crea el archivo o subdirectorio.

El indicador setuid, en cambio no tiene efecto si es aplicado sobre un directorio. La causa es que si propagara el dueño del directorio a los objetos creados dentro de ese directorio, el usuario que cree un fichero allí perdería inmediatamente sus permisos de dueño sobre el fichero, impidiendo tal vez que pueda usarlo o modificarlo nunca más.

Ejemplos[editar]

Añade permisos SUID a un binario de ejemplo (usuario)

# chmod u+s /home/user/ejecutable

Elimina permisos SUID a un binario (usuario)

# chmod u-s /bin/ping

Añade permisos GUID a un binario de ejemplo (grupo)

# chmod g+s /home/user/ejecutable

Elimina permisos GUID a un binario de ejemplo (grupo)

# chmod g-s /home/user/ejecutable

Visualización de los permisos de un binario con atributos SUID

# ls -al /bin/ping
-rwsr-xr-x 1 root root 35712 2011-05-03 12:43 /bin/ping

Buscar todos los ficheros con permisos SUID o SGID

# find / -path /proc -prune -o -type f -perm +6000 -ls

Buscar todos los ficheros con permisos solo SUID

# find / -path /proc -prune -o -type f -perm +4000 -ls

Buscar todos los ficheros con permisos solo SGID

# find / -path /proc -prune -o -type f -perm +2000 -ls

Véase también[editar]