script programa para ejecutar desde cómo consola como comando archivos archivo python linux sysadmin sudo root

programa - ejecutar.py desde consola python



Ejecute un comando del sistema de Linux como superusuario, utilizando un script de Python (6)

He instalado Postfix en mi máquina y estoy actualizando virtual_alias sobre la marcha programáticamente (usando python) (en alguna acción). Una vez que actualice la entrada en el / etc / postfix / virtual_alias, estoy ejecutando el comando:

sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile Pero me sale el error:

sudo: sorry, you must have a tty to run sudo

Quiero ejecutar el comando sudo mencionado de una manera no humana (es decir, estoy ejecutando este comando del sistema desde una secuencia de comandos de python). Entonces, ¿cómo puedo ejecutar este comando mediante programación?


Para responder al error: "sudo: lo siento, debe tener un tty para ejecutar sudo", tenemos una configuración llamada "Predeterminados Requeretty" en el archivo sudoers. Intenté comentarlo y funcionó: D.


Puede ejecutar su script de Python como root en sí mismo, entonces no necesitará agregar privilegios para volver a cargar Postfix.

O puede configurar sudo para que no necesite una contraseña para /etc/init.d/postfix .

La configuración de sudo (a través de visudo) permite a NOPASSWD: permitir el comando sin una contraseña. Consulte http://www.sudo.ws/sudo/man/sudoers.html#nopasswd_and_passwd

<username> ALL = NOPASSWD: /etc/init.d/postfix

o algo similar.


Si vas a hacer esto en Python, debes hacer lo siguiente:

escriba este comando antes de la línea a la que llama el comando de shell

os.setuid(os.geteuid())

entonces, usted llama al comando de shell sin el prefijo "sudo"


Ver StackLick

Debe otorgar a un usuario que ejecute el comando sudo sin contraseña.


#include <unistd.h> #include <stdlib.h> // gcc -o reload_postfix reload_postfix.c // chown root reload_postfix // chmod +s reload_postfix int main( int argc, char **argv ) { setuid( geteuid() ); system("/etc/init.d/postifx reload"); }

Envuelve tu comando en el programa setuid-ed. Esto permitirá a cualquier usuario reiniciar postfix. Por supuesto, puede restringir aún más el permiso de ejecución a ciertos grupos.


import os os.popen("sudo -S /etc/init.d/postifx reload", ''w'').write("yourpassword")

Por supuesto, esto casi siempre no es una buena idea, ya que la contraseña está en texto sin formato.