CentOS 6.2 Web系統集成之Apache安全加固

Linux 安裝Web服務器並不難,但是其維護和安全加固並非易事,這需要深入瞭解Linux系統以及Apache的各種配置選項這裏需瞭解的問題是如何在安全性, 可操作性和易用性上找到平衡點,但這也取決於項目的具體需求,下面的最佳實踐將總結出LAMP項目中所有服務器都有的共同點。
使用配置指令進行訪問控制
利用Apache實現訪問控制的配置指令包括如下3種。
     1.Order指令。
Order指令用於指定執行允許訪問控制規則或者拒絕訪問控制規則的順序。
Order只能設置爲“Order Allow,Deny”或“Order Deny,Allow”,分別用來表明用戶先設置允許的訪問地址還是先設置禁止訪問的地址。
Order選項用於定義默認的訪問權限與Allow和Deny語句的處理順序。而Allow和Deny語句可以針對客戶機的域名或IP進行設置,以決定哪些客戶機能夠訪問服務器。
Order語句設置的兩種值的具體含義如下。
       (1)Allow,Deny
默認禁止所有客戶機的訪問,且Allow語句在Deny語句之前被匹配,如果某條件即匹配Deny語句,又匹配Allow語句,則Deny語句會起作用(因爲Deny語句覆蓋了Allow語句)。
         (2)Deny,Allow
默認允許所有客戶機的訪問,且Deny劇在Allow語句之前被匹配。如果條件即匹配Deny語句又匹配Allow語句,則Allow語句會起作用(因爲Allow語句覆蓋了Deny語句)。
 
   2.Allow語句
Allow指令指明允許訪問的地址或地址序列,例如Allow From All 指令表明允許所有IP來的訪問請求。
 
      3.Deny指令
Deny指令指明禁止訪問的地址或地址序列。例如Deny from all 指令表明禁止所有IP來的訪問請求。
下面舉幾個簡單的例子,對上述的Order、Allow和Deny命令的使用進行示範。
在本例中,itchenyi.com域中的所有主句都允許訪問網站,而其他非該域中的任何主句都被拒絕,因爲Deny訪問都被拒絕,因爲Deny在前,Allow在後,Allow語句覆蓋了Deny語句。
具體命令如下:
         Order Deny,Allow
         Deny from all
         Allow from itchenyi.com
在本例中,itchenyi.com域中所有主機,除了 ls.itchenyi.com子域包含的主機被拒絕訪問以外,其他都允許訪問,所有不在itchenyi.com域中的主句都不允許訪問,因爲默認狀態 是拒絕對服務器的訪問(Allow在前,Deny在後,Deny語句覆蓋了Allow語句)。
具體命令如下:
         Order Allow,Deny
         Allow from itchenyi.com
         Deny from ls.itchenyi.com
使用.htaccess進行訪問控制
任 何出現在配置文件httpd.conf中的指令都可能出現在.htaccess文件中。.htaccess文件在httpd.conf文件的Access FileName指令中指定,用於進行鍼對單一目錄的配置,注意:htaccess文件也只能設置對目錄的訪問控制。
作爲管理員,可以指定.htaccess文件的名字和可以通過該文件內容覆蓋服務器配置,當站點有多組內容提供者並希望控制這些用戶對他們空間的操作時,該指令非常有用。
需要注意的是,除了可以使用.htaccess文件針對單一目錄進行訪問控制配置外,該文件還可以在不重啓Apache服務器的前提下使配置生效,使用起來非常方便。
 
1、在主配置文件httpd.conf中啓用並對.htaccess文件的使用。
2、在需要覆蓋主配置文件的目錄下(也就是需要單獨設定訪問控制權限的目錄生成.htaccess文件),對其進行編輯,並設置訪問控制權限。
 
啓用並控制對.htaccess文件的使用
想要啓用並控制對.htaccess文件的使用,需要使用AccessFileName參數在主配置文件中配置如下語句。
         Access FileName .htaccess
         <File ~ "^\.htaccess">
         Order allow,deny
         Deny from all
         </Files>
 
在.htaccess文件中使用指令進行控制
要限制.htaccess文件能夠覆蓋的內容,需要使用AllowOverride指令,該指令可以進行全局設置或者單個目錄設置。若配置默認可以使用的選項,需要使用Options指令。
例如,在httpd.conf文件中,可以採用指令建立對/var/www/icons目錄的訪問控制權限清單。具體指令如下:
         <Directory        "/var/www/icons">
         Options Indexs MultiViews
         AllowOverride None
         Order allow deny
         Allow from all
         </Directory>
         使用.htaccess文件例子
下面以一個簡單的例子來示範一下具體該如何使用.htaccess文件。
         1、在Apache服務器文檔根目錄下建立一個測試目錄,並創建測試文件。需要使用如下命令:
         [root@chenyi ~]# cd /var/www/html/
         [root@chenyi html]# mkdir chenyi
         [root@chenyi html]# cd chenyi/
         [root@chenyi chenyi]# touch chenyi.a
         [root@chenyi-2 chenyi]# touch chenyi.b
         2、修改Apache服務器配置文件。添加下面所示的語句:
        Directory "/var/www/html/chenyi"
         AllowOverride Options
         Directory
        3、在生成的測試目錄/var/www/html/chenyi下生成.htaccess文件,並添加如下所示的語句:
         Options -Indexes
         4、重啓Apache服務器,就可以看到在配置.htaccess文件前用戶可以使用客戶端瀏覽文件,而配置後無法瀏覽,注:這裏重啓Apache服務器是因爲前面修改了主配置文件,而不是因爲修改了.htaccess文件。
使用認證和授權保護Apache
認證和授權指令
目前,有兩種常見的認證類型,即基本認證和摘要認證。
1、基本認證(basic):使用最基本得用戶名和密碼方式進行認證
2、摘要認證(Digest):該認證方式比基本認證要安全得多,在認證過程中額外使用了一個針對客戶端的挑戰(Challenge):信息,可以有效的避免基本認證方式可能遇到的“鍾放***”,不過,目前並不是所有瀏覽器都支持摘要認證的方式。
 
所有的認證配置指令即可以出現在主配置文件httpd.conf中的Director容器中,也可以出現在單獨的.htaccess文件中,這個可以根據需要靈活選擇。在認證配置過程中,需要用到如下指令。
1、Authname:用於定義受保護區域的名稱。
2、AuthType:用於指定使用的認證方式,包括上面所述的Basci和Digest兩種方式。
3、AuthGroupFile:用於指定認證組文件的位置。
4、AuthUserFile:用於指定認證口令文件的位置。
使用上述的認證配置認證之後,需要爲Apache服務器訪問對象,也就是指定的用戶和組進行相應的授權,以便它們對Apache服務器提供的目錄文件和文件進行訪問。
爲用戶和組進行授權需要使用Require指令,可以使用如下三種方式進行授權。
1、授權給指定的一個或者多個用戶:使用Require user 用戶名1、用戶名2.....
2、授權給指定的一個組或者多個組:使用Require group 組名1、組名2......
3、授權給指定口令文件中的所有用戶:使用Requirevalid-user。
 
管理認真口令文件和認證組文件
要 實現用戶認證功能,首先要建立保存用戶名和口令的文件,Apache自帶的htpasswd命令提供了建立和更新存儲用戶名、密碼文本文件的功能,需要特 別注意的是,這個文件必須放在不能被網絡訪問的位置,以避免下載或信息邪路,建立口令文件放在/etc/httpd目錄或者其他子目錄下。
下面的例子在httpd目錄下創建一個文件名爲passwd_auth的口令文件,並將用戶chenyi加入認證口令文件,使用以下命令....(過程中會提示輸入該用戶的口令)
[root@chenyi apache2]# touch passwd_auth
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
New password:
Re-type new password:
Adding password for user chenyi
命令執行的過程中,系統會要求chenyi用戶輸入密碼。上述命令中的-c選項表述無論口令文件是否已經存在,都會重新寫入文件並刪去原有內容,所以在添加第二個用戶到口令文件時,就不需要-c選項了,使用以下命令即可。
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
認證和授權使用實例
(1)使用主配置文件配置用戶認證及授權
在本例中,用戶可以在Apache的主配置文件httpd.conf中加入以下語句,建立對目錄/software/apache/htdocs/chenyi訪問的用戶認證和授權機制:
 <Directory      "/software/apache2/htdocs/chenyi">
 AllowOverride None
 AuthType Basic
 AuthName "chenyi"
 AuthUserFile /software/apache2/passwd_auth
 Require user chenyi itchenyi
 </Directory>
在上述例子中,使用了以下的指令。
AllowOveride:該選項定義了不實用htaccess文件
AuthType Basic:AuthType選項定義了對用戶實施認證的類型,最常用的是由mod_auth提供的Basic。
AuthName:定義了Web瀏覽器顯示輸入用戶/密碼對話框時的領域內容。
AuthUserFile:定義了口令文件的路徑,即使用htpasswd建立的口令文件。
Require user:定義了允許哪些用戶訪問,各用戶之間用空格分開。
 
需要注意的是,在AuthUserFile選項定義中,還要使用語句事先建立認證用戶chenyi和itchenyi,該選項中的定義才能生效。
具體語句如下:
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
此時重啓了apache後  在訪問該目錄,就會要求驗證....
apache安全加固

         (2)使用.htaccess文件配置用戶認證和授權
在本例中,爲了完成如上述例子同樣的功能,需要先在主配置文件中加入如下語句:
<Directory "/software/apache2/htdocs/chenyi">
AllowOverride AuthConfig
</Directory>
上述語句中的AllowOverride選項允許在.htaccess文件中使用認證和授權指令。
然後,在.htaccess文件中添加以下語句即可:
   AuthType Basic
   AuthName "Please Login:"
   AuthUserFile /software/apache2/passwd_auth
   Require user chenyi itchenyi
在AuthUserFile選項定義中,也要使用如下語句先建立認證文件chenyi和itchenyi該選項的定義纔會生效,注:如果你是接着方法1後做的測試就不用在建立認證文件,但要#註釋掉Apache定義的參數後重新設置。
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
到這裏,重啓Apache後通過瀏覽器訪問後就能看到.htaccess實現的效果了.....
 
使用Apache中的安全模塊
1、找出Apache服務器中安全的相關模塊
Apache的一個優勢便是靈活的模塊結構,其設計思想也是圍繞模塊(Module)概念而展開的。安全模塊是ApacheServer中極重要的組成部分,這些安全模塊負責提供ApacheServer的訪問控制、認證、授權等一系列至關重要的安全服務。
Apache具有如下幾類與安全相關的模塊。
mod_access模塊:能夠根據訪問者的IP地址或域名、主機名的等,來控制對Apache服務器的訪問,稱之爲基於主機的訪問控制。
mod_auth模塊:用來控制客戶和組的認證授權(Authentication)。用戶名和口令存於純文本文件中。
mod_auth_db和mod_auth_dbm模塊:分別將用戶信息(如名稱、組屬和口令等)純於Berkeley-DB及DBM型的小型數據庫中,便於管理及提高應用效率。
mod_auth_digest模塊:採用MD5數字簽名的方式進行用戶認證,但它需要客戶端的支持。
mod_auth_anon模塊:功能和mod_auth的功能類似,只是它允許匿名登錄,將用戶輸入的Email地址作爲口令。
mod_ssl 模塊:用於支持安全套接字層協議,提供Internet上的安全交易服務,如電子商務中的一項安全措施,通過對通信直接流的加密來防止敏感信息的泄露,但 是,Apache的這種支持是建立在對Apache的API擴展來實現的,相當於一個外部模塊,通過第三方程序(如OpenSSL)的結合提供安全的網上 交易支持。
 
       2、開啓安全模塊
爲了能使用模塊功能,模塊通 常以DSO(Dyname Shared Objed)的方式構建,用戶應該在httpd.conf文件中使用LoadModule指令,以便在使用前獲得模塊的功能,以下主配置文件中各個模塊的 情況,開啓安全模塊非常簡單,即去掉在各安全模塊所在行前面的“#”註釋即可。
具體如下:
 LoadModule auth_basic_module modules/mod_auth_basic.so
 LoadModule digest_module modules/mod_auth_diaest.so
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章