通过PHP使用sudo执行shell命令


Execute shell commands with sudo via PHP

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

我目前的问题是,我需要通过PHP的exec()函数在我的工作web服务器上运行一个bash脚本作为sudo。我们目前托管的网站不到200个。将要做这件事的网站被限制为只能从我办公室的IP地址访问。这会消除任何可用解决方案带来的任何潜在安全问题吗?

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

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

提前谢谢。

编辑:简要背景

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

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

您至少有4个选项:

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