linux - ¿Cuál es el trato con todos los diferentes UID que puede tener un proceso?
security unix (5)
Además de los UID reales, efectivos y guardados, los sistemas Unix con auditoría habilitada también tienen el UID de auditoría. El AUID de un proceso identifica al usuario que inició el proceso; no es cambiado por setuid (2) o seteuid (2). La intención es que permanezca constante a través del proceso y se use solo para etiquetar registros de auditoría. Por lo tanto, si un usuario ejecuta un shell con privilegios (incluso un usuario autorizado a través de su o sudo), los registros de auditoría de ese proceso se etiquetan desde ese usuario.
UID real, UID efectivo, y algunos sistemas incluso tienen un "UID guardado". ¿Cuál es el propósito de todo esto, especialmente el último?
Cada proceso de Linux tiene 3 UID asociados.
- UID real : el UID del proceso que creó ESTE proceso.
- UID efectivo : se usa para evaluar los privilegios del proceso para realizar una acción en particular.
- UID guardado : para el archivo de imagen binaria con un bit de
setuid
.
Cada proceso de UNIX tiene 3 UID asociados. El privilegio de superusuario es UID = 0.
UID real
Este es el UID del usuario / proceso que creó ESTE proceso. Solo se puede cambiar si el proceso en ejecución tiene EUID = 0.
UID efectivo
Este UID se usa para evaluar los privilegios del proceso para realizar una acción particular. EUID se puede cambiar a RUID o SUID si EUID! = 0. Si EUID = 0, se puede cambiar a cualquier cosa.
UID guardado
Si ejecuta un archivo ejecutable con el conjunto de bits UID configurado, el proceso de ejecución resultante comenzará con un UID real del usuario real que lo ejecuta y un UID efectivo y guardado del propietario del archivo ejecutable. Si el proceso llama a setuid () o seteuid () para cambiar su UID efectivo, aún pueden recuperar sus privilegios originales nuevamente gracias al UID guardado. Si el bit set-UID no está establecido, SUID será el RUID.
El uid real es la identificación del usuario que lanzó un proceso.
El uid efectivo generalmente es el mismo que el uid real. Es diferente solo si:
el ejecutable tenía establecido el bit de set-uid, y el propietario del ejecutable es diferente al usuario que lo llama
o si un proceso set-uid llama a setuid (2). Si el proceso tiene privilegios de superusuario, se permite cualquier argumento para setuid (2) (pero luego todos los * -uids se establecen en el mismo valor); de lo contrario, se puede llamar a setuid (2) con el uid real o el uid efectivo o el uid guardado.
El guardado-uid es el uid efectivo que tenía el proceso cuando comenzó, y se guarda para permitir como argumento las diversas llamadas del sistema set * uid.
Tenga en cuenta que un proceso con privilegio de superusuario que llama a setuid (2) para cambiar su uid efectivo también tendrá el uid real y el uid guardado cambiados al mismo valor, por lo que el seteuid no POSIX (2) debería usarse en su lugar.
Todo lo anterior se aplica a los identificadores de grupo (real | effective | saved) también.
La respuesta aceptada no es correcta en cuanto a que los UD reales no pueden ser cambiados por nadie, excepto root. De la página man para setuid: (No pude hacer un comentario)
La función setuid () establece los ID de usuario reales y efectivos y el ID de usuario-set guardado del proceso actual en el valor especificado. La función setuid () está permitida si el ID de usuario efectivo es el del superusuario, o si el ID de usuario especificado es el mismo que el ID de usuario efectivo. Si no es así, pero el ID de usuario especificado es el mismo que el ID de usuario real, setuid () establecerá el ID de usuario efectivo en el ID de usuario real.