Chroot解決PHP安全的方法
AMH面板是一款LNMP面板,一方面,為了方便版本升級(jí),另一方面,面板是開(kāi)發(fā)者一個(gè)人開(kāi)發(fā)的,所以AMH沒(méi)有像kangle,WDCP,LUM,webmin等采用二進(jìn)制文件實(shí)現(xiàn)平臺(tái)的環(huán)境,而是使用基于AMP的PHP程序來(lái)控制平臺(tái)。這樣,就要考慮到PHP的安全問(wèn)題了。由于PHP寫(xiě)成的程序,所以需要大量的的使用exec,shell_exec兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)面板和系統(tǒng)的信息交換處理。顯然,小蔣給出的限制函數(shù)的方法并不適合AMH這樣的面板。那么,Amysql如何解決PHP的運(yùn)行安全問(wèn)題呢?
Chroot的工作原理是什么呢?
由于LNMP環(huán)境下,PHP-FPM與Nginx的通信只能通過(guò)CGI實(shí)現(xiàn),所以,如果你在FPM設(shè)置中對(duì)文件的根目錄進(jìn)行修改,那么,你的PHP程序就無(wú)法跨越這個(gè)指定的根目錄。而面板所在的虛擬主機(jī),由于沒(méi)有開(kāi)啟Chroot,所以使用的根目錄依然是系統(tǒng)的根目錄
就用AMH面板的控制臺(tái)和普通虛擬主機(jī)來(lái)說(shuō)明??刂婆_(tái)文件放在/home/Wwwroot/Index/Web文件夾下,普通主機(jī)的文件放在/home/wwwroot/Domain/web文件夾下。對(duì)于控制臺(tái)程序,由于沒(méi)有開(kāi)啟Chroot,所以,這個(gè)PHP文件的實(shí)際位置和運(yùn)行位置相同,都是/home/wwwroot/Index/web/,而其根目錄就是/;對(duì)于普通虛擬主機(jī),開(kāi)啟Chroot,那么,雖然,運(yùn)行的文件的位置是/home/wwwroot/domain/web/index.php,但是經(jīng)過(guò)Chroot的導(dǎo)向,在PHP程序中,實(shí)際認(rèn)為的文件地址是/web/index.php。同時(shí)在/home/wwwroot/domain/為了使入侵者認(rèn)為自己進(jìn)入的是根系統(tǒng),而仿照Unix的文件夾命名規(guī)則,創(chuàng)建了etc,usr,tmp,lib等文件夾,如同為PHP程序創(chuàng)建了一個(gè)沙盒.所以,使用Chroot的用戶不用害怕中國(guó)菜刀,因?yàn)樗荒茉谏潮P(pán)內(nèi)起作用,無(wú)法對(duì)主系統(tǒng)產(chǎn)生影響,從而造成經(jīng)濟(jì)損失。合肥網(wǎng)站建設(shè)公司
與禁用函數(shù)相比,Chroot有什么優(yōu)點(diǎn)
禁用函數(shù)是針對(duì)整個(gè)PHP程序而言的,所有需要通過(guò)PHP程序進(jìn)行解析的文件,都會(huì)受到禁用函數(shù)的設(shè)置。網(wǎng)站程序不同,那么有可能需要的函數(shù)不同,不同的虛擬主機(jī)無(wú)法單獨(dú)設(shè)置。而Chroot可以根據(jù)不同的虛擬主機(jī),進(jìn)行特異化設(shè)置。對(duì)于需要使用特殊函數(shù)的程序,可以關(guān)閉Chroot,來(lái)保證網(wǎng)站程序的正常運(yùn)轉(zhuǎn);程序不需要調(diào)用特殊的程序,就可以開(kāi)啟Chroot模式;如果只是要啟用一個(gè)或兩個(gè)特定的程序,你可以仿照如下的過(guò)程添加函數(shù)。合肥網(wǎng)站建設(shè)公司比如說(shuō),當(dāng)我們開(kāi)啟Chroot時(shí),PHP程序是無(wú)法使用sendmail()函數(shù)來(lái)發(fā)信的,我們可以使用mini_sendmail替代sendmail來(lái)修復(fù)發(fā)信。
cd /home/wwwroot/www.ixiqin.com/cp -P /bin/bash /bin/sh bincp /etc/passwd /etc/group etccd /tmpwget http://centos.googlecode.com/files/mini_sendmail-1.3.6.tar.gztar xzf mini_sendmail-1.3.6.tar.gzcd mini_sendmail-1.3.6makecp mini_sendmail /home/wwwroot/www.ixiqin.com/usr/sbin/sendmail9
以上代碼,在/tmp目錄下編譯mini_sendmail,然后將生成的可執(zhí)行文件復(fù)制到chroot后目錄下相應(yīng)位置,以保證發(fā)件系統(tǒng)的正常運(yùn)行。
Amysql將這個(gè)功能集成到了模塊里,而且默認(rèn)情況下每一個(gè)虛擬主機(jī)都是開(kāi)啟了安全模式的,你只需要在后臺(tái)下載AMChroot模塊,管理即可。如果你不是AMH用戶,也可以使用這個(gè)功能,只需要修改Nginx和PHP-FPM的配置文件即可。由于要把domain站點(diǎn)限制在/home/wwwroot/domain,所以對(duì)于php-fpm,此網(wǎng)站根目錄已經(jīng)變成是/web,所以我們需要更Nginx傳遞給php-fpm的網(wǎng)站根目錄地址。