setuid y setgid (abreviatura de establecer ID de usuario en la ejecución y establecer ID de grupo en la ejecución ) son indicadores de permiso de Unix que permiten a los usuarios ejecutar archivos ejecutables con los derechos del propietario o grupo del archivo ejecutable.
En sistemas similares a Unix, la aplicación se ejecuta con los derechos del usuario que invocó la aplicación especificada. Esto proporciona seguridad adicional, ya que un proceso de usuario no puede obtener acceso de escritura a archivos importantes del sistema, como /etc/passwd , que es propiedad de root .
Si el archivo ejecutable tiene establecido el bit suid, cuando se ejecuta, este programa cambia automáticamente el "ID de usuario efectivo" al identificador del usuario propietario de este archivo. Es decir, independientemente de quién ejecute este programa, tiene los derechos del propietario de este archivo cuando se ejecuta.
El bit suid fue inventado por Dennis Ritchie y patentado en EE. UU. por AT&T en 1979. Posteriormente, se hizo pública la patente 4135240 "Protección del contenido de los archivos de datos".
Cuando el atributo set u id se establece en un archivo , el usuario normal que ejecuta ese archivo se eleva al usuario propietario del archivo (generalmente root ) dentro del proceso en ejecución . Una vez elevada, una aplicación puede realizar tareas que un usuario normal no podría realizar. El sistema evitará que el usuario modifique el nuevo proceso. Debido a la posibilidad de una condición de carrera, muchos sistemas operativos ignoran el atributo set de los scripts de shell. .
Si bien el atributo set u id es muy útil en muchos casos, su mal uso puede ser un riesgo de seguridad cuando el atributo se asigna a un ejecutable que no está cuidadosamente diseñado. Los usuarios pueden aprovechar las vulnerabilidades de los programas subdesarrollados para obtener privilegios elevados o ejecutar inadvertidamente un programa de caballo de Troya .
La configuración del atributo set g id proporciona la elevación del grupo .
Los atributos setuid y setgid generalmente se configuran con el comando chmod configurando el primer par de bits en 4 (establecer u id) o 2 (establecer g id). El comando chmod 6711establecerá respectivamente ambos pares de bits a la vez (4+2=6). También puede usar argumentos de carácter para establecer estos bits con el chmod ug+s.
Los bits setuid y setgid establecidos para directorios tienen un significado muy diferente.
El bit g id establecido en un directorio ( chmod g+s) hace que solo los nuevos directorios y archivos creados en él hereden la ID de grupo de ese directorio en lugar de la ID de grupo del usuario que creó el archivo. Los nuevos subdirectorios también heredan el bit setgid. Esto le permite crear un espacio de trabajo compartido para un grupo sin el inconveniente de que los miembros del grupo tengan que cambiar explícitamente su grupo actual para crear nuevos archivos y directorios.
La herencia se establece solo para archivos y directorios nuevos. Los archivos y directorios ya existentes deben configurar este bit manualmente, por ejemplo:
encontrar /ruta/al/directorio -type d -exec chmod g+s {} \;También tenga en cuenta que para todos los usuarios de dicho grupo, la umask debe cambiarse del valor predeterminado de 0022 a 0012; de lo contrario, los nuevos archivos/carpetas no tendrán permiso de escritura (w) para el grupo.
El conjunto de bits setuid para directorios se ignora en la mayoría de las versiones de Unix .
Establecer los bits suid/sgid en archivos no ejecutables generalmente no tiene sentido.
Un programa con el conjunto de bits setuid es "potencialmente peligroso". En el caso "normal", no permitirá que un usuario normal haga nada que esté más allá de su autoridad (por ejemplo, el programa passwd solo permitirá que el usuario cambie su propia contraseña). Pero, incluso un error menor en un programa de este tipo puede llevar al hecho de que un atacante puede obligarlo a realizar otras acciones que no proporciona el autor del programa.