Ubuntu Apache Web服務器安全維護實例解析
在一個Linux發行版本上設置一個Web服務器是一個很快的過程,不過要讓這種設置成為一種安全的過程可能就需要花點兒工夫。本文將向你展示如何有效地使用訪問控制和身份驗證策略,使你的Apache Web服務器更安全。下面所有的例子都假定你用的是Ubuntu7.10,并對Apache進行了基本的配置。不過,這些例子將幫助任何一位運行Apache服務器的用戶獲得更大的安全性,因為其要領仍然適用于其它Linux系統。本文中所涉及到的方法應當首先在一臺測試服務器上進行試驗,在成功之后才能遷移到一個實際使用的 Web服務器上。
一、文件許可和訪問控制
1. 用戶和組
首先要保障的是Apache不要以root身份運行,因為如果Apache被攻破的話,那么攻擊者就可以控制root賬戶。下面讓我們看一下Apache正以何種用戶和組的身份運行:
運行下面的命令:
# ps auwwfx grep apache www-data 25675 0.0 0.0 10348 508 ? S Jan21 0:00 \_ /usr/sbin/apache2 -k start
www-data 25686 0.0 0.2 231816 2208 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start
www-data 25688 0.0 0.2 231816 2200 ? Sl Jan21 0:00 \_ /usr/sbin/apache2 -k start
可以看出,www-data是運行Apache的用戶。不過,我們需要編輯Apache的配置并創建一個新用戶和組:
# groupadd www-data
# useradd -g www-data www-data
# vi /etc/apache2/apache2.conf
將User root Group root改為:
User www-data Group www-data
然后重新加載以使改變生效:
# /etc/init.d/apache2 reload
2. 服務文件準許
一個最易被忽視的安全問題是如何正確地使用chmod命令。例如,我們在Apache 的html root目錄中創建了一個index.cgi文件,不過在瀏覽器中打開這個文件時卻被告知拒絕訪問。為了讓我們的index.cgi文件正常工作,我們執行一個chomod 777 index.cgi。在我們如此試驗時,每一個Apache管理員都在考慮這樣安全嗎?答案是否定的。不過,如何使這種許可足夠安全并能允許 index.cgi腳本正常運行呢?
Apache需要得到準許來訪問index.cgi文件。不過,我們不希望人人都能讀寫index.cgi。這個文件的所有者應當擁有讀寫這個文件的許可。為此我們需要下面的命令:
# chmod 755 index.cgi
將下面的一行加入到你的Apache.conf文件中是很重要的:
Options FollowSymLinks AllowOverride None
注意:
1、上面的命令行防止Apache訪問root之外的文件。
2、有一些Linux發行版本比其它版本擁有更好的安全性。EnGarde Secure Linux就是一個很好的例子,因為它默認情況下就在其Apache配置文件中包含了上面的代碼行。
我們并不想讓用戶在文件系統上的任何地方運行CGI腳本,不過我們確實需要它們在root中運行。對這個問題的解決辦法是“Options ExecCGI”指令。
例如,將下面的行添加到/etc/apache2/apache2.conf文件中:
AllowOverride None Options ExecCGI Order allow,deny Allow from all
重新加載Apache:
# /etc/init.d/apache2 reload
那么,如果你擁有只應當被某個網絡或IP地址訪問的資源怎么辦?對這個問題的解決辦法是使用我們的Apache配置來為你增強安全性:
先說一個只允許訪問192.168.0.0網絡的例子,需要改變/etc/apache2/apache2.conf文件中以下的一行:
AllowOverride None Options ExecCGI Order allow,deny Allow from all
將其改為:
AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16
然后重新加載以使更改生效:
# /etc/init.d/apache2 reload
現在只有你內部網絡上的用戶能夠在/home/username/public_html/cgi-bin中運行CGI腳本。
二、身份驗證
我們怎樣才能僅允許那些擁有正確口令和用戶名的用戶訪問部分web root呢?下面的步驟將向你展示如何安全地做到這一點:
1. 基本驗證
允許.htaccess:
# vi /etc/apache2/apache2.conf
將AllowOveride None改為AllowOveride AuthConfig
重新加載以使改變生效:
# sudo /etc/init.d/apache2 reload
創建一個口令文件:
# mkdir /var/www/misc
# chmod a+rx /var/www/misc
# cd /var/www/misc
# htpasswd -bc private.passwords username password Adding password for user username
創建.htaccess
# cd /home/username/public_html/cgi-bin # vi .htaccess
在.htaccess中增加下面的命令:
AuthName My Private Area" AuthType Basic AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user
將AllowOverride None Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16
改變為:AllowOverride .htaccess Options ExecCGI Order Deny,Allow Deny from all Allow from 192.168.0.0/16
然后重新加載以使更改生效:
# /etc/init.d/apache2 reload
2、摘要驗證(Digest authentication)
另外一種驗證方法稱之為摘要驗證。如果采用摘要驗證,你的口令將不是以明文通過網絡傳送,因為它們總是作為用戶口令的一個MD5摘要傳送的。如果采用這種方法,那么通過嗅探網絡通信的方法就不能決定用戶的口令了。
下面創建口令文件:
# mkdir /var/www/misc
# chmod a+rx /var/www/misc
# cd /var/www/misc
# htdigest -c private.passwords realm username Adding password for username in realm realm. New password:
創建 .htaccess :
# cd /home/username/public_html/cgi-bin # vi .htaccess
在.htaccess中增加下面的內容:
AuthName "My Private Area" AuthType Digest AuthUserFile /var/www/misc/private.passwords AuthGroupFile /dev/null require valid-user
注意:
1、一些老的瀏覽器并不支持摘要驗證(Digest authentication)
2、要完全地保護你的.htaccess就要使用SSL
三、總結
使Apache更安全的下一步措施是使用Apache的模塊來幫助實現更好的安全性,例如mod_security 和 mod_chroot。此外,要保護我們的驗證我們還需要配置SSL。
關鍵字:Ubuntu、Apache、Web、服務器
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解