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