【发布时间】:2013-03-13 03:15:16
【问题描述】:
我目前在 CentOS 机器上托管 Drupal 6 站点。 Drupal (CMS) 配置包含几十个第三方模块,它们不应该是forked 作为一般的最佳编码实践。但是,其中一些模块使用php exec 命令才能正常运行。
该站点允许管理员通过 UI 配置在任何页面中嵌入 php 代码 sn-ps,前提是他们有权访问 php 代码输入格式。我需要让管理员可以使用这种输入格式,因为有几个节点(页面)和面板窗格使用小型、无害的 php 代码 sn-ps,例如将特定表单嵌入到内容区域中。
问题是,如果有人要入侵管理员帐户,那么他们可以在站点上运行任意 php 代码,从而通过 php 的 exec、passthru 等运行 shell 命令。有什么办法,从操作系统级别,以限制 php 可以将哪些 shell 命令传递给机器?这可以通过从php限制某些程序的文件权限来完成吗?
注意:我不能使用 php.ini disable_functions 指令,因为在许多情况下我仍然需要 exec 才能正常运行,其中模块使用某些 shell 命令,例如视频编码,例如。
【问题讨论】:
-
在运行这些 php sn-ps 的代码中,您可以检查它们传递的命令类型,并且可以使用要排除的命令的黑名单(阻止运行)。一般来说,我不会授予用户(甚至管理员)在我的服务器上运行 PHP 代码而不检查该代码的权利。希望有帮助
-
@HasTaiar - 感谢您抽出宝贵时间在这里发表评论。由于您无法拦截
exec命令,是否总是有办法绕过检查传递的命令?例如动态创建的字符串$a = 'comm'; $b = 'mand'; exec($a . $b); -
可能有点矫枉过正,我不知道具体如何配置,但你有研究过 SELinux 吗?
-
@Koterpillar - 感谢您提供该资源。我一定会看看的。
标签: php drupal command-line centos exec