Permisos espiciales SUID - SGID - Sticky bit en Linux

Permisos adicionales 

Los sistemas UNIX emplean, típicamente, tres permisos o modos adicionales. Estos permisos especiales se asignan a archivos o directorios en conjunto, no a cada clase de forma separada (como sucedía con los permisos básicos).
Estos tres permisos (especificables de forma independiente), un bit por cada uno de ellos, permiten 8 combinaciones posibles que se expresan con un dígito en base 8 (del 0 al 7, uno por cada combinación posible) que se antepone al modo de permisos. Así, el modo se ampliaría ahora del 0000 al 7777.
Pueden ser utilizados 3 tipos de permisos en determinadas circunstancias. Aparte de los siempre aplicables de lectura, escritura y ejecución, algunas veces es necesario algo más para un archivo o directorio. Estos permisos especiales son los 3 siguientes:

  • Asignar ID de usuario (set user ID) (SUID) 
  • Asignar ID de grupo (set group ID) (SGID) 
  • Sticky bit

SUID 

Permiso set user ID, setuid o SUID: cuando un archivo tiene este permiso asignado y es ejecutado, el proceso resultante asumirá el ID de usuario efectivo del propietario del archivo. El ejemplo típico es el cambio de una clave de usuario: ningún usuario debería poder modificar "/etc/shadow" directamente. La única forma de poder modificarlo debería ser a través del comando correspondiente, que necesariamente tendrá que tener asignado el setuid. Es decir, el comando "/usr/bin/passwd" ejecutado por un usuario se ejecutará como si lo hubiese invocado el root, de manera de poder modificar "/etc/shadow".


Ejemplo:

Se puede ver que en los permisos del usuario aparece una “s” en vez de una “x” 
ls -l /usr/bin/passwd
resultado
-rwsr-xr-x 1 root root 45396 May 25 2012 /usr/bin/passwd

Este permiso se puede setear con:
chmod 4655 archivo
o
chmod u+s archivo

Para ver todos los archivos que hay con este permiso en el sistema:
find / -perm +4000 2>/dev/null

SGID

Permiso set group ID, setgid o SGID: cuando un archivo que tiene este permiso asignado se ejecuta, el proceso resultante asumirá el ID de grupo efectivo definido en el archivo. Cuando el setgid le es asignado a un directorio, archivos nuevos y directorios creados debajo de ese directorio heredarán el grupo de ese directorio, a diferencia del comportamiento por defecto, que es usar el grupo primario del usuario efectivo al asignar el grupo de archivos nuevos y directorios.

Ejemplo:

Este permiso se puede setear con:
ls -ld /test
resultado
drwxr-sr-x 241 prueba prueba 4096 Sep 12 19:29 /test
sudo mkdir /test/prueba
ls -ld /test
resultado
drwxr-sr-x 2 root prueba 4096 Sep 12 19:35 prueba

Este permiso se puede setear con:
chmod g+s directorio (o un archivo)

Ver todos los archivos que hay con ese permiso en el sistema:
find / -perm +2000 2>/dev/null

Sticky Bit

Este permiso no trabaja como los otros permisos especiales. Con un valor numérico de 1000, sus operaciones difieren cuando están aplicadas a un directorio o a un archivo. Cuando está aplicado a un directorio, evita que los usuarios borren archivos de las carpetas que les conceden el permiso de escritura, a menos que sean el propietario del archivo. Por defecto, cualquier usuario que tenga permiso de escritura en un directorio puede borrar archivosdentro de ese directorio, incluso si no tiene el permiso de escritura de ese archivo.
Hoy en día con las técnicas actuales de administración de memoria ya quedó en desuso. Cuando se aplicaba sobre un archivo, el archivo se convertía en “sticky” (bloqueado). La primera vez que se accedía o se ejecuta el archivo y se carga en memoria, permanecía cargado en memoria de modo que pudiera iniciar más rápidamente. Si el archivo no es ejecutable, el último bit de permiso se convierte en “T”. Si el archivo es un fichero ejecutable, o el permiso se aplica a un directorio, el bit pasado se convierte en una “t”. Cuando se aplica el permiso chmod y las letras, aparece “t” de todos modos (sea archivo o directorio).
El directorio /tmp cuenta con este permiso activo, porque es un directorio en el que todos los usuarios tienen permiso de escritura, pero nadie podrá borrar ningún archivo que no le pertenezca.


Este permiso se puede setear con:
chmod 1755 directorio (o un archivo)
o
chmod o+t directorio (o un archivo)
ls -ld /tmp
resultado
drwxrwxrwt 26 root root 36864 Sep 15 23:17 /tmp

Ver todos los archivos que hay con ese permiso en el sistema:
find / -perm +1000 2>/dev/null


Publicar un comentario

0 Comentarios