Frage

Ich habe bekam postfix auf meinem Rechner installiert und ich virtual_alias programmatisch on the fly bin Aktualisierung (mit Python) (auf eine Aktion). Sobald ich den Eintrag aktualisieren in der Datei / etc / postfix / virtual_alias, ich bin mit dem Befehl:

sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile
But Ich erhalte die Fehlermeldung:
sudo: sorry, you must have a tty to run sudo

Ich mag den genannten Befehl sudo in einer nicht-menschlichen Art und Weise ausgeführt werden (das heißt, ich bin mit diesem System Befehl von einem Python-Skript.). So wie ich programmatisch diesen Befehl ausführen bekommen?

War es hilfreich?

Lösung

Sie entweder Ihre Python-Skript als root ausführen können selbst. - dann werden Sie nicht brauchen Privileg hinzufügen postfix neu zu laden

Sie können auch sudo so konfigurieren, dass kein Passwort für /etc/init.d/postfix benötigen.

sudo-Konfiguration (über visudo) ermöglicht NOPASSWD: Den Befehl ohne Passwort zu erlauben. Siehe http://www.sudo.ws/sudo/man/sudoers.html# nopasswd_and_passwd

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

oder etwas ähnliches.

Andere Tipps

#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");
}

Wickeln Sie Ihren Befehl in setuid-ed-Programm. Dies wird jeden Benutzer Neustart postfix lassen. Sie können ferner natürlich beschränken die Erlaubnis, bestimmte Gruppen ausführen.

Um den Fehler zu beantworten: „sudo: sorry, müssen Sie einen tty haben sudo zu laufen“, haben wir eine Einstellung „Defaults requiretty“ in sudoers-Datei bezeichnet. Ich habe versucht, kommentieren Sie es aus und es hat funktioniert. D

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

Das ist natürlich fast immer keine gute Idee, da das Passwort im Klartext ist.

Wenn Sie Gonna tun dies in Python sollten Sie nur Folgendes tun:

schreiben Sie diesen Befehl vor der Zeile, die Sie den Shell-Befehl aufrufen

os.setuid(os.geteuid())

dann, können Sie den Shell-Befehl aufrufen, ohne "sudo" Präfix

Siehe StackLick

Sie benötigen einen Benutzer zu gewähren, laufen Befehl sudo ohne Passwort.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top