【发布时间】:2012-12-11 09:36:21
【问题描述】:
我正在尝试使用 vpopmail 的 vadddomain 添加新的虚拟域。由于apache 用户无法访问vpopmail 的二进制文件,我不能直接从PHP 中exec('../bin/vadddomain...')。
我做了一个shell脚本(adddomain.sh)如下:
#!/bin/bash
cd /home/lxadmin/mail/bin
./vadddomain $1 postmaster_password
并使用visudo将此行附加到/etc/sudoers(暂时忘记安全性):
ALL ALL=NOPASSWD: /home/lxadmin/mail/bin/adddomain.sh
我的 PHP 脚本中有这样的内容:
exec('sudo /home/lxadmin/mail/bin/adddomain.sh example.com', $output);
但这根本不起作用(域example.com 不会被添加到vpopmail)。
但是当我通过 SSH 和 root 用户运行这个命令时,它就可以工作了。
谁能告诉我这里有什么问题?
【问题讨论】:
-
@WaleedKhan 究竟是哪个文件?顺便说一句,我
chmodedadddomain.sh和vadddomain和我的 php 文件没有运气:( -
您确定要从您的 php 调用 root 命令吗?但我建议获取文件
/etc/sudoers并添加您想使用的命令给该特定用户。 debian-administration.org/articles/33 -
这里有三个建议:使用 -- 这样人们就不能将选项传递给 vaddomain!不要留下没有报价的 1 美元!
./vadddomain -- "$1" postmaster_password。在 cd 和 ./vadddomain 命令之间使用 &&(或设置 shell -e 选项),以防有人设法阻止 cd:ing 到 /home/lxadmin/mail/bin。然后他们可以通过在当前目录中创建自己的脚本并将其命名为 vaddomain 以 root 身份运行任何命令。 -
@potrzebie 感谢您提供这些非常好的建议,但我暂时不关心安全性。我希望命令只是简单地工作:p
标签: php shell centos exec sudo