青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 每天坚持一篇内容难不难人为什么要去博物馆 »

使用Chroot解决PHP的运行安全问题

  近些日子,小蒋的一篇博文引起了广大主机商的关注。其原因是小蒋运营的创智主机被提交了漏洞到乌云网上在这篇文章中小蒋给出了解决方法,就是采用禁用函数的方法来保证服务器环境的安全。

  但是,禁用函数真的是最好的选择么?不是的!

  AMH面板的开发者Amysql告诉我们,更好的选择是Chroot!

  AMH面板是一款LNMP面板,一方面,为了方便版本升级,另一方面,面板是开发者一个人开发的,所以AMH没有像kangle,WDCP,LUM,webmin等采用二进制文件实现平台的环境,而是使用基于AMP的PHP程序来控制平台。这样,就要考虑到PHP的安全问题了。由于PHP写成的程序,所以需要大量的的使用exec,shell_exec两个函数来实现面板和系统的信息交换处理。显然,小蒋给出的限制函数的方法并不适合AMH这样的面板。那么,Amysql如何解决PHP的运行安全问题呢?

  Amysql采用了这样的方法。对于AMH下的虚拟主机,一律开启Chroot来保证安全,而控制台PHP则关闭chroot来保证面板的正常运作。

  说了这么多,那么什么是Chroot呢?

  据维基百科的词条解释,Chroot本是Unix下的一个命令,但是,在PHP-FPM中,也是引入了这一功能。

  维基词条:chroot是在unix系统的一个操作,用于对当前的程序和它的子进程改变真实的磁盘根目录。

  Chroot的工作原理是什么呢?

  由于LNMP环境下,PHP-FPM与Nginx的通信只能通过CGI实现,所以,如果你在FPM设置中对文件的根目录进行修改,那么,你的PHP程序就无法跨越这个指定的根目录。而面板所在的虚拟主机,由于没有开启Chroot,所以使用的根目录依然是系统的根目录 /

  具体解释一下?

  就拿我用的AMH面板的控制台和普通虚拟主机来说明。控制台文件放在/home/Wwwroot/Index/Web文件夹下,普通主机的文件放在/home/wwwroot/Domain/web文件夹下。对于控制台程序,由于没有开启Chroot,所以,这个PHP文件的实际位置和运行位置相同,都是/home/wwwroot/Index/web/,而其根目录就是/;对于普通虚拟主机,开启Chroot,那么,虽然,运行的文件的位置是/home/wwwroot/domain/web/index.php,但是经过Chroot的导向,在PHP程序中,实际认为的文件地址是/web/index.php。同时在/home/wwwroot/domain/为了使入侵者认为自己进入的是根系统,而仿照Unix的文件夹命名规则,创建了etc,usr,tmp,lib等文件夹,如同为PHP程序创建了一个沙盒.所以,使用Chroot的用户不用害怕中国菜刀,因为他只能在沙盘内起作用,无法对主系统产生影响,从而造成经济损失。

  沙盒(英语:sandbox),有时也称为沙箱,是为一些来源不可信、具备破坏力或无法判定程序意图的程序提供试验的环境。然而,沙盒中的所有改动对操作系统不会造成任何损失。通常,这种技术被计算机技术人员广泛使用,尤其是计算机杀毒软件行业,沙盒是一个观察计算机病毒的重要环境。

  我们都知道,在类Unix系统中,所有程序,甚至设备,都是由文件表示,我们所使用的ls,wget命令,事实上都对应着一个特定的可执行文件,而当我们使用Chroot后,由于/home/wwwwroot/domain/usr下没有相应的文件,也就无法执行相应的命令。从而保证系统信息的安全。

  与禁用函数相比,Chroot有什么优点呢?

  禁用函数是针对整个PHP程序而言的,所有需要通过PHP程序进行解析的文件,都会受到禁用函数的设置。网站程序不同,那么有可能需要的函数不同,不同的虚拟主机无法单独设置。而Chroot可以根据不同的虚拟主机,进行特异化设置。对于需要使用特殊函数的程序,可以关闭Chroot,来保证网站程序的正常运转;程序不需要调用特殊的程序,就可以开启Chroot模式;如果只是要启用一个或两个特定的程序,你可以仿照如下的过程添加函数。比如说,当我们开启Chroot时,PHP程序是无法使用sendmail()函数来发信的,我们可以使用mini_sendmail替代sendmail来修复发信。

cd /home/wwwroot/www.ixiqin.com/
cp -P /bin/bash /bin/sh bin
cp /etc/passwd /etc/group etc
cd /tmp
wget http://centos.googlecode.com/files/mini_sendmail-1.3.6.tar.gz
tar xzf mini_sendmail-1.3.6.tar.gz
cd mini_sendmail-1.3.6
make
cp mini_sendmail /home/wwwroot/www.ixiqin.com/usr/sbin/sendmail

  以上代码,在/tmp目录下编译mini_sendmail,然后将生成的可执行文件复制到chroot后目录下相应位置,以保证发件系统的正常运行。

  非AMH用户如何使用Chroot功能

  如果你是AMH的用户,那你就省心了,因为Amysql将这个功能集成到了模块里,而且默认情况下每一个虚拟主机都是开启了安全模式的,你只需要在后台下载AMChroot模块,管理即可。如果你不是AMH用户,也可以使用这个功能,只需要修改Nginx和PHP-FPM的配置文件即可。由于要把domain站点限制在/home/wwwroot/domain,所以对于php-fpm,此网站根目录已经变成是/web,所以我们需要更改Nginx传递给php-fpm的网站根目录地址。

  找到fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,更改为fastcgi_param SCRIPT_FILENAME /web$fastcgi_script_name;同时,将php-fpm.conf文件中的Chroot改为chroot = /home/wwwroot/domain

  有什么需要注意的呢?

  Tips One:Chroot模式下,各种探针,如雅黑探针将会失效,报错。

  Tips Two:Chroot模式可用做在线shell模拟器,安全真实。

  综合以上分析,我建议,与其使用死板的禁用函数,我们为什么不试试更加好用的Chroot。

  来源:投稿,文章作者:西秦公子,原文链接



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/3864.html
  • 文章排行:
  • 1.莽荒纪5200
  • 月光博客从2004年开始(williamlong.info/archives/1.html)
    至今已经陪我们走过了10个年,实属不易。

    10年风云际会,有多少事情可以发生,中间必定有很多曲折和难
    免遭人误解,但月光都一直在坚持写博客。

    坚持写一个星期博客、一个月博客、三个月我们都能做到,但十年
    如一日的能有几人。博客作为弱势群体,作者只有一个人受限于知
    识面和兴趣,思维总有定势和枯竭的时候。所以月光的文章现在的
    质量有所下降,同时也在和其他博客合作,注入新鲜血液。

    我真的看到“但为君故, 沉吟至今”的这份坚持。我为这10年点赞。
    by mhj5200.C0M
  • 2014/5/27 14:17:02   支持(26)反对(8) 回复
  • 2.fuck
  • 不知所谓,月光开始关注小众文化了?是不是没啥发的了,天天高谈阔论的意淫有意思吗,网站关了吧
    123q1q 于 2014-7-15 6:38:27 回复
    早就发现这个问题了 呵呵 这博客是不行啦.
  • 2014/5/27 13:27:21   支持(18)反对(16) 回复
  • 3.不锈钢勾花网
  • 博主写的很好 支持一下
  • 2014/5/26 9:59:48   支持(10)反对(9) 回复
  • 4.bypat
  • Bypat代维工作室专注于为中小企业提供 - linux服务器代维,linux服务器维护, windows服务器代维, linux服务器环境配置,linux服务器环境配置,windows服务器环境配置,windows服务器维,服务器代维,服务器代维 护,windows服务器维护,服务器代维,linux技术服务,linux兼职运维,LAMP环境配置,LNMP环境配置,linux/windows 服务器代维,linux/windows服务器环境配置,linux/windows安全维护,linux/windows服务器安全配置等服务的专业性 工作室。

    服务器外包 服务器代维 网站代维 兼职维护 服务器维护 服务器安全代维 服务器租用 服务器安全

    Bypat运维工作室自2006年1月成了以来,已为中小企业及站长安装配置了超过20000台LAMP、LNMP服务器
    在配置LAMP、LNMP环境的同时,我们加入了诸多根据我们的八年行业经验总结出来的优化配置
    经过我们配置的服务器,基本上在访问量没有太大的变化或其它大变动下可以保证数年的稳定运行

    QQ: 联系 285691605

  • 2014/6/18 21:30:09   支持(11)反对(11) 回复
  • 5.Frank
  • 学习了,最近网站老是被黑。老烦了。
  • 2014/7/10 10:40:35   支持(9)反对(9) 回复
  • 6.babytomas
  • 这里没有考虑到 CGI 模式运行的主机呀,除了禁用函数以外、没有什么方法在 CGI 下有效的了 。。
    StarBrilliant 于 2014-5-26 20:09:31 回复
    CGI也可以chroot。
    StarBrilliant 于 2014-5-26 20:13:56 回复
    但是chroot不能防止上传webshell后篡改别的PHP用来挂马。
    当然,不光是PHP要chroot,Nginx/Apache、vsftpd等最好也要chroot。
    babytomas 于 2014-5-28 1:59:41 回复
    所以要根源上防止中国菜刀这类 webshell 的话还是禁用函数 + chroot 稳妥 。。
  • 2014/5/26 1:37:47   支持(12)反对(13) 回复
  • 7.许亚成博客
  • 每天必看的搏客,看完总觉得收获很大,谢谢搏主的分享。
  • 2014/5/26 16:17:48   支持(10)反对(12) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

相关文章

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.