是否可以限制php在操作系统级别通过exec传递的命令?

Aii*_*ias 11 php command-line drupal centos exec

我目前在CentOS机器上托管Drupal 6网站.Drupal(CMS)配置包含几十个不应该作为一般最佳编码实践分叉的第三方模块.但是,其中一些模块使用phpexec命令才能正常运行.

该站点允许管理员通过UI配置在任何页面中嵌入php代码片段,并授予他们可以访问php代码输入格式的权限.我需要将此输入格式保留给管理员,因为有几个节点(页面)和面板窗格使用小的,无害的PHP代码片段,例如,将特定表单嵌入到内容区域中.

问题是,如果有人妥协的管理员帐户,然后他们可以在网站上运行任意PHP代码,从而通过PHP的运行shell命令exec,passthru等有什么办法,从操作系统层面,限制什么shell命令php可以传递给机器吗?这可以通过限制从PHP的某些程序的文件权限来完成吗?

注意:我不能使用php.ini disable_functions指令,因为exec在许多情况下我仍然需要正常运行,例如,模块使用某些shell命令,例如视频编码.

Sve*_*ven 9

如果您的管理员帐户被黑客入侵,那么您将注定失败.你正试图减少注定,但这不会奏效.

禁用exec()

这只是能够调用系统的所有函数的一小部分.有很多更多,比如passthru(),shell_exec(),popen(),proc_open(),反引号运算符,依此类推.无济于事.

限制可用的可执行文件

只有在攻击者无法携带自己的可执行文件时才会起作用.但是file_put_contents()可以将可执行文件写入硬盘,然后可以调用它.也无济于事.

PHP本身不会造成任何伤害,可以吗?

错误.在服务器上执行操作exec()似乎是最好的想法,但PHP本身足够强大,可以对您的服务器和连接到它的任何东西造成严重破坏.

我认为唯一真正的解决方案是:

不要让您的管理员帐户被黑客攻击.

如果他们被黑了,就能立刻知道.能够追溯到管理员的攻击.能够知道攻击者对您的计算机做了什么,以便您可以撤消它.一个非常重要的部分是您实现了一个审计跟踪记录器,可以将其数据保存在不同的计算机上.

并且您可能首先对谁可以以管理员身份登录实施更严格的限制.例如,如果您确定某个管理员始终使用其本地ISP的IP范围来工作,则可能无需允许全世界的IP范围登录.至少,如果没有预料到的话(并且除非你在中国经营:-)),请打电话通知其他人正在进行中国登录.

并且有两个因素身份验证.您可以使用其他登录代码向手机号码发送短信.或者,您可以通过实施Google或Facebook身份验证来完全外包登录信息.这些玩家已经拥有支持这一点的基础设施.

此外,您对内部工作的抵抗力更强.人们确实重视他们的个人社交网络登录高于其雇主的登录.获取某人的Facebook密码平均需要30美元,但公司登录已经共享8美元.去搞清楚...


jmk*_*yes 7

要回答您的问题:理论上,如果您使用PHP可以运行命令的极其受限制的帐户创建用户帐户,则可以将安装调整为更安全.但是,真正的问题是管理员用户能够执行任意命令.如果发生这种情况,您的手上会出现明显更大的问题.

这里真正的解决方案是:

  • 从Drupal中提交和运行任意代码的能力是一个很大的风险,你可以通过不这样做来缓解.我强烈建议重新设计那些"无害"的代码,因为它们会导致妥协; 任意代码执行只是一种利用,还有许多其他人需要担心.
  • 需要运行shell命令的模块也是重要的安全漏洞.在某些情况下,我已经能够分叉/补丁或替换执行命令的模块与不执行命令的模块,但在某些情况下(例如视频编码)无法避免.在那种情况下,我会设置一个非常有限的后端服务,前端可以与之通信.这将您的顾虑分开,让Drupal完成它的目的:管理和提供内容.