實例:保障UbuntuApacheWeb服務器安全 |
發布時間: 2012/8/13 9:26:57 |
在一個Linux發行版本上設置一個Web服務器是一個很快的過程,不過要讓這種設置成為一種安全的過程可能就需要花點兒工夫。本文將向你展示如何有效地使用訪問控制和身份驗證策略,使你的ApacheWeb服務器更安全。下面所有的例子都假定你用的是Ubuntu7.10,并對Apache進行了基本的配置。不過,這些例子將幫助任何一位運行Apache服務器的用戶獲得更大的安全性,因為其要領仍然適用于其它Linux系統。本文中所涉及到的方法應當首先在一臺測試服務器上進行試驗,在成功之后才能遷移到一個實際使用的Web服務器上。
一、文件許可和訪問控制 1.用戶和組 首先要保障的是Apache不要以root身份運行,因為如果Apache被攻破的話,那么攻擊者就可以控制root賬戶。下面讓我們看一下Apache正以何種用戶和組的身份運行: 運行下面的命令: #psauwwfx|grepapachewww-data256750.00.010348508?SJan210:00\_/usr/sbin/apache2-kstart 可以看出,www-data是運行Apache的用戶。不過,我們需要編輯Apache的配置并創建一個新用戶和組: #groupaddwww-data 將UserrootGrouproot改為: Userwww-dataGroupwww-data 然后重新加載以使改變生效: #/etc/init.d/apache2reload 2.服務文件準許 一個最易被忽視的安全問題是如何正確地使用chmod命令。例如,我們在Apache的htmlroot目錄中創建了一個index.cgi文件,不過在瀏覽器中打開這個文件時卻被告知拒絕訪問。為了讓我們的index.cgi文件正常工作,我們執行一個chomod777index.cgi。在我們如此試驗時,每一個Apache管理員都在考慮這樣安全嗎?答案是否定的。不過,如何使這種許可足夠安全并能允許index.cgi腳本正常運行呢? Apache需要得到準許來訪問index.cgi文件。不過,我們不希望人人都能讀寫index.cgi。這個文件的所有者應當擁有讀寫這個文件的許可。為此我們需要下面的命令: #chmod755index.cgi 將下面的一行加入到你的Apache.conf文件中是很重要的: OptionsFollowSymLinksAllowOverrideNone 注意: 1、上面的命令行防止Apache訪問root之外的文件。 2、有一些Linux發行版本比其它版本擁有更好的安全性。EnGardeSecureLinux就是一個很好的例子,因為它默認情況下就在其Apache配置文件中包含了上面的代碼行。 我們并不想讓用戶在文件系統上的任何地方運行CGI腳本,不過我們確實需要它們在root中運行。對這個問題的解決辦法是“OptionsExecCGI”指令。 例如,將下面的行添加到/etc/apache2/apache2.conf文件中: AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall 重新加載Apache: #/etc/init.d/apache2reload 那么,如果你擁有只應當被某個網絡或IP地址訪問的資源怎么辦?對這個問題的解決辦法是使用我們的Apache配置來為你增強安全性: 先說一個只允許訪問192.168.0.0網絡的例子,需要改變/etc/apache2/apache2.conf文件中以下的一行: AllowOverrideNoneOptionsExecCGIOrderallow,denyAllowfromall 將其改為: AllowOverrideNoneOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16 然后重新加載以使更改生效: #/etc/init.d/apache2reload 現在只有你內部網絡上的用戶能夠在/home/username/public_html/cgi-bin中運行CGI腳本。 我們怎樣才能僅允許那些擁有正確口令和用戶名的用戶訪問部分webroot呢?下面的步驟將向你展示如何安全地做到這一點: 1.基本驗證 允許.htaccess: #vi/etc/apache2/apache2.conf 將AllowOverideNone改為AllowOverideAuthConfig 重新加載以使改變生效: #sudo/etc/init.d/apache2reload 創建一個口令文件: #mkdir/var/www/misc 創建.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 改變為:AllowOverride.htaccessOptionsExecCGIOrderDeny,AllowDenyfromallAllowfrom192.168.0.0/16 然后重新加載以使更改生效: #/etc/init.d/apache2reload 2、摘要驗證(Digestauthentication) 另外一種驗證方法稱之為摘要驗證。如果采用摘要驗證,你的口令將不是以明文通過網絡傳送,因為它們總是作為用戶口令的一個MD5摘要傳送的。如果采用這種方法,那么通過嗅探網絡通信的方法就不能決定用戶的口令了。 下面創建口令文件: #mkdir/var/www/misc 創建.htaccess: #cd/home/username/public_html/cgi-bin#vi.htaccess 在.htaccess中增加下面的內容: AuthName"MyPrivateArea"AuthTypeDigestAuthUserFile/var/www/misc/private.passwordsAuthGroupFile/dev/nullrequirevalid-user 注意: 1、一些老的瀏覽器并不支持摘要驗證(Digestauthentication) 2、要完全地保護你的.htaccess就要使用SSL 三、總結 使Apache更安全的下一步措施是使用Apache的模塊來幫助實現更好的安全性,例如mod_security和mod_chroot。此外,要保護我們的驗證我們還需要配置SSL。 本文出自:億恩科技【www.endtimedelusion.com】 |