首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >以超级用户身份使用python脚本运行linux系统命令

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

Stack Overflow用户
提问于 2009-02-24 19:32:21
回答 5查看 28.4K关注 0票数 18

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

代码语言:javascript
复制
sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile

但是我得到了一个错误:

代码语言:javascript
复制
sudo: sorry, you must have a tty to run sudo

我想以一种非人类的方式运行前面提到的sudo命令(意思是,我从一个python脚本运行这个系统命令)。那么如何让这个命令以编程方式运行呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
复制
<username>  ALL = NOPASSWD: /etc/init.d/postfix

或者类似的东西。

票数 20
EN

Stack Overflow用户

发布于 2009-02-24 19:43:45

代码语言:javascript
复制
#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权限限制为某些组。

票数 4
EN

Stack Overflow用户

发布于 2009-03-06 13:20:55

为了回答这个错误:“sudo:对不起,您必须有一个tty才能运行sudo",我们在sudoers文件中有一个名为"Defaults requiretty”的设置。我试着把它注释掉,它起作用了:D。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/583216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档