Chroot解決PHP安全的方法
AMH面闆是一(yī)款LNMP面闆,一(yī)方面,爲了方便版本升級,另一(yī)方面,面闆是開(kāi)發者一(yī)個人開(kāi)發的,所以AMH沒有像kangle,WDCP,LUM,webmin等采用二進制文件實現平台的環境,而是使用基于AMP的PHP程序來控制平台。這樣,就要考慮到PHP的安全問題了。由于PHP寫成的程序,所以需要大(dà)量的的使用exec,shell_exec兩個函數來實現面闆和系統的信息交換處理。顯然,小(xiǎo)蔣給出的限制函數的方法并不适合AMH這樣的面闆。那麽,Amysql如何解決PHP的運行安全問題呢?
Chroot的工(gōng)作原理是什麽呢?
由于LNMP環境下(xià),PHP-FPM與Nginx的通信隻能通過CGI實現,所以,如果你在FPM設置中(zhōng)對文件的根目錄進行修改,那麽,你的PHP程序就無法跨越這個指定的根目錄。而面闆所在的虛拟主機,由于沒有開(kāi)啓Chroot,所以使用的根目錄依然是系統的根目錄
就用AMH面闆的控制台和普通虛拟主機來說明。控制台文件放(fàng)在/home/Wwwroot/Index/Web文件夾下(xià),普通主機的文件放(fàng)在/home/wwwroot/Domain/web文件夾下(xià)。對于控制台程序,由于沒有開(kāi)啓Chroot,所以,這個PHP文件的實際位置和運行位置相同,都是/home/wwwroot/Index/web/,而其根目錄就是/;對于普通虛拟主機,開(kāi)啓Chroot,那麽,雖然,運行的文件的位置是/home/wwwroot/domain/web/index.php,但是經過Chroot的導向,在PHP程序中(zhōng),實際認爲的文件地址是/web/index.php。同時在/home/wwwroot/domain/爲了使入侵者認爲自己進入的是根系統,而仿照Unix的文件夾命名規則,創建了etc,usr,tmp,lib等文件夾,如同爲PHP程序創建了一(yī)個沙盒.所以,使用Chroot的用戶不用害怕中(zhōng)國菜刀,因爲他隻能在沙盤内起作用,無法對主系統産生(shēng)影響,從而造成經濟損失。合肥網站建設公司
與禁用函數相比,Chroot有什麽優點
禁用函數是針對整個PHP程序而言的,所有需要通過PHP程序進行解析的文件,都會受到禁用函數的設置。網站程序不同,那麽有可能需要的函數不同,不同的虛拟主機無法單獨設置。而Chroot可以根據不同的虛拟主機,進行特異化設置。對于需要使用特殊函數的程序,可以關閉Chroot,來保證網站程序的正常運轉;程序不需要調用特殊的程序,就可以開(kāi)啓Chroot模式;如果隻是要啓用一(yī)個或兩個特定的程序,你可以仿照如下(xià)的過程添加函數。合肥網站建設公司比如說,當我(wǒ)(wǒ)們開(kāi)啓Chroot時,PHP程序是無法使用sendmail()函數來發信的,我(wǒ)(wǒ)們可以使用mini_sendmail替代sendmail來修複發信。
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目錄下(xià)編譯mini_sendmail,然後将生(shēng)成的可執行文件複制到chroot後目錄下(xià)相應位置,以保證發件系統的正常運行。
Amysql将這個功能集成到了模塊裏,而且默認情況下(xià)每一(yī)個虛拟主機都是開(kāi)啓了安全模式的,你隻需要在後台下(xià)載AMChroot模塊,管理即可。如果你不是AMH用戶,也可以使用這個功能,隻需要修改Nginx和PHP-FPM的配置文件即可。由于要把domain站點限制在/home/wwwroot/domain,所以對于php-fpm,此網站根目錄已經變成是/web,所以我(wǒ)(wǒ)們需要更Nginx傳遞給php-fpm的網站根目錄地址。