UID real, UID efectivo, y algunos sistemas incluso tienen un "UID guardado". ¿Cuál es el propósito de todo esto, especialmente el último?¿Cuál es el problema con todos los diferentes UID que puede tener un proceso?
Respuesta
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.
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.
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. –
Gracias por la sugerencia; Creo que corregí el segundo punto añadiendo una palabra. – tzot
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.
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.
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.
- 1. Android UID de seguridad que cambia UID
- 2. ¿Cuál es el problema con IQueryable?
- 3. Problema con el proceso Salir
- 4. ¿Cuál es el trato con todos los Either cruft?
- 5. ¿Cuál es el problema con reduce()?
- 6. ¿Cuál es el problema con char.GetNumericValue?
- 7. ¿Cuál es el rango de valores que un float puede tener en Python?
- 8. ¿Cuál es el problema con reftype {}?
- 9. ¿Cuál es el problema con Cookie.setMaxAge (Integer.MAX_VALUE)?
- 10. cuál es el problema con AttachDbFilename
- 11. ¿Cuál es el problema con setw()?
- 12. Buscar todos los hilos de un proceso dado proceso id
- 13. ¿Cuál es el problema con las DLL y el Registro?
- 14. ¿Cuál es la longitud máxima que puede tener un nombre de clave de registro de Windows?
- 15. ¿Cuál es el tamaño máximo de un paquete In-App que puede alojar con Apple?
- 16. SecurityException: uid que llama XXXX es diferente del uid del autenticador
- 17. ¿Cómo hago que vim abra todos los archivos que coincidan con un patrón en diferentes pestañas?
- 18. Señalización de todos los hilos en un proceso
- 19. ¿Cuál es la mejor manera de tener diferentes perfiles para diferentes tipos de usuarios en django?
- 20. Podríamos tener 2 archivos DLL con el mismo nombre que se está cargando en un proceso
- 21. Cuál es la mejor manera de probar un componente EJB3 sin tener que implementar el componente
- 22. MySQL deadlocks con procedimiento almacenado que genera el UID
- 23. ¿cuál es la longitud máxima que puede tener el nombre de la aplicación para iPad?
- 24. Proceso por lotes todos los archivos en el directorio
- 25. Disposición con divs ... ¿puede tener demasiados?
- 26. Jquery que se puede arrastrar con el problema de zoom
- 27. ¿Cuál es el problema con los tipos de mime en Rails?
- 28. ¿Cuál es el trato con los diferentes operadores de igualdad Perl 6? (==, ===, eq, eqv, ~~, =: =, ...)
- 29. ¿Es bueno tener un DatabaseManager con todas las funciones de todos los objetos del modelo?
- 30. python: cómo tener una propiedad y con una función setter que detecta todos los cambios que ocurren con el valor
¿Cuál es el propósito del UID guardado? – raldi
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. –
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