Total Pageviews

Wednesday 21 May 2014

PHP的安全设置:比safemode更好用的Chroot

AMH的PHP在默认情况下,是没有开启安全模式和禁用函数的。
可能很多人都会认为,这很不安全,并举例,你看军哥的lnmp包就禁用函数了,这说明不禁用不安全。
但是,AMH不禁用函数是有原因的

    AMH面板基于exec命令构建,禁用该函数会导致无法使用面板。
    AMH整个一键包是包括一个lnmp包,一个控制台程序,一个面板,面板是通过exec命令来完成各项工作的,如果你禁用了该函数,会导致面板工作不正常。
    安全模式也会影响到AMH的运行
    安全模式会限制一部分函数的使用,具体大致有以下一些函数

 chdir()
chgrp()     chmode()    chown()
copy()     dbase_open()    dbmopen()
dl()     exec()     filepro()
filepro_retrieve()   filepro_rowcount()   fopen()
header()    highlight_file()       link()     mail()
max_execution_time()   mkdir()     move_uploaded_file()
mysql_*     parse_ini_file()   passthru()
pg_lo_import()    popen()     posix_mkfifo()
putenv()    rename()    zmdir()
set_time_limit()   shell_exec()    show_source()
symlink()    system()    touch()

在安全模式开启时,这些函数的使用将会受到限制,而AMH面板的配置文件修改功能,配置文件读取功能都会因为用户不同而受到影响。(见参考资料1)
AMH控制台的调用也会因此受到影响而导致面板失效。
Chroot比安全模式和禁用函数更方便。
出于功能上的考虑,AMH没有使用安全模式和禁用函数来保证安全。但是,安全问题不容忽视,因此,AMH选择了一种在我看来比安全模式更好的模式---Chroot!
Chroot,Change Root,顾名思义,就是修改了根目录路径.

    chroot机制即将某软件运行限制在指定目录中,保证该软件只能对该目录及其子目录的文件有所动作,从而保证整个服务器的安全。在这种情况下,即使出现黑客或者不法用户通过该软件破坏或被侵入系统,Linux
    系统所受的损坏也仅限于该设定的根目录,而不会影响到整个系统的其他部分。 将软件 chroot
    化的一个问题是该软件运行时需要的所有程序、配置文件和库文件都必须事先安装到 chroot 目录中,通常称这个目录为 chroot“监牢”。

AMH限制了www用户的根目录为/home/wwwroot/域名/,这样/home/wwwroot/域名就成了PHP程序的"监牢",PHP运行时,就是以该目录为根目录,来进行访问。而这样做,就如同为WWW用户创建了一个个沙盒,所有的操作都是在这个目录下,十分安全。

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

在Chroot模式下,假如你想访问的是系统的/etc/my.cnf文件,由于Chroot的存在,你访问的实际上是/home/wwwroot/域名/etc/my.cnf,而实际上这个文件是不存在的,所以,就无法修改my.cnf。
也就是说,你在Chroot模式下访问的文件,都是主机管理制者想要让你使用的文件,如果他不想让你用,就删除相关文件即可。而当你想要让用户访问一部分文件时,只需要把这部分文件复制到相关目录下即可。
当然,复制完整的目录太麻烦了,你只需要关闭chroot即可。
这样操作,既可以保证系统的安全,也可不大范围的影响其他用户的使用,方便快捷。
这一功能在AMH中以模块形式提供:AMChroot
如此看来,Chroot是比安全模式和禁用函数好多了。
非AMH面板用户该如何启用chroot 呢?
对于Lnmp 环境来说,你只需要修改你域名的PHP-fpm配置文件,将chroot 修改为chroot = /home/wwwroot/example.com,这样PHP 的root 目录就成了/home/wwwroot/example.com

相关阅读:
  1. 理解Chroot-IBM文档库
  2. Chroot的Man Page
  3. Chroot的维基词条