我已经在我的机器上安装了postfix,并且我正在以编程方式(使用python)(在一些操作中)动态更新virtual_alias。一旦我更新了/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脚本运行这个系统命令)。那么如何让这个命令以编程方式运行呢?
发布于 2009-02-24 19:39:15
您可以以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
或者类似的东西。
发布于 2009-02-24 19:43:45
#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程序中。这将允许任何用户重新启动postfix。当然,您可以进一步将execute权限限制为某些组。
发布于 2009-03-06 13:20:55
为了回答这个错误:“sudo:对不起,您必须有一个tty才能运行sudo",我们在sudoers文件中有一个名为"Defaults requiretty”的设置。我试着把它注释掉,它起作用了:D。
https://stackoverflow.com/questions/583216
复制相似问题