php - 如何从 PHP 以 root 权限运行 shell 脚本?

标签 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(暂时忘记安全性):

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 命令。对权限要非常小心。

附言。我是 SSH 的新手,也是设置用户权限的新手,所以如果我错了,请纠正我。但这就是我所知道的。

关于php - 如何从 PHP 以 root 权限运行 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030230/

相关文章:

c++ - 使用命令行交互编写后台程序

ruby-on-rails - gitlab 迁移数据库但 db/schema.rb 没有改变

centos - 将多个 SMTP 电子邮件登录添加到 mailx

bash - 替换匹配两个模式的行

php - 在一张登录表单上登录两个不同的区域

php - Doctrine mysql 级联得到恢复

php - 使用查询模拟预加载

linux - ImageMagick/Perl 按像素宽度/高度对图像进行排序

linux - 为什么 Chef 找不到我的文件?

php - 让这个类符合依赖倒置原则