我已经得到了我的机器上安装的后缀,我正在以编程方式更新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的权限?
拔掉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] 举报,一经查实,本站将立刻删除。