Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PHP运行具有root权限的shell脚本?_Php_Shell_Centos_Exec_Sudo - Fatal编程技术网

如何从PHP运行具有root权限的shell脚本?

如何从PHP运行具有root权限的shell脚本?,php,shell,centos,exec,sudo,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 并使用visudo将此行附加到/etc/sudoers(暂时忘记安全性):

我正在尝试使用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
(暂时忘记安全性):

我的PHP脚本中有如下内容:

exec('sudo /home/lxadmin/mail/bin/adddomain.sh example.com', $output);
但这根本不起作用(domain
example.com
将不会添加到vpopmail)。 但当我通过SSH和root用户运行这个命令时,它就可以工作了


有人能告诉我这里有什么问题吗?

这应该可以通过将
网站管理员
-用户添加到
/etc/sudoers
文件中,并简单地接受该用户使用您愿意使用的命令来实现。我不建议在php中直接使用sudo命令,因为您可能需要将此命令的密码存储在某个地方,当然您不希望这样!您不希望在某个地方或其他开发人员无意中发布您的密码,因为您不想拥有代码的root权限

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

  • 授予普通用户root权限:

另外,我还不熟悉SSH,也不熟悉设置用户权限,所以如果我错了,请纠正我。但这就是我所知道的。

似乎类似于:@WaleedKhan到底是哪个文件?顺便说一句,我
chmod
ed
adddomain.sh
vadddomain
和我的php文件没有运气:(您确定要从php调用根命令吗?但我建议获取文件
/etc/sudoers
,并将您要使用的命令添加到该特定用户。这里有三条建议:使用--这样人们就不能将选项传递给vaddomain!不要将$1保留为不带引号的!
/vadddomain--“$1”postmaster_密码
。在cd和./vadddomain命令之间使用&&命令(或设置shell-e选项),以防有人试图阻止cd:ing发送到/home/lxadmin/mail/bin。然后,他们可以通过在当前目录中创建自己的脚本并将其命名为vaddomain来以root身份运行任何命令。@potrzebie感谢您提供了这些非常好的建议,但我现在不关心安全性。我只希望命令能够正常工作:pI不关心安全性安全性,因为这是我正在工作的一个开发环境。我希望代码和权限能够简单地工作!关于你提到的密码部分,我想我可以使用无密码
sudo
来防止在代码中使用清晰的密码。你很担心,但你只是想让它工作。我想你的意思是
我不关心se保安…
?对不起,我的坏;)我的意思是我不担心。
exec('sudo /home/lxadmin/mail/bin/adddomain.sh example.com', $output);