【问题标题】:Execute shell commands with sudo via PHP通过 PHP 使用 sudo 执行 shell 命令
【发布时间】:2013-07-26 13:54:10
【问题描述】:

到目前为止,我的搜索已经显示了在尝试从 PHP 中执行 sudo'd 命令时可能出现的安全漏洞。

我当前的问题是我需要通过 PHP 的 exec() 函数在我的工作 Web 服务器上以 sudo 的形式运行 bash 脚本。我们目前托管的网站不到 200 个。将执行此操作的网站仅限于从我办公室的 IP 地址访问。这会消除任何可用解决方案带来的任何潜在安全问题吗?

其中一种方法是将 apache 用户添加到 sudoers 文件中,我认为这将适用于整个服务器,因此仍会在所有其他网站上造成问题。

是否有任何解决方案在我们办公室访问受限的网站上使用时不会造成安全威胁?

提前致谢。

编辑:简要背景

以下是我想要达到的目标的简要说明。我工作的公司为旅游相关业务开发网站,等等。在创建新网站时,我需要设置一个托管包,其中包括:为新站点创建目录结构,创建一个包含在 httpd.conf 中的 apache 配置文件,添加一个新的 FTP 用户,创建一个新的与网站 CMS 一起使用的数据库等等。

目前我在服务器上有一个 bash 脚本,它创建目录结构、添加用户、创建 apache 配置文件并优雅地重新启动 apache。这只是一部分,我想做的是在 PHP 脚本中使用这个 shell 脚本,以一种易于使用的方式自动化整个网站生成过程,为其他同事和一般效率。

【问题讨论】:

    标签: php linux apache sudo shell-exec


    【解决方案1】:

    您至少有 4 个选项:

    1. 将 apache 用户添加到 sudoers 文件中(并限制它运行 one 命令!)
      • 在这种情况下,您的 php-apps 中的一些安全漏洞也可能会运行脚本(例如,如果它们可以包含调用 php - 或者甚至通过使用另一个也调用脚本 mod_rewrite 的 url 来绕过对您的 ip 的限制)
    2. 使用s 位标记脚本
      • 危险,不要这样做。
    3. 运行另一个仅绑定到本地接口且无法从外部访问的 Web 服务器
      • 这是我首选的解决方案,因为调用 php 的链接可以通过主网络服务器的链接访问,并且可以单独处理安全性。您甚至可以为此服务器创建一个新用户。一些简单的服务器可以完成这项工作,例如 python 和 perl 的服务器模块。甚至没有必要在您的 php 安装中启用 exec!
    4. 运行一个守护进程(例如,inotify 来监视文件事件)或读取某个文件或 db-entry 然后运行命令的 cronjob
      • 这可能太复杂并且有缺点,即守护程序无法检查哪个脚本生成了条目。

    【讨论】:

    • 没有其他 URL 将使用此脚本,请参阅我上面的编辑以了解该脚本的确切作用。它仅供内部使用,所有客户端网站都不会调用 shell 脚本。这会对选项 1 的安全问题产生任何影响(这似乎是最简单的)。
    • @William Stewart:至少这是你想要的!如果某些 php 软件对调用 shell 脚本的 php 脚本具有文件系统读取权限,并且该软件中的某些安全问题允许外部用户包含您的 php 文件(允许执行 shell 脚本),那么该脚本可以执行它!
    • urzeit 的好答案。我喜欢选项 4,其中 PHP 脚本将挂起的作业记录到文件中,然后一个 cron 作业或守护程序(以必要的权限运行)将执行这些作业。如果 PHP 脚本设置为在没有从他的 IP 调用时立即退出(通过检查 $_SERVER['REMOTE_ADDR']),并且服务器上没有其他 PHP 脚本可以写入该文件,那么我看不到如何这可能会受到影响。
    • 如果我要使用 cronjob 从我从 PHP 脚本编辑的文件中运行挂起的作业列表,我将如何让 cronjob 在作业文件更改后立即运行。我以前对cron的了解仅限于基于时间的调度,有没有办法在文件更改时运行cronjob?每隔这么多秒运行一次 cronjob 肯定是大材小用而且效率低下吗?
    • @William Stewart:你是对的。 Cron 仅限于基于驯服的触发命令。也许 inotify 是您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2018-10-06
    • 2015-08-18
    • 2011-08-03
    相关资源
    最近更新 更多