【问题标题】:How to run a shell script with root privileges from PHP?如何从 PHP 以 root 权限运行 shell 脚本?
【发布时间】: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 究竟是哪个文件?顺便说一句,我 chmoded adddomain.shvadddomain 和我的 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


【解决方案1】:

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

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

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

【讨论】:

  • 我不关心安全性,因为我正在使用它的开发环境。我希望代码和权限能够简单地工作!
  • 关于你提到的密码部分,我想我可以使用无密码sudo 来防止在代码中使用明文密码。
  • 您很担心,但您希望它能够简单地工作。我想你的意思是I'm not concerned about security ...
  • 对不起我的错 ;) 我的意思是我不关心。
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2011-09-01
  • 2014-09-16
  • 1970-01-01
  • 2015-02-02
  • 2011-05-09
相关资源
最近更新 更多