De APUE
La identificación de usuario real y la identificación de grupo real de un proceso identifican quiénes somos realmente. Estos dos campos se toman de nuestra entrada en el archivo de contraseña cuando iniciamos sesión. Normalmente, estos valores no cambian durante una sesión de inicio de sesión, aunque hay formas de que un proceso de superusuario los cambie.
¿Puede un proceso de superusuario cambiar la ID de usuario real y la ID de grupo real de un proceso, de modo que la relación entre la ID de usuario real y la ID de grupo real no coincida con las del archivo de contraseña? Por ejemplo, si el usuario Tim
no es miembro del grupo ocean
según el archivo de contraseña, ¿puede un proceso de superusuario cambiar la ID de usuario real y la ID de grupo real de un proceso para que sea Tim
y ocean
respectivamente?
Respuestas:
Sí, un proceso de superusuario puede cambiar su ID de usuario real e ID de grupo real a cualquier valor que desee. Los valores en
/etc/passwd
y/etc/shadow
son la configuración de los valores que deben establecerse, pero no una limitación de los posibles valores.Editar # 1
Significa que programas como
login
leerán los valores de los archivos, por lo que los archivos son archivos de configuración o archivos de entrada. No son restricciones sobre lo que puede hacer un programa. Un proceso de superusuario puede pasar cualquier valor al núcleo, y el núcleo no verificará ningún archivo.Un programa podría llamar
y esto funcionaría, incluso si ninguna de las identificaciones se menciona en ningún archivo.
fuente
El archivo de contraseña y el archivo de grupo no se leen, solo se leen mediante el proceso de inicio de sesión, para establecer la identificación de usuario real y la identificación de grupo real.
No hay nada en el núcleo que mencione estos archivos. El inicio de sesión tiene que abrir los archivos, procesarlos y establecer las dos ID. Se podría escribir de manera diferente para obtener estos ID de otro lugar. Por ejemplo, de una base de datos en red.
Cualquier proceso con capacidad CAP_SETUID puede establecer estos ID, la raíz tiene esta capacidad.
El modelo de seguridad en Unix se implementa en parte en el kernel y en parte en procesos que se ejecutan con capacidades elevadas (por ejemplo, como root).
Tenga en cuenta que
/etc/passwd
y/etc/group
también son leídos porls
,ps
y cualquier otro programa que necesite traducir nombres de usuario / grupo a / desde ID de usuario / grupo. (Pueden hacerlo a través de una biblioteca, que sepa sobre métodos alternativos para almacenar estos detalles).fuente
/etc/passwd
,/etc/groups
) también son leídos por procesos que desean mostrar o procesar nombres de usuario en lugar de las ID numéricas internas, por ejemplo,ps
yls
.Entre otras cosas, el propósito de
/etc/passwd
es traducir el nombre de un usuario al UID de un usuario . Si no le importa cuál es el UID de bob, no necesita ese archivo. Si solo desea cambiar a un UID / GID arbitrario, use las llamadas al sistema relevantes:Tenga en cuenta que un proceso privilegiado con las capacidades
CAP_SETUID
y (que generalmente tiene un proceso raíz) solo puede cambiar su propio UID y GID, no el de otro proceso en ejecución.CAP_SETGID
fuente