【问题标题】:Executing PHP shell command requires sudo access [duplicate]执行 PHP shell 命令需要 sudo 访问权限 [重复]
【发布时间】:2013-07-01 23:17:54
【问题描述】:

我已经编写了PHP代码来执行shell命令

<?php exec("phing"); ?>

这在 浏览器 中根本不起作用。

但我分析的是,它运行相同的命令需要“sudo”权限。我不确定如何让我的 PHP 文件以 sudo 的形式执行此命令?

请指导

【问题讨论】:

  • phing 命令吗?
  • 为什么要从php执行phing?
  • @jcsanyi:感谢您的信息,今天来了解新事物。
  • phing 是 PEAR 内置的 PHP 自动构建系统。

标签: php command-line exec sudo phing


【解决方案1】:

第一个问题是您要在什么样的服务器上运行它?是你自己的机器吗?共享主机?

可能不是它需要sudo,而是它需要一些您的PHP脚本没有的权限,而sudo是解决它的一种方法。

解决此问题的更好方法是确定您的脚本以哪个用户身份运行(可能是nobody?)并确保phing 需要访问的文件归同一用户所有。这可能就像通过 FTP 程序更改文件所有权一样简单。

另外,不要忘记仔细检查您是否确实在您认为自己所在的目录中。


要获取其中的一些信息,请尝试运行以下 PHP 文件:

<pre>
<?php
passthru('id -a');    // figure out what user we're executing as
passthru('pwd');      // figure out what directory we're in
passthru('ls -l .');  // look at the permissions set on the current directory
?>
</pre>

【讨论】:

  • 谢谢。我从这个脚本中得到的信息是:_www 是用户/_www 是组;当前工作目录具有完整的 RWX 访问权限/仍然是同样的问题。 (注意,我拥有这个文件夹到_www grp。)
【解决方案2】:

执行 php 时,您可能不会(可能不会)在任何特定目录中。尝试指定绝对路径&lt;?php exec("/usr/bin/phing"); ?&gt; 另外,您的意思是ping 而不是phing

如果网络服务器有 sudo 访问权限(一个非常糟糕的想法)而没有密码(一个非常糟糕的想法!!!)来运行这个命令,那么你需要将你的代码更改为 &lt;?php exec("/usr/bin/sudo phing"); ?&gt;

为了能够运行 sudo,您需要计算机管理员的帮助。我怀疑您的管理员会允许这样做,因为给网络服务器 sudo 访问权限是有风险的 - 需要做很多工作来确保网络服务器没有任何类型的管理员权限。

【讨论】:

  • +1,始终将可执行文件移动到 PHP 可以运行的位置(或在非根区域设置适当的权限)。
  • 请注意,/etc/sudoers 可以配置为允许网络服务器用户执行此phing 命令。仍然不是一个好主意,但更安全。
  • 其 phing 标准构建系统;即使我试过这个;对我没有帮助。我正在使用 macmini ;所以在 apache 中,我什至尝试授予对“_www”(apache 用户)的完全权限。 (在执行此操作时,我在 sudoers 文件中遇到了语法错误;所以现在我无法编辑它;这是不同的问题)但它从未奏效。
  • @user769456 始终使用visudo 来编辑 sudoers 文件 - 它会在保存之前检查语法,防止您像那样被锁定。
  • @user769456 请参阅this question on ServerFault 以获取修复 sudoers 文件的帮助。