viernes, 3 de noviembre de 2023

08 - Permisos especiales

t (sticky bit) - directorios 

Cuando se lo asignamos a un directorio que tiene todos los permisos, conseguimos que los elementos que haya dentro (ficheros o subdirectorios), sólo puedan ser modificados o borrados por el propietario del elemento, el propietario del directorio o el root. El resto de usuarios aunque tenga permisos sobre dichos elementos solo podrá leerlos.

El sistema lo tiene configurado en algunos directorios públicos como por ejemplo /tmp ó /var/tmp. El bit t se activa o desactiva con el comando chmod empleando notación simbólica u octal (sumando 1000 a los permisos).

Activación sticky bit












Antiguamente se usaba también para mantener la imagen de un binario en memoria después de finalizar la ejecución del mismo pero con los avances en el hardware ya no se usa para esta función.

s nivel usuario (SUID)

Cuando el propietario de un binario asigna el atributo s a a la terna de usuario, el resto de usuarios podrá ejecutar el binario con los mismos privilegios que el propietario del binario

Dicho de otra forma, el sistema operativo cree que el que está ejecutando el binario es el propietario del binario en vez del usuario que lo está ejecutando realmente. Se produce lo que se denomina un cambio de dominio temporal a nivel de usuario durante la ejecución del binario.

Pero, ¿a que nos referimos con "los mismos privilegios que el propietario del binario?
Veamos un ejemplo, el binario passwd

Es un binario del sistema, /usr/bin/passwd, que cualquier usuario puede ejecutar para cambiar su contraseña personal. Este binario, como se puede observar, viene con el bit s activado a nivel de usuario.

Si recordamos un poco el tema de las contraseñas, el sistema las gestiona a través de dos ficheros, /etc/passwd y /etc/shadow que solo puede modificar su propietario, el root. No es difícil imaginar que el binario passwd lo que hace es modificar las líneas de dichos ficheros para conseguir su objetivo que es cambiar la contraseña.

¿Cómo es posible entonces, que un usuario normal, pueda modificar ficheros propiedad del root y sobre los que no tiene permisos de escritura?

La explicación es que el binario passwd que intenta la modificación de dichos ficheros tiene activado el SUID y el sistema se cree que el que lo está ejecutando es el propietario del binario que es el root y precisamente el root si tiene permisos para modificar dichos ficheros

Ejemplo de suid en el sistema 









El suid se puede activar con chmod usando notación simbólica u octal (sumando 4000) 


s nivel grupo (SGID)

Cuando el propietario de un binario asigna el atributo s a a la terna de grupo, el resto de usuarios podrá ejecutar el binario con los mismos privilegios que el grupo propietario del binario

Dicho de otra manera, el sistema cree que el usuario que ejecuta el binario tiene como grupo propietario el grupo propietario del binario en vez de el suyo, adquiriendo los privilegios del grupo propietario del binario. Se produce un cambio de dominio temporal a nivel de grupo durante la ejecución del binario.

Se activa o desactiva este bit empleando la notación simbólica de la siguiente manera: chmod g+s binario ó chmod g-s binario. También de forma octal se puede expresar sumando 2000 a los permisos del archivo. Busca un ejemplo en el sistema y razónalo.
 
SGID directorios

En el caso particular de aplicar el bit s a nivel de grupo sobre un directorio, los efectos son que a la hora de crear ficheros en ese directorio, el grupo propietario con el que salen por defecto dichos ficheros no será el grupo propietario del usuario que los crea, como debería ocurrir en situación normal, sino que será el grupo propietario del directorio que los contiene.