¿Cuál es la diferencia entre os.getuid () y os.geteuid ()?

La documentación para os.getuid() dice:

Devuelve la identificación de usuario del proceso actual.

Y de os.geteuid() dice:

Devuelve la identificación de usuario efectiva del proceso actual.

Entonces, ¿cuál es la diferencia entre la identificación de usuario y la identificación de usuario efectiva ?

Para mí ambos funcionan igual (tanto en 2.xy 3.x) . Lo estoy usando para comprobar si el script se está ejecutando como root.

Para comprender en qué se diferencian os.getuid y os.geteuid , debe comprender que no son funciones específicas de Python (aparte del prefijo del módulo os ). Esas funciones envuelven las llamadas al sistema getuid y geteuid que son provistas esencialmente por todos los sistemas operativos tipo Unix.

Por lo tanto, en lugar de consultar los documentos de Python (que probablemente no brinden muchos detalles), debe consultar los documentos de su sistema operativo. Aquí está la documentación relevante para Linux, por ejemplo. Wikipedia también tiene un buen artículo sobre las ID de usuario de Unix .

La diferencia entre el UID normal y el UID efectivo es que solo se verifica el EUID cuando hace algo que requiere acceso especial (como leer o escribir un archivo o hacer ciertas llamadas al sistema). El UID indica el usuario real que está realizando la acción, pero (generalmente) no se tiene en cuenta al examinar los permisos. En los progtwigs normales serán los mismos. Algunos progtwigs cambian su EUID para agregar o restar de las acciones que pueden tomar. Un número más pequeño también cambia su UID, para efectivamente “convertirse” en otro usuario.

Aquí hay un ejemplo de un progtwig que cambia su EUID: El progtwig de contraseña (que se usa para cambiar su contraseña) debe escribir en el archivo de contraseña del sistema, que es propiedad del usuario root. Los usuarios normales no pueden escribir en ese archivo, ya que si pudieran, también podrían cambiar la contraseña de todos los demás. Para resolver esto, el progtwig passwd tiene un bit establecido en sus permisos de archivo (conocido como setuid bit ) que le indica al sistema operativo que debe ejecutarse con el EUID del propietario del progtwig (por ejemplo, la root ) incluso cuando es iniciado por otro usuario. El progtwig de passwd entonces vería a su UID como el usuario de lanzamiento y su EUID como raíz. Escribir en el archivo de contraseñas del sistema requiere que EUID tenga privilegios. El UID también es útil, ya que passwd necesita saber para qué usuario está cambiando la contraseña.

Hay algunos otros casos en los que el UID y el EUID no coinciden, pero no son demasiado comunes. Por ejemplo, un servidor de archivos que se ejecuta como superusuario puede cambiar su EUID para que coincida con un usuario específico que solicita algunas manipulaciones de archivos. El uso del EUID del usuario permite que el servidor evite acceder a cosas que el usuario no puede tocar.

La función os.getuid() devuelve el ID de un usuario que ejecuta su progtwig. La función os.geteuid() de un usuario de la que su progtwig usa los permisos. En la mayoría de los casos esto será lo mismo. El caso bien conocido de cuándo estos valores serán diferentes es cuando se establece setuid bit para el archivo ejecutable de su progtwig, y ​​el usuario que ejecuta su progtwig es diferente del ejecutable del progtwig que posee el usuario. En este caso, os.getuid() devolverá el ID del usuario que ejecuta el progtwig, mientras que os.geteuid() devolverá el ID del usuario que posee el ejecutable del progtwig.