Exécuter une commande système Linux en tant que superutilisateur, en utilisant un script python
J'ai postfix installé sur ma machine et je me suis mise à jour virtual_alias à la volée par programme(en utilisant python)(sur certains d'action). Une fois que j'ai mise à jour de l'entrée dans /etc/postfix/virtual_alias, je suis en cours d'exécution de la commande:
sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile
Mais j'obtiens l'erreur:
sudo: sorry, you must have a tty to run sudo
Je veux lancer le mentionné commande sudo dans un non-humain moyen(sens, je suis en cours d'exécution de ce système de commande à partir d'un script python.). Alors, comment puis-je obtenir cette commande par programme?
source d'informationauteur None-da
Vous devez vous connecter pour publier un commentaire.
Vous pouvez soit exécuter votre script python en tant que root lui-même - alors vous n'aurez pas besoin d'ajouter le privilège de le recharger à postfix.
Ou vous pouvez configurer sudo pour ne pas avoir besoin d'un mot de passe pour
/etc/init.d/postfix
.de configuration de sudo (via visudo) permet NOPASSWD: pour autoriser la commande sans mot de passe. Voir http://www.sudo.ws/sudo/man/sudoers.html#nopasswd_and_passwd
ou quelque chose de similaire.
D'emballer votre commande en setuid-programme d'urgence. Cela permettra à tout utilisateur de redémarrer postfix. Bien sûr, vous pouvez également restreindre l'autorisation d'exécution de certains groupes.
Pour répondre à l'erreur:"sudo: désolé, vous devez disposer d'un terminal lancer la commande sudo", nous avons un réglage par Défaut requiretty" dans sudoers. J'ai essayé de lui en commentant et il a travaillé :D.
Bien sûr, cela est presque toujours pas une bonne idée car le mot de passe est en clair.
si tu vas le faire en python, vous devez juste faire ce qui suit:
écrire cette commande avant de la ligne que vous appelez la commande shell
ensuite, vous appelez la commande shell sans "sudo" préfixe