使用python脚本以超级用户身份运行linux系统命令

我已经在我的机器上安装了postfix,并且正在以编程方式更新virtual_alias(使用python)(在某些操作上)。 一旦我更新/ etc / postfix / virtual_alias中的条目,我正在运行命令:

sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile
但是我收到错误:
sudo: sorry, you must have a tty to run sudo

我想以非人为的方式运行提到的sudo命令(也就是说,我正在从python脚本运行此系统命令)。 那么如何让这个命令以编程方式运行?


您可以以root身份运行您的python脚本 - 那么您将不需要添加特权来重新加载postfix。

或者,您可以配置sudo以不需要/etc/init.d/postfix的密码。

sudo配置(通过visudo)允许NOPASSWD:允许没有密码的命令。 请参阅http://www.sudo.ws/sudo/man/sudoers.html#nopasswd_and_passwd

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

或类似的东西。


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

用setuid-ed程序包装你的命令。 这将让任何用户重新启动后缀。 您当然可以进一步限制对某些组的执行权限。


要回答这个错误:“sudo:抱歉,你必须有一个tty才能运行sudo”,我们在sudoers文件中有一个名为“Defaults requiretty”的设置。 我试着评论它,它的工作:D。

链接地址: http://www.djcxy.com/p/77189.html

上一篇: Run a linux system command as a superuser, using a python script

下一篇: Reduce harmonics generating a pure tone in Java