新聞資訊

Chroot解決PHP安全的(de)方法

   AMH面闆是(shì)一(yī)款LNMP面闆,一(yī)方面,為(wèi)了(le)方便版本升級,另×一(yī)方面,面闆是(shì)開(kāi)發者一(yī)個(gè)人(rén)開(kāi)發的(de),所以AMH沒有(yǒu)像ka‌ngle,WDCP,LUM,webmin等采用(yòng)二進制(zhì)文(wén)件(jiàn)實現(xiàn)ε平台的(de)環境,而是(shì)使用(yòng)基于AMP的(de)PHP程序來(lái)控制(zhì)平台'。這(zhè)樣,就(jiù)要(yào)考慮到(dào)PHP的(de)安全問(wèn)題了(le)。由于PHP寫成的(de)程序,所以需要(yào)大(dà)量的γ(de)的(de)使用(yòng)exec,shell_exec兩個(gè)函數(shù)來(lái)實現(xiàn)面闆和(hé)系統的(de)信息交換處δ理(lǐ)。顯然,小(xiǎo)蔣給出的(de)限制(zhì)函數(shù)的(de)方法并不(bù)适合AMH這(zhè)樣的(de)面闆。那(nà)麽,Amys£ql如(rú)何解決PHP的(de)運行(xíng)安全問(wèn)題呢(ne)?

   Chroot的(de)工(gōng)作(zuò)原理(lǐ)是(shì)什(shén)麽呢(ne)?

   由于LNMP環境下(xià),PHP-FPM與Nginx的(de)通(tōng)信隻能(néng)通(tōng)過CGI實現(xiàn),‍所以,如(rú)果你(nǐ)在FPM設置中對(duì)文(wén)件(jiàn)的(de)根目錄進行(xíng)修改,那(nà)麽,你(nǐ)的(de✘)PHP程序就(jiù)無法跨越這(zhè)個(gè)指定的(de)根目錄。而面闆所在的(de)虛拟主機(jī),由于沒有(yǒu)開(kāi)啓Chroot←,所以使用(yòng)的(de)根目錄依然是(shì)系統的(de)根目錄

   就(jiù)用(yòng)AMH面闆的(de)控制(zhì)台和(hé)普通(tōng)虛拟主機(jī)來(lá&i)說(shuō)明(míng)。控制(zhì)台文(wén)件(jiàn)放(fàng)在/home/Wwwroot/Index/Web文(wén)件(jiàn)夾下(xià),普通(☆tōng)主機(jī)的(de)文(wén)件(jiàn)放(fàng)在/home/wwwroot/Domain/web文(wén)件(jiàn)夾下(xià)。對(duì)于控制₽(zhì)台程序,由于沒有(yǒu)開(kāi)啓Chroot,所以,這(zhè)個(gè)PHP文(wén)件(jiàn)的(de)實↑際位置和(hé)運行(xíng)位置相(xiàng)同,都(dōu)是(shì)/home/wwwroot/Index/web/,而其根目錄÷就(jiù)是(shì)/;對(duì)于普通(tōng)虛拟主機(jī),開(kāi)啓Chroot,那(nà)麽,雖然,運行(xíng)的(de)文δ(wén)件(jiàn)的(de)位置是(shì)/home/wwwroot/domain/web/index.phpφ,但(dàn)是(shì)經過Chroot的(de)導向,在PHP程序中,實際認為(wèi)的(de)文←(wén)件(jiàn)地(dì)址是(shì)/web/index.php。同時(shí)在/home/wwwroot/domain↔/為(wèi)了(le)使入侵者認為(wèi)自(zì)己進入的(de)是(shì)根系統,而仿照(zhào)Unix的(deε)文(wén)件(jiàn)夾命名規則,創建了(le)etc,usr,tmp,lib等文(wén)件(jiàn)夾,如(rú)同為(wèi)PHP程序創建÷了(le)一(yī)個(gè)沙盒.所以,使用(yòng)Chroot的(de)用(yòng)戶不(bù)用(yòng)害怕中國(guó)菜刀(dāo),因為(wèi)他(tā)隻能(nén∞g)在沙盤內(nèi)起作(zuò)用(yòng),無法對(duì)主系統産生(shēng)影(yǐng)響,從(cóng)而造成經γ濟損失。合肥網站(zhàn)建設公司

   與禁用(yòng)函數(shù)相(xiàng)比,Chroot有(yǒu)什(shén)麽優點

   禁用(yòng)函數(shù)是(shì)針對(duì)整個(gè)PHP程序而言的(de),所有(yǒu)需σ要(yào)通(tōng)過PHP程序進行(xíng)解析的(de)文(wén)件(jiàn),都(dōu)會(huì)受到(dào)禁用(yòng)函數(shù)的(‌de)設置。網站(zhàn)程序不(bù)同,那(nà)麽有(yǒu)可(kě)能(néng)需要(yào)的(de)函數(shù)不(bù)同,不(bù)同的(de)虛拟主機(jī)無法單獨設置‍。而Chroot可(kě)以根據不(bù)同的(de)虛拟主機(jī),進行(xíng)特異化(huà)設置。對(duì)于需要(Ωyào)使用(yòng)特殊函數(shù)的(de)程序,可(kě)以關閉Chroot,來(lái)保證網站(zhàn)程序的↓(de)正常運轉;程序不(bù)需要(yào)調用(yòng)特殊的(de)程序,就(jiù)可(kě)以開(kāi)啓Chro®ot模式;如(rú)果隻是(shì)要(yào)啓用(yòng)一(yī)個(gè)或兩個(gè)特定的(de)程序‍,你(nǐ)可(kě)以仿照(zhào)如(rú)下(xià)的(de)過程添加函數(shù)。合肥網站(zhàn)建設公司比如(rú)說(shuō),當我們開(kāi)啓Chroot時(shí),PHP程序是(shì)無法使用(yòng)sendmail()函數(shù)×來(lái)發信的(de),我們可(kě)以使用(yòng)mini_sendmail替代sendmail來(lái)修複發信。

   cd /home/wwwroot/www.ixiqin.com/cp -P /bin/bash /bin/sh bincp /etc/pas¶swd /etc/group etccd /tmpwget http://centos.googlecode.com/f€iles/mini_sendmail-1.3.6.tar.gztar xzf mini_sendmail-1.3.6.tar.gzcd mini_sendmail-1.3.6make∏cp mini_sendmail /home/wwwroot/www.ixiqin.com/usr/sbin/sendmail9 

    以上(shàng)代碼,在/tmp目錄下(xià)編譯mini_sendmail‌,然後将生(shēng)成的(de)可(kě)執行(xíng)文(wén)件(jiàn)複制(zhì)到(dào)chroot後目錄下(xià)相(xiàng©)應位置,以保證發件(jiàn)系統的(de)正常運行(xíng)。 

   Amysql将這(zhè)個(gè)功能(néng)集成到(dào)了(le)模塊裡(lǐ),而且默認情況下(xià)每一(yī)個(gè)虛拟主機(jī)✘都(dōu)是(shì)開(kāi)啓了(le)安全模式的(de),你(nǐ)隻需要(yào)在後台下(xià)載AMChroot模塊,管理(lǐ)即可(kě)。如(rú)果你(nǐ©)不(bù)是(shì)AMH用(yòng)戶,也(yě)可(kě)以使用(yòng)這(zhè)個(gè)功能(néng),隻需要(yào)修改Nginx和(hé)PH'P-FPM的(de)配置文(wén)件(jiàn)即可(kě)。由于要(yào)把domain站(zhàn)點限制(zhì)在/home/wwwroot/domain,所以對(duì)于p✔hp-fpm,此網站(zhàn)根目錄已經變成是(shì)/web,所以我們需要(yào)更Nginx傳遞給php-fpm的(de)網站(zhàn)根目錄地(dì)址。