3、修改httpd.conf
如果你只允許你的php腳本程序在web目錄里操作,還可以修改httpd.conf文件限制php的操作路徑。比如你的web目錄是/usr/local/apache/htdocs,那么在httpd.conf里加上這么幾行:
php_admin_value open_basedir /usr/local/apache/htdocs
這樣,如果腳本要讀取/usr/local/apache/htdocs以外的文件將不會(huì)被允許,如果錯(cuò)誤顯示打開(kāi)的話(huà)會(huì)提示這樣的錯(cuò)誤:
Warning: open_basedir restriction in effect. File is in wrong directory in
/usr/local/apache/htdocs/open.php on line 4
等等。
4、對(duì)php代碼進(jìn)行編譯
Zend對(duì)php的貢獻(xiàn)很大,php4的引擎就是用Zend的,而且它還開(kāi)發(fā)了ZendOptimizer和ZendEncode等許多php的加強(qiáng)組件。優(yōu)化器ZendOptimizer只需在http://www.zend.com注冊(cè)就可以免費(fèi)得到,
下面幾個(gè)是用于4.0.5和4.0.6的ZendOptimizer,文件名分別對(duì)于各自的系統(tǒng):
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Windows-i386.zip
優(yōu)化器的安裝非常方便,包里面都有詳細(xì)的說(shuō)明。以UNIX版本的為例,看清操作系統(tǒng),把包里的ZendOptimizer.so文件解壓到一個(gè)目錄,假設(shè)是/usr/local/lib下,在php.ini里加上兩句:
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so"
就可以了。用phpinfo()看到Zend圖標(biāo)左邊有下面文字:
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
那么,優(yōu)化器已經(jīng)掛接成功了。
但是編譯器ZendEncode并不是免費(fèi)的,這里提供給大家一個(gè)http://www.PHPease.com的馬勇設(shè)計(jì)的編譯器外殼,如果用于商業(yè)目的,請(qǐng)與http://www.zend.com聯(lián)系取得許可協(xié)議。
php腳本編譯后,腳本的執(zhí)行速度增加不少,腳本文件只能看到一堆亂碼,這將阻止攻擊者進(jìn)一步分析服務(wù)器上的腳本程序,而且原先在php腳本里以明文存儲(chǔ)的口令也得到了保密,如mysql的口令。不過(guò)在服務(wù)器端改腳本就比較麻煩了,還是本地改好再上傳吧。
5、文件及目錄的權(quán)限設(shè)置
web目錄里除了上傳目錄,其它的目錄和文件的權(quán)限一定不能讓nobody用戶(hù)有寫(xiě)權(quán)限。否則,攻擊者可以修改主頁(yè)文件,所以web目錄的權(quán)限一定要設(shè)置好。
還有,php腳本的屬主千萬(wàn)不能是root,因?yàn)閟afe_mode下讀文件的函數(shù)被限制成被讀文件的屬主必須和當(dāng)前執(zhí)行腳本的屬主是一樣才能被讀,否則如果錯(cuò)誤顯示打開(kāi)的話(huà)會(huì)顯示諸如以下的錯(cuò)誤:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /usr/local/apache/htdocs/open.php
on line 3
這樣我們能防止許多系統(tǒng)文件被讀,比如:/etc/passwd等。
上傳目錄和上傳腳本的屬主也要設(shè)成一樣,否則會(huì)出現(xiàn)錯(cuò)誤的,在safe_mode下這些要注意。
6、mysql的啟動(dòng)權(quán)限設(shè)置
mysql要注意的是不要用root來(lái)啟動(dòng),最好另外建一個(gè)mysqladm用戶(hù)??梢栽?etc/rc.local等系統(tǒng)啟動(dòng)腳本里加上一句:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
這樣系統(tǒng)重啟后,也會(huì)自動(dòng)用mysqladmin用戶(hù)啟動(dòng)mysql進(jìn)程。
7、日志文件及上傳目錄的審核及
查看日志和人的惰性有很大關(guān)系,要從那么大的日志文件里查找攻擊痕跡有些大海撈針,而且也未必有。web上傳的目錄里的文件,也應(yīng)該經(jīng)常檢查,也許程序有問(wèn)題,用戶(hù)傳上了一些非法的文件,比如執(zhí)行腳本等。
8、操作系統(tǒng)自身的補(bǔ)丁
一樣,給系統(tǒng)打已知漏洞的補(bǔ)丁是系統(tǒng)管理員最基本的職責(zé),這也是最后一道防線(xiàn)。
經(jīng)過(guò)以上的配置,雖然說(shuō)不上固若金湯,但是也在相當(dāng)程度上給攻擊者的測(cè)試造成很多麻煩,即使php腳本程序出現(xiàn)比較嚴(yán)重的漏洞,攻擊者也無(wú)法造成實(shí)際性的破壞。如果您還有更古怪,更變態(tài)的配置方法,希望能一起分享分享;)
參考資料:
PHP Manual
http://www.zend.com