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命令,例如视频编码.
如果您的管理员帐户被黑客入侵,那么您将注定失败.你正试图减少注定,但这不会奏效.
这只是能够调用系统的所有函数的一小部分.有很多更多,比如passthru(),shell_exec(),popen(),proc_open(),反引号运算符,依此类推.无济于事.
只有在攻击者无法携带自己的可执行文件时才会起作用.但是file_put_contents()可以将可执行文件写入硬盘,然后可以调用它.也无济于事.
错误.在服务器上执行操作exec()似乎是最好的想法,但PHP本身足够强大,可以对您的服务器和连接到它的任何东西造成严重破坏.
我认为唯一真正的解决方案是:
如果他们被黑了,就能立刻知道.能够追溯到管理员的攻击.能够知道攻击者对您的计算机做了什么,以便您可以撤消它.一个非常重要的部分是您实现了一个审计跟踪记录器,可以将其数据保存在不同的计算机上.
并且您可能首先对谁可以以管理员身份登录实施更严格的限制.例如,如果您确定某个管理员始终使用其本地ISP的IP范围来工作,则可能无需允许全世界的IP范围登录.至少,如果没有预料到的话(并且除非你在中国经营:-)),请打电话通知其他人正在进行中国登录.
并且有两个因素身份验证.您可以使用其他登录代码向手机号码发送短信.或者,您可以通过实施Google或Facebook身份验证来完全外包登录信息.这些玩家已经拥有支持这一点的基础设施.
此外,您对内部工作的抵抗力更强.人们确实重视他们的个人社交网络登录高于其雇主的登录.获取某人的Facebook密码平均需要30美元,但公司登录已经共享8美元.去搞清楚...
要回答您的问题:理论上,如果您使用PHP可以运行命令的极其受限制的帐户创建用户帐户,则可以将安装调整为更安全.但是,真正的问题是管理员用户能够执行任意命令.如果发生这种情况,您的手上会出现明显更大的问题.
这里真正的解决方案是: