¿Cómo sudo el proceso actual?

¿Es posible usar una interfaz de sudo (como gksudo) para elevar los privilegios del proceso actual ? Sé que puedo hacer lo siguiente:

sudo cat /etc/passwd- 

Pero estoy interesado en hacer esto:

 sudo-become-root # magic function/command cat /etc/passwd- 

Estoy escribiendo en Python. Mi caso de uso es que tengo un progtwig que se ejecuta como usuario, pero puede encontrar archivos para leer / escribir que son propiedad de la raíz. Me gustaría solicitar una contraseña, obtener privilegios de root, hacer lo que necesito y, a continuación, optar por dejar los privilegios nuevamente.

Sé que podría separar la lógica de administración y la lógica de no administración en procesos separados, y luego simplemente ejecutar el proceso de administración como root (con algo de comunicación: policykit / dbus sería una buena opción aquí). Pero esperaba una solución mucho más simple (aunque ciertamente más arriesgada).

Estoy pensando en algo así como ejecutar el progtwig de Solaris a través de sudo para luego modificar los privilegios del proceso actual. Lo que parece ser un viaje de ida y vuelta hackeado pero viable. Pero por lo que sé, Linux no ofrece ppriv.

(Me sorprende que esto no sea obvio ya; parece ser algo raro que no se quiere y no parece ser un agujero de seguridad para permitir la escalada en proceso en lugar de la escalada de un nuevo proceso).

Desafortunadamente, no conozco una manera de hacer lo que usted quiere hacer limpiamente. Creo que lo mejor que puede hacer es configurar el progtwig (o ejecutarlo bajo sudo) y luego hacer su trabajo sucio y dejar los permisos, o bifurcar () y eliminar los permisos de un proceso y mantener el otro alrededor para hacer su trabajo de raíz .

Lo que está buscando son las llamadas setuid (2) / setreuid (2) / setregid (2) / setgroups (2), pero todas están conectadas para que no le permitan obtener privilegios durante la invocación. Solo puede usarlos para “regalar” privilegios, que yo sepa.

Aptitud tiene una opción de “convertirse en raíz”. Es posible que desee ver lo que el autor hizo allí.

Si desea lidiar de manera limpia con los derechos administrativos dentro de un progtwig, es posible que desee usar PolicyKit en lugar de sudo, dependiendo del sistema operativo en el que planea ejecutar su progtwig.

Para PolicyKit for Python, vea python-slip .

De lo contrario, hay dos formas de llamar a sudo para convertirse en root:

 sudo -s 

te hará rootear y mantendrá tu entorno actual (equivalente a sudo su )

 sudo -i 

te hará rootear y te dará el entorno de root también (equivalente a sudo su - )

Otra forma de lidiar con el problema es considerar que tiene los derechos que necesita y dejar que el usuario del progtwig elija cómo otorgar los derechos a su progtwig (utilizando sudo / setuid / unix groups / cualquier otra cosa).

Vea también esta pregunta en ServerFault sobre el mismo tema.

Tu función / comando mágico podría ser

 sudo su 
 echo 'echo tee; echo hee'|sudo -s 

La salida es:

 tee hee 

No me gusta la idea de poder ejecutar comandos arbitrarios como root desde un proceso con privilegios inferiores. Sin embargo, como lo desea, una de las ideas que viene a la mente es mantener un shell setuid restringido que solo puede ejecutar los comandos que le interesa permitir. Luego puede usar las funciones subprocess.Popen para ejecutar su comando usando este shell restringido que lo ejecutará con privilegios elevados.

Me pregunto si esto funcionaría:

Agregue otro grupo a su sistema, instale el script como progtwig raíz y haga que el archivo sudoers contenga una línea que permita que el script sea ejecutado por este grupo. Finalmente, agregue el grupo a la lista de cuentas que necesitan ejecutar el script.

Entonces, el script solo puede ejecutarse por root o cualquier cuenta que tenga el grupo especial en el grupo establecido después de proporcionar la contraseña de la cuenta al inicio.

Consulte el Manual de Sudo para otras opciones.

Quieres autenticarte con PAM. Hay un ejemplo aquí .