如何使用PHP的root权限运行shell脚本?

时间:2012-12-25 11:31:06

标签: php shell centos exec sudo

我正在尝试使用vpopmail的vadddomain添加新的虚拟域。由于apache用户无法访问vpopmail的二进制文件,因此我无法直接从PHP exec('../bin/vadddomain...')访问。

我制作了一个shell脚本(adddomain.sh),如下所示:

#!/bin/bash
 cd /home/lxadmin/mail/bin
 ./vadddomain $1 postmaster_password

使用/etc/sudoers将此行添加到visudo(暂时忘记安全性):

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用户运行此命令时,它可以工作。

谁能告诉我这里的问题是什么?

1 个答案:

答案 0 :(得分:1)

这应该可以通过将webmaster - 用户添加到/etc/sudoers文件中,并且只是接受该用户使用您愿意使用的命令。我不建议直接在你的php中使用sudo命令,因为你可能必须存储这个地方的密码,当然你不需要!您不希望在某个地方意外发布您的密码,或者您不希望对您的代码拥有root权限的其他开发人员。

简单地使用root命令的另一个重大缺点是,当您的代码中存在安全漏洞时,我可以通过例如表单运行sudo命令。对这些特权要非常小心。

聚苯乙烯。我是SSH新手并设置用户权限,所以如果我错了请纠正我。但这就是我所知道的。