【问题标题】:How to execute a program from a php web page?如何从 php 网页执行程序?
【发布时间】:2012-07-02 15:24:58
【问题描述】:

总结

我在安装了某个程序的 Linux 机器上运行 apache。我想从 php 页面调用程序并获取输出。

特殊限制

程序需要某些环境变量才能运行,例如LD_LIBRARY_PATH 带有库的路径和额外的变量。该环境是为计算机上的用户 X 定义的,该用户不是 apache 用户。

建议的选项

到目前为止,我已经想到了以下选项(并不意味着它们都是智能或安全的):

  1. 允许用户 apache 以用户 X 的身份运行程序(以允许拥有完整环境的方式)。食谱 ?
  2. 修改用户apache的环境。我不明白怎么做,因为 apache 是 nologin 用户。
  3. 以具有适当环境的用户身份通过​​ SSH 连接到另一台计算机。这意味着在 Web 服务器和本机之间没有密码(公钥/私钥)连接。危险吗 ?

问题

  • 我是否忽略了更简单或更好的选择?
  • 您会使用什么选项以及为什么?

【问题讨论】:

  • 2.听起来像是最好的选择,但我不知道该怎么做 - 但肯定可以在启动时为用户设置环境变量?够了吗?
  • 是的,尽管其他用户已经以标准方式设置就足够了,因此我更愿意重用它。如果我必须这样做,我还可以在 PHP 中调用程序时传递环境变量。

标签: php ssh exec sudo


【解决方案1】:

如果您知道需要设置的环境变量(值),您可以简单地将它们添加到您的 exec 中

exec('LD_LIBRARY_PATH="/you/paths"; OTHER_VAR="baz"; /your/bin');

这将使用给定的 ENV 变量集执行 /your/bin,但作为 apache 用户,而不是用户 X。如果程序需要以特定用户身份运行,SSH 似乎不是一个坏主意。

【讨论】:

    【解决方案2】:

    您可以完全控制这个平台吗?

    您可以查看suexec,或mpm-iTK

    您可以在虚拟主机中配置上述内容,并将运行设置为可以访问您的二进制文件的用户或组。

    在您当前的设置中,您可以创建一个新组,将 apache 用户/组分配给该组,将组应用于您要执行的具有读/写或读/执行权限的二进制文件,并让好时光角色.

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 2017-08-15
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多