GNU/Linux >> Tutoriales Linux >  >> Linux

Preguntas sobre el ID de usuario guardado

¿Guardar el ID de usuario efectivo en una variable al comienzo del programa no haría innecesario el ID de usuario guardado?

No se trata de lo que recuerda el programa del espacio de usuario, sino de qué derechos le permite usar el núcleo. Para que funcione la separación entre usuarios, tiene que ser un sistema el que controle qué ID de usuario puede usar un proceso. De lo contrario, cualquier proceso podría simplemente solicitar convertirse en root.

¿Cómo puedo recuperar la ID de usuario guardada en un programa C? No pude encontrar ninguna función que hiciera eso.

Con las funciones estándar no puedes (solo hay getuid() y geteuid() ). Al menos Linux tiene getresuid() que devuelven los tres ID de usuario, sin embargo.

De todos modos, por lo general no necesitarías leerlo. Está ahí para permitir cambiar entre la ID de usuario real y la ID de usuario efectiva en el caso de un programa setuid, por lo que comienza como una copia de la ID de usuario efectiva.

En un programa setuid, el ID de usuario real es el del usuario que lo ejecuta, y los ID de usuario efectivos y guardados son los del usuario propietario del programa. El ID de usuario efectivo es el que importa para las verificaciones de privilegios, por lo que si el proceso desea eliminar privilegios temporalmente, cambia el ID de usuario efectivo entre el ID de usuario real y el ID de usuario guardado.

¿De qué manera utiliza el kernel la ID de usuario guardada para verificar si un proceso puede o no cambiar su ID de usuario? ¿Significa esto que cuando un proceso intenta cambiar su ID de usuario efectivo, el kernel verifica la ID de usuario guardada para asegurarse de que el proceso pueda hacerlo?

Sí. La página del manual de Linux para setuid() menciona esto, pero está algo escondido:

ERRORS     
EPERM  The user is not privileged and uid does not match the real
       UID or saved set-user-ID of the calling process.

En otras palabras, solo puede establecer el ID de usuario (efectivo) en uno de los ID reales o guardados.

La página man para setreuid() es más claro en eso:

Unprivileged processes may only set the effective user ID to the real
user ID, the effective user ID, or the saved set-user-ID.

Linux
  1. Linux:¿el uso de la opción -o en el comando Useradd?

  2. ¿La función de la raíz del grupo de usuarios?

  3. Deshabilitar el usuario administrador en Windows

  4. ¿Qué tiene de vulnerable este código C?

  5. ¿Qué es el usuario debian-+?

Comprender el archivo /etc/passwd

Descripción general de la interfaz de usuario de Wireshark (GUI)

Los efectos de agregar usuarios a un sistema Linux

¿El comando de apagado?

Useradd vs Adduser:¿Cuál es la diferencia?

Cómo saber los grupos de un usuario de Linux