2008-10-15 30 views

Respuesta

50

Cada proceso de UNIX tiene 3 UID asociados. El privilegio de superusuario es UID = 0.

real UID

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 utiliza para evaluar privilegios del proceso para llevar a cabo una acción en particular. EUID se puede cambiar a RUID o SUID si EUID! = 0. Si EUID = 0, se puede cambiar a cualquier cosa.

guardadas UID

Si ejecuta un archivo ejecutable con el bit set-UID, entonces el proceso que se ejecuta resultante comenzará con un UID real del usuario real de ejecutarlo, y un UID efectivo y salvado 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.

+1

¿Cuál es el propósito del UID guardado? – raldi

+1

Es para fines de seguridad y auditoría, es decir, ¿para poder determinar qué cuenta de usuario realmente lanzó el binario? Si no existiera, todo lo que podría obtener es el UID del propietario del archivo, ya que para ejecutar con los privilegios del propietario del archivo se utiliza el bit SUID. –

+14

El UID guardado es para que un proceso pueda cambiar su UID efectivo a su UID real, y luego viceversa; de lo contrario, sería una operación de un solo sentido. – MarkR

6

El uid real es la identificación del usuario que inició un proceso.

El uid efectivo es generalmente el mismo que el uid real. Es diferente sólo si:

  • el ejecutable tenía el bit setuid, y el propietario ejecutable es diferente que el usuario llamante que

  • o si un proceso setuid llama 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 UID-guardado es el efectivo-UID del proceso tenía cuando empezó, y se transforma en gol con el fin de ser permitido como un argumento a los distintos set * llamadas al sistema UID.

Tenga en cuenta que un proceso con privilegio de superusuario llamando 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 debería utilizarse el seteuid no POSIX (2).

Todo lo anterior se aplica a los identificadores de grupo (real | effective | saved) también.

+0

La segunda viñeta no es correcta. Llamar a setuid() no hará, por sí mismo, que el EUID sea diferente de la RUID a menos que el proceso tuviera previamente RUID! = EUID (por lo que podría restablecer el estado al inicio del programa). El resto de la viñeta es más o menos precisa. –

+0

Gracias por la sugerencia; Creo que corregí el segundo punto añadiendo una palabra. – tzot

4

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.

1

Cada proceso de Linux tiene 3 UID asociados.

  • real UID: El UID del proceso que creó este proceso.
  • UID efectivo: Esto 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 setuid en él.
0

La respuesta aceptada no es correcta con respecto a que las UD reales no pueden ser cambiadas por nadie, excepto por la raíz. Desde la página del manual de setuid: (no pude hacer un comentario)

La función setuid() establece los ID de usuario real y efectiva y la de usuario guardado-ID del el actual proceso de 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 del usuario real ID, setuid() establecerá la ID de usuario efectiva en la ID de usuario real.

Cuestiones relacionadas