Cada proceso en un sistema de tipo UNIX, al igual que todos los archivos, tiene un propietario (el usuario, ya sea real o un sistema de "pseudo-usuario", como por ejemplo daemon
, bin
, man
, etc.) y el propietario de un grupo. El propietario del grupo para los archivos de un usuario suele ser el grupo primario de ese usuario y, de manera similar, cualquier proceso que inicie normalmente es propiedad de su ID de usuario y de su ID de grupo principal.
Sin embargo, a veces es necesario tener privilegios elevados para ejecutar ciertos comandos, pero no es deseable otorgar derechos administrativos completos. Por ejemplo, el passwd
comando necesita acceso al archivo de contraseñas ocultas del sistema para poder actualizar su contraseña. Obviamente, no desea otorgar privilegios de root a todos los usuarios, solo para que puedan restablecer su contraseña, ¡eso indudablemente conduciría al caos! En cambio, debe haber otra forma de otorgar temporalmente privilegios elevados a los usuarios para que realicen ciertas tareas. Para eso están los bits SETUID y SETGID. Es una manera de decirle al kernel que aumente temporalmente los privilegios del usuario, mientras dure la ejecución del comando marcado. Se ejecutará un binario SETUID con los privilegios del propietario del archivo ejecutable (generalmenteroot
), y se ejecutará un binario SETGID con los privilegios de grupo del propietario del grupo del archivo ejecutable. En el caso del passwd
comando, que pertenece root
y es SETUID, permite a los usuarios normales afectar directamente el contenido del archivo de contraseña, de manera controlada y predecible, mediante la ejecución con privilegios de root. Hay muchos otros SETUID
comandos en sistemas similares a Unix ( chsh
, screen
, ping
, su
, etc), todo lo cual requiere privilegios elevados para funcionar correctamente. También hay algunos SETGID
programas, donde el núcleo cambia temporalmente el GID del proceso, para permitir el acceso a los archivos de registro, etc., sendmail
es una utilidad de este tipo.
El sticky bit
sirve un propósito ligeramente diferente. Su uso más común es garantizar que solo la cuenta de usuario que creó un archivo pueda eliminarlo. Piensa en el /tmp
directorio. Tiene permisos muy liberales, que permiten a cualquiera crear archivos allí. Esto es bueno, y permite que los procesos de los usuarios para crear archivos temporales ( screen
, ssh
, etc, mantener la información del estado en /tmp
). Para proteger los archivos temporales de un usuario, /tmp
tiene el bit fijo establecido, de modo que solo yo pueda eliminar mis archivos, y solo usted puede eliminar los suyos. Por supuesto, root puede hacer cualquier cosa, ¡pero tenemos que esperar que el administrador de sistemas no esté trastornado!
Para archivos normales (es decir, para archivos no ejecutables), no tiene mucho sentido establecer los bits SETUID / SETGID. SETGID en directorios en algunos sistemas controla el propietario del grupo predeterminado para los nuevos archivos creados en ese directorio.