Domanda

postfix

Io ho installato sulla mia macchina e sto aggiornando virtual_alias al volo di programmazione (utilizzando python) (su una certa azione). Una volta ho aggiornare la voce nel file / etc / postfix / virtual_alias, sto facendo funzionare il comando:

sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile
But sto ottenendo l'errore:
sudo: sorry, you must have a tty to run sudo

Voglio eseguire il comando sudo citato in un modo non umano (significato, sto facendo funzionare questo comando di sistema da uno script python.). Allora, come faccio ad avere questa corsa comando di programmazione?

È stato utile?

Soluzione

È possibile eseguire lo script python come radice stessa -. Quindi non sarà necessario aggiungere privilegio per ricaricare postfix

In alternativa, è possibile configurare sudo per non avere bisogno di una password per /etc/init.d/postfix.

configurazione di sudo (tramite visudo) permette NOPASSWD: per permettere il comando senza una password. Vedere http://www.sudo.ws/sudo/man/sudoers.html# nopasswd_and_passwd

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

o qualcosa di simile.

Altri suggerimenti

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

Avvolgete il vostro comando nel programma setuid-ed. Questo vi permetterà di qualsiasi suffisso riavvio utente. Ovviamente si può ulteriormente limitare il permesso di esecuzione a determinati gruppi.

Per rispondere l'errore: "sudo: mi dispiace, è necessario disporre di un terminale per eseguire sudo", abbiamo un ambiente chiamato "Defaults requiretty" nel file sudoers. Ho provato a commentare fuori e ha funzionato:. D

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

Questo, naturalmente, non è quasi sempre una buona idea, come la password è in chiaro.

se hai intenzione di farlo in python si deve solo fare quanto segue:

scrivere questo comando prima della riga che si chiama il comando shell

os.setuid(os.geteuid())

dunque, si chiama il comando di shell senza il prefisso "sudo"

StackLick

È necessario concedere a un utente di eseguire comando sudo , senza password.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top