Pregunta

¿Es posible utilizar una interfaz sudo (como sudo) para elevar los privilegios de la actuales proceso? Sé que puedo hacer lo siguiente:

sudo cat /etc/passwd-

Pero yo 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 programa que se ejecuta como el usuario, pero puede encontrarse con archivos de lectura / escritura que son propiedad raíz. Me gustaría preguntar por el password, el aumento de los privilegios de root, hacer lo que necesito, y luego caer opcionalmente privilegios de nuevo.

Sé que podría separar la lógica de administración y la lógica que no es administrador en procesos separados, y luego simplemente ejecutar el proceso de administración como root (con algún tipo de comunicación - policykit / dbus sería una buena opción aquí). Pero yo estaba esperando una mucho más simple (aunque es cierto que más arriesgada) solución.

Estoy pensando en algo como correr ppriv de Solaris a través de sudo a continuación, modificar los privilegios del proceso actual. Lo que parece como un ida y vuelta hacky-pero-viable. Pero por lo que yo sé, Linux no ofrece ppriv.

(me sorprende que esto no es ya evidente, sino que parece como una cosa no-raro que quieren y no lo hace parecen a ser un agujero de seguridad para permitir la escalada en proceso sobre la escalada de un nuevo proceso.)

¿Fue útil?

Solución

Por desgracia, no soy consciente de una manera de hacer lo que quiere hacer limpiamente. Creo que la mejor opción es hacer que el programa setuid (o ejecutar el programa bajo sudo) y luego o bien hacer su trabajo sucio y soltar permisos, o tenedor () y permisos de caída de un proceso y mantener la otra en torno a hacer su trabajo a raíz .

Lo que estamos buscando son los setuid (2) / setreuid (2) / setregid (2) / setgroups (2) llamadas, pero todos ellos son cableados para que no le permiten obtener privilegios a mediados de invocación. Sólo se puede utilizar para "regalar" privilegios, por lo que yo sé.

Otros consejos

Aptitud tiene una opción de "root". Es posible que desee ver lo que el autor hizo allí.

Si usted quiere tratar limpiamente con derechos administrativos dentro de un programa, es posible que desee utilizar PolicyKit en lugar de sudo, dependiendo del sistema operativo que va a ejecutar su programa de.

Para PolicyKit para Python, ver pitón antideslizante .

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

sudo -s

le hará raíz y mantener su entorno actual (equivalente a sudo su)

sudo -i

le hará raíz y darle el ambiente de la raíz, también (equivalente a sudo su -)

Otra forma de abordar el problema es considerar que dispone de los derechos necesarios, y dejar que el usuario del programa elegir cómo dar los derechos de su programa (usando sudo / grupos setuid / Unix / cualquier otra cosa).

esta pregunta en ServerFault sobre el mismo tema.

Función de magia / comando podría ser

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

La salida es:

tee
hee

No me gusta la idea de ser capaz de ejecutar comandos arbitrarios como la raíz de un proceso privilegiado inferior. Sin embargo, puesto que usted quiere, una de las ideas que viene a la mente es mantener un setuid restringido cáscara que sólo pueden ejecutar los comandos que estés interesado en permitir. A continuación, puede utilizar las funciones subprocess.Popen para ejecutar su comando usando esta cáscara restringido el que se ejecutará con privilegios elevados.

Me pregunto si esto funcionaría:

Añadir otro grupo para el sistema, instalar el script como un programa de raíz y tener el archivo sudoers contiene una línea que permite que la secuencia de comandos a ejecutar por este grupo. Por último agregar el grupo a la lista de cuentas que tenga que ejecutar la secuencia de comandos.

A continuación, la secuencia de comandos se puede ejecutar solamente por root o cualquier cuenta que tenga el grupo especial en el conjunto de grupos después de suministrar la contraseña de cuenta en el inicio.

Sudo Manual para otras opciones.

desea autenticar con PAM. Hay una ejemplo aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top