當服務器/主機【被】提交了漏洞到烏云網上該怎么辦?有人給出的答案是采用禁用函數的方法來保證服務器環境的安全。

            但是,禁用函數真的是最好的選擇么?不是的!

            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。


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 上思县| 浏阳市| 赤壁市| 连城县| 兴文县| 襄樊市| 罗山县| 凤山县| 安宁市| 南漳县| 奉化市| 塔城市| 岳池县| 青冈县| 冕宁县| 都昌县| 盐津县| 新巴尔虎右旗| 安泽县| 嘉鱼县| 海原县| 买车| 金山区| 遂昌县| 定安县| 广安市| 筠连县| 克拉玛依市| 金堂县| 淳化县| 蒙山县| 东莞市| 马龙县| 和平县| 武汉市| 江阴市| 文水县| 四川省| 东丰县| 威远县| 梨树县|