實(shí)例:保障UbuntuApacheWeb服務(wù)器安全 |
發(fā)布時(shí)間: 2012/8/13 9:26:57 |
在一個(gè)Linux發(fā)行版本上設(shè)置一個(gè)Web服務(wù)器是一個(gè)很快的過程,不過要讓這種設(shè)置成為一種安全的過程可能就需要花點(diǎn)兒工夫。本文將向你展示如何有效地使用訪問控制和身份驗(yàn)證策略,使你的ApacheWeb服務(wù)器更安全。下面所有的例子都假定你用的是Ubuntu7.10,并對(duì)Apache進(jìn)行了基本的配置。不過,這些例子將幫助任何一位運(yùn)行Apache服務(wù)器的用戶獲得更大的安全性,因?yàn)槠湟I(lǐng)仍然適用于其它Linux系統(tǒng)。本文中所涉及到的方法應(yīng)當(dāng)首先在一臺(tái)測(cè)試服務(wù)器上進(jìn)行試驗(yàn),在成功之后才能遷移到一個(gè)實(shí)際使用的Web服務(wù)器上。
一、文件許可和訪問控制 1.用戶和組 首先要保障的是Apache不要以root身份運(yùn)行,因?yàn)槿绻鸄pache被攻破的話,那么攻擊者就可以控制root賬戶。下面讓我們看一下Apache正以何種用戶和組的身份運(yùn)行: 運(yùn)行下面的命令: #psauwwfx|grepapachewww-data256750.00.010348508?SJan210:00\_/usr/sbin/apache2-kstart 可以看出,www-data是運(yùn)行Apache的用戶。不過,我們需要編輯Apache的配置并創(chuàng)建一個(gè)新用戶和組: #groupaddwww-data 將UserrootGrouproot改為: Userwww-dataGroupwww-data 然后重新加載以使改變生效: #/etc/init.d/apache2reload 2.服務(wù)文件準(zhǔn)許 一個(gè)最易被忽視的安全問題是如何正確地使用chmod命令。例如,我們?cè)贏pache的htmlroot目錄中創(chuàng)建了一個(gè)index.cgi文件,不過在瀏覽器中打開這個(gè)文件時(shí)卻被告知拒絕訪問。為了讓我們的index.cgi文件正常工作,我們執(zhí)行一個(gè)chomod777index.cgi。在我們?nèi)绱嗽囼?yàn)時(shí),每一個(gè)Apache管理員都在考慮這樣安全嗎?答案是否定的。不過,如何使這種許可足夠安全并能允許index.cgi腳本正常運(yùn)行呢? Apache需要得到準(zhǔn)許來訪問index.cgi文件。不過,我們不希望人人都能讀寫index.cgi。這個(gè)文件的所有者應(yīng)當(dāng)擁有讀寫這個(gè)文件的許可。為此我們需要下面的命令: #chmod755index.cgi 將下面的一行加入到你的Apache.conf文件中是很重要的: OptionsFollowSymLinksAllowOverrideNone 注意: 1、上面的命令行防止Apache訪問root之外的文件。 2、有一些Linux發(fā)行版本比其它版本擁有更好的安全性。EnGardeSecureLinux就是一個(gè)很好的例子,因?yàn)樗J(rèn)情況下就在其Apache配置文件中包含了上面的代碼行。 我們并不想讓用戶在文件系統(tǒng)上的任何地方運(yùn)行CGI腳本,不過我們確實(shí)需要它們?cè)趓oot中運(yùn)行。對(duì)這個(gè)問題的解決辦法是“OptionsExecCGI”指令。 例如,將下面的行添加到/etc/apache2/apache2.conf文件中: AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall 重新加載Apache: #/etc/init.d/apache2reload 那么,如果你擁有只應(yīng)當(dāng)被某個(gè)網(wǎng)絡(luò)或IP地址訪問的資源怎么辦?對(duì)這個(gè)問題的解決辦法是使用我們的Apache配置來為你增強(qiáng)安全性: 先說一個(gè)只允許訪問192.168.0.0網(wǎng)絡(luò)的例子,需要改變/etc/apache2/apache2.conf文件中以下的一行: AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall 將其改為: AllowOverrideNoneOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16 然后重新加載以使更改生效: #/etc/init.d/apache2reload 現(xiàn)在只有你內(nèi)部網(wǎng)絡(luò)上的用戶能夠在/home/username/public_html/cgi-bin中運(yùn)行CGI腳本。 我們?cè)鯓硬拍軆H允許那些擁有正確口令和用戶名的用戶訪問部分webroot呢?下面的步驟將向你展示如何安全地做到這一點(diǎn): 1.基本驗(yàn)證 允許.htaccess: #vi/etc/apache2/apache2.conf 將AllowOverideNone改為AllowOverideAuthConfig 重新加載以使改變生效: #sudo/etc/init.d/apache2reload 創(chuàng)建一個(gè)口令文件: #mkdir/var/www/misc 創(chuàng)建.htaccess #cd/home/username/public_html/cgi-bin#vi.htaccess 在.htaccess中增加下面的命令: AuthNameMyPrivateArea"AuthTypeBasicAuthUserFile/var/www/misc/private.passwordsAuthGroupFile/dev/nullrequirevalid-user 將AllowOverrideNoneOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16 改變?yōu)椋篈llowOverride.htaccessOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16 然后重新加載以使更改生效: #/etc/init.d/apache2reload 2、摘要驗(yàn)證(Digestauthentication) 另外一種驗(yàn)證方法稱之為摘要驗(yàn)證。如果采用摘要驗(yàn)證,你的口令將不是以明文通過網(wǎng)絡(luò)傳送,因?yàn)樗鼈兛偸亲鳛橛脩艨诹畹囊粋(gè)MD5摘要傳送的。如果采用這種方法,那么通過嗅探網(wǎng)絡(luò)通信的方法就不能決定用戶的口令了。 下面創(chuàng)建口令文件: #mkdir/var/www/misc 創(chuàng)建.htaccess: #cd/home/username/public_html/cgi-bin#vi.htaccess 在.htaccess中增加下面的內(nèi)容: AuthName"MyPrivateArea"AuthTypeDigestAuthUserFile/var/www/misc/private.passwordsAuthGroupFile/dev/nullrequirevalid-user 注意: 1、一些老的瀏覽器并不支持摘要驗(yàn)證(Digestauthentication) 2、要完全地保護(hù)你的.htaccess就要使用SSL 三、總結(jié) 使Apache更安全的下一步措施是使用Apache的模塊來幫助實(shí)現(xiàn)更好的安全性,例如mod_security和mod_chroot。此外,要保護(hù)我們的驗(yàn)證我們還需要配置SSL。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |