要限制對一個網頁的訪問,可使用Apache和第三方提供的身份認證模塊和方法來驗證用戶的憑據(如用戶名和密碼)。一些模塊支持通過各種數據庫(包括NIS和LDAP)進行身份認證。
用戶認證指令通常放置在.htaccess文件中。下面是使用Apache默認身份認證模塊(mod_auth)的一個基本.htaccess文件。當這個文件放置在/var/www中時,會導致Apache要求用戶輸入密碼進行驗證,然後浏覽器才能訪問/var/www目錄層次結構中的內容。應用時,要用本地服務器的相應值進行替換。
# cat .htaccess
AuthUserFile /var/www/.htpasswd
AuthGroupFile /dev/null
AuthName "Browser dialog box query"
AuthType Basic
require valid-user
/var/www/.htpasswd是一個.htpasswd文件的典型絕對路徑名,用戶在要求輸入用戶名和密碼的對話框中會看到字符串Browser dialog box query。
前面.htaccess文件的第二行關閉組功能。第四行指定用戶的身份認證類型為Basic,這也是mod_auth模塊的默認設置。最後一行告訴Apache哪些用戶可以訪問受保護的目錄。valid-user條目會授權任何用戶(用戶名在Apache密碼文件中並且輸入的密碼正確)訪問該目錄。
只要Apache可以讀取其密碼文件,該文件可放在系統上的任何地方。把這個文件與.htaccess文件放在同一目錄下也是安全的,因為默認情況下,Apache將不會對名字以.ht開頭的任何文件的請求進行回復。但是一定不要更改httpd.conf配置文件,以防Apache對名字以.ht開頭的文件的請求進行回復。
下面的命令將在工作目錄中創建(–c)一個帶有Sam條目的.htpasswd文件。省略–c選項可以在現有.htpasswd文件中添加用戶或更改密碼。
$ htpasswd -c .htpasswd sam
New password:
Re-type new password:
Adding password for user sam
默認的httpd.conf文件包括用於/var/www的AllowOverride None指令。要啟用Apache來處理用戶認證指令(如讀取.htaccess文件),必須將這個指令更改為AllowOverride AuthConfig或將其刪除。
在Apache已配置為可處理.htaccess文件後,當它收到對文件的請求時,必須從所請求的文件向上遍歷目錄層次結構一直到根目錄,查找.htacess文件,以確定它是否可以提供該請求的文件。此搜索可能會影響性能。通常情況下性能下降不太嚴重,但如果性能很關鍵,則這個問題將很棘手。