2011-04-02 4 views
6

parece que tengo algunos problemas para entender la semántica del bit SUID, tal vez alguien me puede ayudar a aclarar la situación.Semántica de SUID (Set-User-ID)

Mi comprensión de la semántica del bit SUID es la siguiente: Cuando configuro el bit SUID con un archivo, entonces el archivo se ejecutará como el propietario del archivo y no como la persona que llama del archivo. Así que para probar este comportamiento escribí la siguiente secuencia de comandos de Python:

#!/usr/bin/python3 -O 

import os 

def main(): 
     print('Real UserID: %d' % os.getuid()) 
     print('Effective UserID: %d' % os.geteuid()) 

if __name__ == '__main__': 
     main() 

Después de eso he creado un usuario llamado "testuser" con la "testuser" grupo correspondiente y se ajustan los permisos de archivo (archivo usuarioprueba chown, archivo usuarioprueba chgrp, chmod u + s, archivo g + x). Luego agregué mi usuario principal al grupo "testuser" para poder ejecutar el archivo como miembro del grupo. Después de todo lo que los permisos de archivo se veía así:

-rwsr-xr-- 1 testuser testuser 168 2011-04-02 13:35 procred.py* 

Así que cuando estoy registrado como testuser el guión produce la salida:

Real UserID: 1001 
Effective UserID: 1001 

... y cuando me funciono con la escritura como mi principal usuario las salidas de guión:

Real UserID: 1000 
Effective UserID: 1000 

Ahora bien, como de mi comprensión del guión deberían haber ejecutarse como el usuario con el UID 1001 (el propietario del archivo) en la última ejecución. ¿Estoy equivocado con todo el concepto o cuál es mi error?

Respuesta

8

Establecer el bit SUID en un archivo * .py no ayuda de ninguna manera aquí ya que el script se ejecuta por el intérprete de Python, que debe configurarse SUID en este caso. Usar 'sudo' es tu mejor amigo aquí.

4

Establecer SUID no funciona para los scripts, porque el núcleo ve el #! (shebang - número mágico 0x23 0x21 - hombre mágico) y descarta los privilegios antes de llamar al intérprete/usr/bin/python con el guión como entrada. Una forma de evitarlo es establecer la raíz SUID del intérprete python y agregar funcionalidad para cambiar los privilegios al usuario propietario del script antes de ejecutar el script, en caso de que se establezca el bit SUID. Hacer esto de una manera ingenua impondrá problemas de seguridad. Cómo hacerlo de una manera inteligente se puede encontrar aquí: http://perldoc.perl.org/perlsec.html

Enlaces adicionales:

0

yo encontramos este link en la web. puede establecer SUID en este contenedor y usar este. pero personalmente prefiero la solución sudo. ;)