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)像kangπ☆γle,WDCP,LUM,webmin等采用(yòng $)二進制(zhì)文(wén)件(jiàn)實現(xiàn)平台的(d✘ ↕≥e)環境,而是(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)exε±ec,shell_exec兩個(gè)函數(shù)來(₹↑lái)實現(xiàn)面闆和(hé)系統的(de)信息交換§♦∏♣處理(lǐ)。顯然,小(xiǎo)蔣給出的(de)限制(zhì)函數"↔(shù)的(de)方法并不(bù)适合AMH這(zh§€è)樣的(de)面闆。那(nà)麽,Amysql如(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面闆的(dββe)控制(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)夾下(x∏≈εià),普通(tōng)主機(jī)的(λ☆de)文(wén)件(jiàn)放(fàng)在/home/www&♠∏root/Domain/web文(wén)件(j÷"≤§ià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ì)/hom >e/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ì)經過ChroΩ♦☆₩ot的(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程序創建了(l✔♣ e)一(yī)個(gè)沙盒.所以,使用(yòng)Ch←≤root的(de)用(yòng)戶不(bù)₹λ÷π用(yòng)害怕中國(guó)菜刀(dāo),因為(wè★σi)他(tā)隻能(néng)在沙盤內(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ī)無法單獨設置。而C≈₩₩γhroot可(kě)以根據不(bù)同的(d→®Ωe)虛拟主機(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)啓Chroot×¥φ→模式;如(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)sen© ±♦dmail()函數(shù)來(lái)發信的(de)¥♣±β,我們可(kě)以使用(yòng)mini_sendmail替代se★♦•™ndmail來(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/mi™☆ni_sendmail-1.3.6.tar.gzta∞✘©r xzf mini_sendmail-1.3.6.tar δ<.gzcd mini_sendmail-1.3.6makec♠'p mini_sendmail /home/wwwroot/¥™www.ixiqin.com/usr/sbin/s✘ endmail9
以上(shàng)代'♠™碼,在/tmp目錄下(xià)編譯mini_sendm₹∞≠¥ail,然後将生(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à)載AMChr↔¶oot模塊,管理(lǐ)即可(kě)。如(↔↓←βrú)果你(nǐ)不(bù)是(shì)AMH用(yòng)÷ε戶,也(yě)可(kě)以使用(yòng)這(zδ®✔₽hè)個(gè)功能(néng),隻需要(yào)修改Nginx和(hé)PH<₹$P-FPM的(de)配置文(wén)件(jiàn)即可™☆₽•(kě)。由于要(yào)把domain站(Ω•™zhàn)點限制(zhì)在/home/wwwroot/dom×↓¶£ain,所以對(duì)于php-fpm©,此網站(zhàn)根目錄已經變成是(sh£¶←∞ì)/web,所以我們需要(yào)更Nginx傳遞給php-fpm的(de)∏網站(zhàn)根目錄地(dì)址。