使用者授權和存取控制
你也許在訪問某些網站時會遇到過這樣的情況,當你點擊某個串連時,你的瀏覽器會彈出一個身分識別驗證的對話方塊,要求輸入帳號及密碼,如果沒有,就無法繼續瀏覽了。有人會以為這是用CGI做出來的,其實不然,這是WWW伺服器的使用者授權和存取控制機制在發揮作用。
你是否還記得在設定Apache服務環境的過程中,有……..<./Directory>這個指令,可以對不同的目錄提供不同的保護。但是這樣的設定,需要重新啟動伺服器才會生效,靈活性較差,通過AccessFile指令指定存取控制檔案的方式則比較靈活,在Apache伺服器中設定使用者的存取控制許可權步驟如下:
1、首先對httpd.conf檔案進行設定如下:
<Directory /home/httpd/html> # AllowOverride FileInfo AuthConfig Limit # Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Options Includes FollowSymLinks Indexes AllowOverride All //*注意AllowOverride 一定要設定為All,這樣後面的.htaccess檔案才會起作用 <Limit GET POST OPTIONS PROPFIND> Order allow,deny Allow from all </Limit> # <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> # Order deny,allow # Deny from all # </Limit> </Directory> #指定配置存取控制許可權的檔案名稱 AccessFileName .htaccess |
2、建立.htaccess檔案內容
要控制某目錄的存取權限必須建立一存取控制檔案,檔案名稱前面指定的“.htaccess”,其內容格式如下:
AuthUserFile 使用者帳號密碼檔案名稱 AuthGroupFile 群組帳號密碼檔案名稱 AuthName 畫面提示文字 AuthType 驗證方式 <Limit GET> 密碼驗證方式 </Limit> 使用者驗證方式AuthType目前提供了Basic和Digest兩種。 密碼檢驗設定方法與httpd.conf中的相關設定相同。 具體例子如下: AuthUserFile /etc/secure.user AuthName 安全認證中心 AuthType Basic <Limit GET> require valid-user </Limit> |
3、建立使用者密碼檔案
如果你是第一次建立使用者密碼,命令格式如下:
htpasswd -c 密碼檔案名稱 使用者名稱稱
在上面的例子中,我們將使用者密碼檔案放到了/etc/secure.user檔案中,所以這裡應按照如下進行操作:
htpasswd -c /etc/secure.user sword
程式會提示你輸入兩次使用者的口令,然後使用者密碼檔案就已經建立sword這個使用者也添加完畢了。
如果要向密碼檔案中添加新的使用者,按照如下命令格式進行操作:
htpasswd 密碼檔案 使用者名稱稱
這樣,重新啟動httpd後,進行該WEB目錄時就會有一個對話方塊彈出,要求輸入使用者名稱及使用者口令了。
4、如何減少存取控制對Apache效能的影響
頻繁的使用存取控制會對Apache的效能產生較大的影響,那麼,如何才能減少這種影響呢?最簡單也是最有效方法之一就是減少.htaccess檔案的數目,這樣可以避免Apache對每一個請求都要按照.htaccess檔案的內容進行授權檢查。它不僅在當前的目錄中尋找.htaccess檔案,它還會在目前的目錄的父目錄中尋找。
/
/usr
/usr/local
/usr/local/etc
/usr/local/etc/httpd
/usr/local/etc/httpd/htdocs
/usr/local/etc/httpd/htdocs/docs
通常在根目錄下沒有htaccess檔案,但Apache仍然會進行例行檢查以確定該檔案確實不存在。這是影響很影響伺服器工作效率的事情。下面的方法可以消除這個討厭的過程:將AllowOverride選設定為None,這樣Apache就會檢查.htaccess檔案了。將/根目錄的 AllowOverride選項設為None,只將需要進行存取控制的目錄下的AllowOverride選項設定為all,如下面的例子中將/根目錄的 AllowOverride 選項關閉了,只開啟了/usr/local/etc/httpd/htdocs目錄下的AllowOerride選項,這樣,系統就只在 /usr/local/etc/httpd/htdocs中檢查.htaccess檔案,達到的提高服務效率的目的。
<Directory /> AllowOverride None </Directory> <Directory /usr/local/etc/httpd/htdocs> AllowOverride All </Directory> |
如果除了根目錄以外,還有其它存放WWW檔案的目錄,你也可以採取同樣的方法進行設定。比如:如果你使用UserDir來允許使用者訪問自己的目錄,AllowOverride的設定如下:
<Directory /home/*/public_html> AllowOverride FileInfo Indexes IncludesNOEXEC </Directory> |
5、防止使用者訪問指定的檔案
系統中有一些檔案是不適宜提供給WWW使用者的,如:.htaccess、htpasswd、*.pl等,可以用達到這個目的:
<Files .htaccess> order allow,deny deny from all </Files> |
使用者存取控制三個.htaccess檔案、.htpasswd和.htgroup(用於使用者授權) ,為了安全起見,應該防止使用者瀏覽其中內容,可以在httpd.conf中加入以下內容阻止使用者對其進行訪問:
<Files ~”/.ht”> Order deny, allow Deny from all </Files> |
這樣這三個檔案就不會被使用者訪問了。
6、限制某些使用者訪問特定檔案
可以對目錄進行約束,要限制某些使用者對某個特定檔案的訪問可以使用,比如:不允許非domain.com域內的使用者對/prices/internal.html進行訪問,可以用如下的設定:
<Location /prices/internal.html> order deny,allow deny from all allow from .domain.com </Location> |
如果你要授於相應許可權的機器沒有公開的網域名稱,請在你的/etc/hosts檔案中,將其IP地址映射到某個指定的名稱,然後在Location中對其進行設定,否則該選項是不起作用的。
7、只接受來自特定連結的訪問
例如,只讓所有來自 http://www.sina.com.cn/* 的連結的使用者進入此目錄,由其它連結來的訪客都不得進入; " * "表示此網站底下所有的連結。其中的 http://www.sina.com.cn/* 也可以是:http://202.106.184.200/* 或是指定檔案 http://www.sina.com.cn/news.html
.htaccess檔案的內容如下:
AuthUserFile /dev/null AuthGroupFile /dev/null AuthName ExampleAllowFromSpecificURL AuthType Basic <Limit GET> order deny,allow deny from all referer allow from http://www.sina.com.cn/* </Limit> |