使用sudo通过PHP执行shell命令

时间:2013-07-26 13:54:11

标签: php linux apache sudo shell-exec

到目前为止,我的搜索已经显示了在尝试从PHP中执行sudo'd命令时将会发生的潜在安全漏洞。

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

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

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

提前致谢。

修改:简要背景

这里简要介绍了我正在努力实现的目标。我工作的公司为旅游相关业务开发网站等等。在创建新网站的那一刻,我需要设置一个托管包,其中包括:为新站点创建目录结构,创建一个包含在httpd.conf中的apache配置文件,添加一个新的FTP用户,创建一个新的用于CMS网站的数据库,仅举几例。

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

1 个答案:

答案 0 :(得分:1)

您至少有4个选项:

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