Las cuentas de usuario en sistemas similares a Unix se identifican mediante un UID (ID de usuario).
Un proceso se puede asociar con más de un UID. Los dos principales son el "UID real", que identifica quién es el propietario del proceso y el "UID de usuario efectivo", que identifica los permisos de los usuarios en los que actualmente funciona el proceso bajo *.
"setuid" en este contexto se refiere a un bit de permiso de archivo (también es el nombre de una llamada del sistema relacionada). Cuando se establece en un archivo ejecutable y ese archivo se ejecuta, el "UID efectivo" se cambia al propietario del archivo. Esto significa que el programa se ejecuta con los permisos de su propietario en lugar de los permisos del usuario que lo ejecutó.
Cuando decimos que un archivo ejecutable "es setuid root", queremos decir que tiene el bit setuid establecido y es propiedad del usuario 0 (root). Por lo tanto, se ejecutará con un UID efectivo de 0 y, básicamente, puede hacer lo que quiera.
El "UID real" sigue siendo el mismo, por lo que el programa puede identificar al usuario que lo ejecutó y puede volver a ese usuario si lo desea.
los programas setuid son / eran una parte importante de los sistemas UNIX que permiten que la funcionalidad se exponga a los usuarios donde la función en su conjunto se considera segura para el usuario, pero los bloques de construcción utilizados para implementar esas funciones no lo son. >
Sin embargo, también son arriesgados, un pequeño error en un programa setuid puede exponer fácilmente más de lo que estaba destinado a ser expuesto. También se deshabilitan varias funciones relacionadas con la depuración de los programas setuid para evitar que se utilicen para eludir las restricciones.
En los últimos tiempos, los sistemas Linux han estado reemplazando algunos usos de "setuid" con un nuevo mecanismo llamado "capacidades" que permite una asignación más precisa de privilegios especiales a los programas.
* También hay otros potencialmente, pero no están relacionados de inmediato aquí, consulte enlace para más detalles.