1. 程式人生 > >Apache伺服器訪問控制與使用者認證

Apache伺服器訪問控制與使用者認證

[b][size=large]訪問控制[/size][/b]
[b]Diretory段[/b]
Diretory段用於設定與目錄相關的引數和指令,包括訪問控制和認證,其格式如下所示。
<Diretory 目錄的路徑>

目錄相關的配置引數和指令

</Diretory>
每個Diretory段以<Diretory>開始,以</Diretory>結束,段作用於<Diretory>中指定的目錄及其裡面的所有檔案和子目錄。在段中可以設定與目錄相關的引數和指令,包括訪問控制和認證。
[b]Apache中的訪問控制指令[/b]
1、Allow指令
Allow指令用於設定哪些客戶端可以訪問Apache,命令格式如下所示。
Allow from [All | 全域名 | 部分域名 | IP地址 | 網路地址 | CIDR地址]…

All:表示所有客戶端。
全域名:表示域名對應的客戶端,如www.domain.com。
部分域名:表示域內的所有客戶端,如domain.com。
IP地址:如172.20.17.1。
網路地址:如172.20.17.0/255.255.255.0。
CIDR地址:如172.20.17.0/24。

%注意:Allow指令中可以指定多個地址,不同地址間通過空格進行分隔。

2、Deny指令
Deny指令用於設定拒絕哪些客戶端訪問Apache,格式跟Allow指令一樣。
3、Order指令
Order指令用於指定執行訪問規則的先後順序,有兩種形式:
Order Allow,Deny:先執行允許訪問規則,再執行拒絕訪問規則。
Order Deny,Allow:先執行拒絕訪問規則,再執行允許訪問規則。

%注意:編寫Order指令時,Allow和Deny之間不能有空格存在。

[b]舉例[/b]
設定某個目錄secure_info只能由管理員自己的機器172.20.17.55來檢視,其它的使用者都不能訪問;可以通過以下步驟來實現。
1)開啟conf/httpd.conf配置檔案並新增以下內容:
<Directory "/usr/local/apache2/htdocs/secure_info">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 172.20.17.55
</Directory>

2)儲存後重啟Apache服務。
在172.20.17.55機器上直接在瀏覽器訪問http://demoserver/secure_info,結果顯示只有在172.20.17.55機器上訪問成功,而其它的機器上則訪問失敗。

[b][size=large]使用者認證[/size][/b]
Apache的使用者認證包括基本(Basic)認證和摘要(Digest)認證兩種。摘要認證比基本認證更加安全,但是並非所有的瀏覽器都支援摘要認證,所以本節只針對基本認證進行介紹。基本認證方式其實相當簡單,當Web瀏覽器請求經此認證模式保護的URL時,將會出現一個對話方塊,要求使用者輸入使用者名稱和口令。使用者輸入後,傳給Web伺服器,Web伺服器驗證它的正確性。如果正確,則返回頁面;否則將返回401錯誤。

[b]建立口令檔案[/b]
要使用使用者認證,首先要建立儲存使用者名稱和口令的認證口令檔案。在Apache中提供了htpasswd命令用於建立和修改認證口令檔案,該命令在<Apache安裝目錄>/bin目錄下。關於該命令完整的選項和引數說明可以通過直接執行htpasswd獲取。
要在/usr/local/apache2/conf目錄下建立一個名為users的認證口令檔案,並在口令檔案中新增一個名為sam的使用者,命令如下所示。
htpasswd -c /usr/local/apache2/conf/users sam
New password:
Re-type new password:
Adding password for user sam

%注意:htpasswd命令沒有提供刪除使用者的選項,如果要刪除使用者,直接通過文字編輯器開啟認證口令檔案把指定的使用者刪除即可。

[b]使用者認證引數[/b]
1、AuthName引數
AuthName引數用於設定受保護領域的名稱,其引數格式如下所示。
AuthName 領域名稱

領域名稱沒有特別限制,使用者可以根據自己的喜歡進行設定。

2、AuthType引數
AuthType引數用於設定認證的方式,其格式如下所示。
AuthType Basic/Digest

Basic和Digest分別代表基本認證和摘要認證。

3、AuthUserFile引數
AuthUserFile引數用於設定認證口令檔案的位置,其格式如下所示。
AuthUserFile 檔名

4、Require引數
Require引數用於指定哪些使用者可以對目錄進行訪問,其格式有下面兩種。
Require user 使用者名稱 [使用者名稱] ...
Require valid-user

使用者名稱:認證口令檔案中的使用者,可以指定一個或多個使用者,設定後只有指定的使用者才能有許可權進行訪問。

valid-user:授權給認證口令檔案中的所有使用者。

[b]舉例[/b]
管理員想進一步控制對secure_info目錄的控制,希望只有通過驗證的sam使用者能夠訪問,使用者口令存放在users口令檔案中,要實現這樣的效果,需要把httpd.conf配置檔案中secure_info目錄的配置資訊替換為下面的內容:
<Directory "/usr/local/apache2/htdocs/secure_info">
Options Indexes FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "secure_info_auth"
AuthUserFile /usr/local/apache2/conf/users
require user sam
Order deny,allow
Deny from all
Allow from 172.20.17.55
</Directory>
重啟Apache服務後使用瀏覽器訪問http://demoserver/security_info進行測試,如 圖16.31所示。輸入使用者和口令,單擊【確認】按鈕,驗證成功後將進入如圖16.29所示的頁面;否則將會要求重新輸入。如果單擊【取消】按鈕將會返回如圖16.32所示的錯誤頁面。

[b][size=large]分散式配置檔案[/size][/b]
.htaccess檔案又稱為“分散式配置檔案”,該檔案可以覆蓋httpd.conf檔案中的配置,但是它只能設定對目錄的訪問控制和使用者認證。.htaccess檔案可以有多個,每個.htaccess檔案的作用範圍僅限於該檔案所存放的目錄以及該目錄下的所有子目錄。雖然.htaccess能實現的功能在<Directory>段中都能夠實現,但是因為在.htaccess修改配置後並不需要重啟Apache服務就能生效,所以在一些對停機時間要求較高的系統中可以使用。

%注意:一般情況下,Apache並不建議使用.htaccess檔案,因為使用.htaccess檔案會對伺服器效能造成影響。

[b]舉例[/b]
以上面例子為基礎來演示在.htaccess檔案中配置訪問控制和使用者認證的過程
1)開啟httpd.conf配置檔案,將security_info目錄的配置資訊替換為下面的內容。
<Directory "/usr/local/apache2/htdocs/secure_info">
AllowOverride All
</Directory>


修改主要包括兩個方面:

[list]
[*]刪除原有的關於訪問控制和使用者認證的引數和指令,因為這些指令將會被寫到.htaccess檔案中去。
[*]添加了AllowOverride All引數,允許.htaccess檔案覆蓋httpd.conf檔案中關於secure_info目錄的配置。如果不做這項設定,.htaccess檔案中的配置將不能生效。
[/list]
2)重啟Apache服務,在/usr/local/apache2/htdocs/secure_info/目錄下建立一個檔案.htaccess,寫入以下內容:
    AuthType Basic
AuthName "secure_info_auth"
AuthUserFile /usr/local/apache2/conf/users
require user sam
Order deny,allow
Deny from all
Allow from 172.20.17.55