微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我已经得到了我的机器上安装的后缀,我正在以编程方式更新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脚本运行这个系统命令)。 那么如何让这个命令以编程方式运行?

bash脚本不会将标志分配给variables

在linux上使用信号的IPC

线程ID与线程句柄

Centos kernel-devel安装后不可用

如何获得debuggingpostgres的权限?

PHP的图像上传使用POST

拔掉RaspBerry Pi后导入模块时出现Python EOFerror

是否有可能实时监控Linux下的所有系统调用

Linux中的Firebird UDF设置为通过引用返回时崩溃服务器

使用PHP-FPM的HOSTALIASES

你可以运行你自己的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。

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

这当然几乎总是不是一个好主意,因为密码是纯文本的。

如果你要在python中这样做,你应该做下面的事情:

在你调用shell命令的行之前写下这个命令

os.setuid(os.geteuid())

那么你可以调用没有“sudo”前缀的shell命令

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐