使用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