網路城邦

上一篇 回創作列表 下一篇  字體:
Apache用戶授權和訪問權限控制(Linux系統)
2009/03/02 11:11:47瀏覽13908|回應0|推薦1

你也許在訪問某些網站時會遇到過這樣的情況,當你點擊某個連接時,你的瀏覽器會彈出一個身份驗證的對話框,要求輸入賬號及密碼,如果沒有,就無法繼續瀏覽了。有人會以為這是用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://blog.udn.com/* 的鏈接的用戶進入此目錄,由其它鏈接來的訪客都不得進入; " * "表示此網站底下所有的鏈接。其中的 http://blog.udn.com/* 也可以是:http://202.106.184.200/* 或是指定文件 http://blog.udn.com/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://blog.udn.com/*
</Limit>

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=maxmas&aid=2700830