【问题标题】:Executing a bash script from a web page via PHP's shell_exec(), which requires another user's perms?通过 PHP 的 shell_exec() 从网页执行 bash 脚本,这需要其他用户的权限?
【发布时间】:2012-11-30 16:48:03
【问题描述】:

我在 Centos 机器上有几个 bash 脚本,用于执行基本的服务器管理工​​作,例如重启服务等。我以标准用户身份运行这些脚本,同时也是脚本的所有者。

我尝试使用 apache 用户在 PHP 中使用 shell_exec() 运行这些,但它根本不起作用 - 我猜它没有足够的权限(即使使用 775 并且在正确的组中! ) 来运行我想要的一切。

我已尝试编辑 sudoers 文件,授予 apache 运行脚本调用的权限,但它仍然无法正常工作,并且我看不到任何错误消息。

有什么想法吗?如何从需要其他用户运行的网页中触发脚本?

【问题讨论】:

  • 确保也检查 SE Linux,因为这是我的问题。

标签: php linux apache bash centos


【解决方案1】:
  1. 检查在哪个用户下运行 apache(对于 debian 是 www-data)
  2. 在 sudoers 列表中添加 www-data 以执行您喜欢的文件
  3. 检查 /etc/passwd 中哪个 shell 有 www-data 用户(您需要提供有效的 shell)
  4. 使用 /bin/bash -x 运行脚本(肯定会输出)

【讨论】:

  • 外壳做到了。我为 apache 提供了 /bin/bash shell,并添加了访问 sudoers 文件所需的各种脚本。然后,我运行“sudo -u otheruser /bin/bash /path/to/script.sh”,它可以工作。谢谢!
【解决方案2】:

确保安全模式已关闭。还要验证用户是您期望的用户:

<?php echo exec('whoami'); ?>

【讨论】:

  • 是的,whoami 返回“apache”。
  • apache 用户有shell吗?以用户 apache 的身份从 shell 提示符测试命令。 Apache 用户通常没有 shell。
  • 是的,它需要一个外壳。谢谢!
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多