安全技巧:Apache服務(wù)器設(shè)置安全指南
來(lái)源:程序員人生 發(fā)布時(shí)間:2013-10-19 05:37:32 閱讀次數(shù):2716次
這里將要介紹到的,有些技巧是關(guān)于設(shè)置一臺(tái)網(wǎng)絡(luò)服務(wù)器的安全問(wèn)題,也許您會(huì)說(shuō)Apache本身是比較安全的,但相信本問(wèn)都會(huì)讓你受益非淺。本文有些建議是通用的,有些是專門針對(duì)Apache服務(wù)器的。
批準(zhǔn)ServerRoot目錄
在典型操作中,Apache服務(wù)器是由root用戶啟動(dòng)的,并且通過(guò)用戶指令轉(zhuǎn)變?yōu)橛脩舳x的操作。正如root執(zhí)行的任何指令一樣,你必須注意保護(hù)服務(wù)器,防止任何非root用戶進(jìn)行修改。不僅文件本身必須由root用戶進(jìn)行修改,而且目錄和所有目錄的父目錄也是如此。例如,如果你選擇把ServerRoot放在/usr/local/apache目錄中,建議你把那個(gè)目錄創(chuàng)建為根目錄,使用如下指令:
mkdir /usr/local/apache
cd /usr/local/apache
mkdir bin conf logs
chown 0 . bin conf logs
chgrp 0 . bin conf logs
chmod 755 . bin conf logs
假定/、/usr和/usr/local只能被root用戶修改。當(dāng)你安裝httpd可執(zhí)行文件時(shí),你應(yīng)該保證這個(gè)文件受到同樣的保護(hù)。使用如下命令:
cp httpd /usr/local/apache/bin
chown 0 /usr/local/apache/bin/httpd
chgrp 0 /usr/local/apache/bin/httpd
chmod 511 /usr/local/apache/bin/httpd
你可以創(chuàng)建一個(gè)其他用戶可以修改的htdocs子目錄,因?yàn)楦肋h(yuǎn)不能在那里執(zhí)行任何文件,不應(yīng)該在那里創(chuàng)建任何文件。
如果你允許非根用戶修改根不能執(zhí)行或者寫入的任何文件,那么,你的系統(tǒng)的根就會(huì)被攻破。例如,有人會(huì)替換httpd二進(jìn)制代碼,這樣,當(dāng)你下一次啟動(dòng)機(jī)器的時(shí)候,它就會(huì)執(zhí)行任意代碼。如果這個(gè)記錄目錄是允許非根用戶寫入的,有人就會(huì)用其它系統(tǒng)文件取代這個(gè)記錄文件。然后,根就能夠使用任何數(shù)據(jù)覆蓋那個(gè)文件。如果那些記錄文件本身是允許非根用戶寫入的,有人就會(huì)用虛假的數(shù)據(jù)覆蓋那個(gè)記錄本身。
服務(wù)器端包含(SSI)
服務(wù)器端包含為服務(wù)器管理員提出了一些潛在的安全風(fēng)險(xiǎn)。
第一個(gè)風(fēng)險(xiǎn)是服務(wù)器工作量的增加。所有具有SSI功能的文件都必須由Apache服務(wù)器解析,無(wú)論這些文件是否包含任何SSI指令。雖然這個(gè)工作量增加的很少,但是,在一個(gè)共享服務(wù)器環(huán)境中,這個(gè)工作量將變得非常大。
一般來(lái)說(shuō),SSI文件能夠產(chǎn)生與CGI腳本相同的風(fēng)險(xiǎn)。使用“exec cmd”指令,具有SSI功能的文件能夠在用戶的允許之下執(zhí)行任何CGI腳本或者程序。組Apache服務(wù)器可根據(jù)httpd.conf文件中的設(shè)置運(yùn)行。這應(yīng)該為服務(wù)器管理員提供一個(gè)休息的機(jī)會(huì)。
在利用SSI文件提供的好處的同時(shí),有許多提高SSI文件安全的方法。
要限制一個(gè)難以駕馭的SSI文件引起的損失,服務(wù)器管理員可以按照CGI總則部門介紹的方法啟用suexec程序。
讓有.html或者.htm擴(kuò)展名的文件具有SSI功能是危險(xiǎn)的。特別是在共享的、通訊量大服務(wù)器環(huán)境更是如此。具有SSI功能的文件應(yīng)該有一個(gè)單獨(dú)的擴(kuò)展名,如.shtml。這有助于把工作量保持在較低的水平,使風(fēng)險(xiǎn)管理更加容易。
另一個(gè)解決方案是關(guān)閉從SSI頁(yè)運(yùn)行腳本和程序的能力。要做到這一點(diǎn),在選項(xiàng)指令中用“IncludesNOEXEC”取代“Includes”。注意,用戶也許仍然可以使用 <--#include virtual="..." --> 執(zhí)行CGI腳本,如果這些腳本在一個(gè)ScriptAlias指令指定的目錄中的話。
非腳本別名的CGI
應(yīng)該僅在如下條件下才允許用戶使用任何目錄中的CGI腳本:
1.你信任你的用戶不會(huì)編寫這種腳本,故意或無(wú)意地讓你的系統(tǒng)遭受攻擊。
2.你認(rèn)為你的網(wǎng)站安全在其它方面如此的脆弱,以至于多一個(gè)漏洞也沒(méi)有關(guān)系。
3.你沒(méi)有用戶,而且沒(méi)有人訪問(wèn)你的服務(wù)器。
腳本別名的CGI
把CGI限制在特定的目錄中可讓管理員控制進(jìn)入目錄的內(nèi)容。這必然比“非腳本別名的CGI”更安全,但是,這僅限于擁有這些目錄寫入權(quán)限的用戶是可信賴的,或者管理員愿意測(cè)試每一個(gè)新的CGI腳本/程序,查找其中的漏洞。
大多數(shù)網(wǎng)站選擇這個(gè)選項(xiàng),不選擇“非腳本別名的CGI”方法。
通用CGI
你要永遠(yuǎn)記住,你必須相信CGI腳本/程序的作者,或者相信你自己有能力發(fā)現(xiàn)CGI中潛在的安全漏洞,無(wú)論這些漏洞是有意的或是無(wú)心的。
所有CGI腳本將作為同一用戶運(yùn)行,因此,這些腳本有可能相互沖突(意外的或故意的)。例如,用戶A憎恨用戶 B,于是他編寫一個(gè)腳本破壞用戶B的 CGI數(shù)據(jù)庫(kù)。一個(gè)能夠用來(lái)允許腳本以不同用戶身份運(yùn)行的程序是 suEXEC。它包含在Apache 1.2版中,可以使用Apache服務(wù)器代碼調(diào)用。另一個(gè)常用的方法是使用CGIWrap。
其它動(dòng)態(tài)內(nèi)容資源
嵌入的腳本選項(xiàng)以服務(wù)器本身的身份運(yùn)行。這些選項(xiàng)作為服務(wù)器本身的一部分運(yùn)行,如mod_php、mod_perl、mod_tcl和mod_python等。因此,這些引擎執(zhí)行這些腳本能夠讓服務(wù)器用戶訪問(wèn)任何內(nèi)容。有些腳本引擎可能提供一些限制措施,但是,最好是安全一些,不要這樣做。
生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)