我正在尝试使用 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 用户运行这个命令时,它起作用了。
谁能告诉我这里的问题是什么?
最佳答案
这应该可以通过将 webmaster
-user 添加到 /etc/sudoers
文件中并简单地接受该用户使用您愿意使用的命令来实现。我不建议直接在你的 php 中使用 sudo 命令,因为你可能必须将密码存储在某个地方,当然你不希望这样!您不希望在某个地方或其他您不希望对您的代码拥有 root 权限的开发人员意外发布您的密码。
仅使用 root 命令的另一个大缺点是,当您的代码中存在安全漏洞时,我可以通过表单等方式运行 sudo 命令。对权限要非常小心。
- 授予普通用户root权限:http://www.debian-administration.org/articles/33
附言。我是 SSH 的新手,也是设置用户权限的新手,所以如果我错了,请纠正我。但这就是我所知道的。
关于php - 如何从 PHP 以 root 权限运行 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030230/