如果**上有些敏感資訊或只希望為乙個小群體所訪問,您需要將伺服器配置為使用者只能訪問被允許的資源。
這裡涉及的配置方式主要是使用 .htaccess 檔案 , 要使用.htaccess檔案,則必須設定伺服器以允許在這些檔案中使用認證指令,即用allowoverride指令指定哪些指令在針對單個目錄的配置檔案中有效。 首先將對應的allowoverride這樣設定:
apache2 為我們提供了/usr/bin/htpasswd命令用於建立密碼檔案,命令的具體操作方法請參閱htpasswd的手冊頁: 這裡僅做簡單的應用。allowoverride all
首次新增使用者需要使用 ?c 引數,以建立密碼檔案,再次新增使用者則不要 -c引數了:
必要時,使用htpasswd 命令需要加入完整路徑/usr/bin/htpasswd# mkdir /etc/apache2/passwd
# htpasswd -c /etc/apache2/passwd/passwords tony
new password: [mypassword]
re-type new password: [mypassword]
adding password for user tony
# htpasswd /etc/apache2/passwd/passwords etony
new password: [mypassword]
re-type new password: [mypassword]
adding password for user etony
修改對應.htaccess檔案,加入如下內容:
讓我們逐個解釋這些指令。authtype basic
authname "restricted files"
authuserfile /etc/apache2/passwd/passwords
require user tony
authtype指令選擇對使用者實施認證的方法,最常用的是由mod_auth_basic提供的basic 。authname指令設定了使用認證的域(realm),它起兩個作用,首先,此域會出現在顯示給使用者的密碼提問對話方塊中,其次,也幫助客戶端程式確定應該傳送哪個密碼。
authuserfile指令設定了密碼檔案的位置,也就是剛才我們用htpasswd建立的檔案。
最後,require指令設定了允許訪問受保護區域的使用者。
上述指令只允許乙個人(乙個叫tony的使用者)訪問這個目錄,但是多數情況下。都需要允許多人訪問,這時可以調整require選項為:
可以允許密碼檔案中的所有使用者使用正確的密碼進行訪問。require valid-user
可能存在的問題
由於採用了basic認證的方法,每次向伺服器請求甚至重新整理乙個受保護的頁面或時都必須校驗使用者名稱和密碼,為此,必須開啟密碼檔案並逐行搜尋使用者名稱,因此,伺服器響應速度會受一些影響,受影響的程度與密碼檔案的大小成正比。
所以,對密碼檔案中的使用者總數存在乙個實際上的上限,此上限取決於特定的伺服器機器的效能,但是一般有幾百個使用者就會對響應速度有非常明顯的影響,在這種情況下,可以考慮用其他認證方法。
基於mysql資料庫的訪問控制需要使用mod-auth-mysql認證模組, 首先安裝認證模組
然後啟用該模組tony@tonybox:~$sudo aptitude install libapache2-mod-auth-mysql
修改主配置檔案a2enmod auth_mysql
/etc/apache2/apache2.conf
,在檔案尾部加入一下內容在/var/www/apache2-default/目錄下建立.htaccess檔案, 內容如下:auth_mysql_info localhost a2_user password
options +indexes followsymlinks multiviews
allowoverride authconfig options fileinfo limit
order allow,deny
allow from all
然後重啟apache服務authmysql on
authmysql_authoritative on
authmysql_db auth
authmysql_password_table clients
authmysql_group_table clients
authmysql_empty_passwords off
authmysql_encryption_types plaintext crypt_des
authbasicauthoritative off
authname "default"
authtype basic
require group tony
在mysql資料庫中新增認證資料庫tonybox:~# /etc/init.d/apache2 restart
此時,訪問訪問web伺服器的預設站點, 您會發現,需要輸入使用者名稱(tony),密碼(123456)方可登入.基於使用者名稱和密碼的認證只是方法之一,時常會有不需要知道來訪者是誰,只需要知道來自**的情況。$ mysql -uroot -p
mysql> grant all on auth.* to a2_user@localhost identified by 'password';
mysql> flush privileges;
mysql> create database auth;
create table `clients` (
`username` varchar(25) not null default '',
`passwd` varchar(25) not null default '',
`groups` varchar(25) not null default '',
primary key (`username`),
key `groups` (`groups`)
) engine=myisam;
insert into `clients` values ('tony', '123456', 'tony');
allow和deny指令可以允許或拒絕來自特定主機名或主機位址的訪問,同時,order指令告訴apache處理這兩個指令的順序,以改變過濾器。
這些指令的用法:
address可以是乙個ip位址(或者ip位址的一部分),也可以是乙個完整的網域名稱(或者網域名稱的一部分),還可以同時指定多個ip位址和網域名稱。allow from address
deny from 205.252.46.165
deny from host.example.com
order可以組合deny和allow指令,以保證在允許乙個群體訪問的同時,對其中的一些又加以限制:deny from 192.168.2 //這是我們隔壁部門使用的網段 :)
deny from msn.com microsoft.com //不喜歡它們
deny from du //對面的那個傢伙
只列出allow指令不會得到你想要的結果,因為它在允許指定物件訪問的同時並不禁止其他未列出的物件的訪問。所以上例使用的方法是:首先拒絕任何人,然後允許來自特定主機的訪問。order deny,allow
deny from all
allow from dev.example.com
Apache 訪問控制
order 指定執行允許訪問規則和拒絕訪問規則 deny 定義拒絕訪問列表 allow 定義允許訪問列表 order allow,deny 先執行允許,再執行拒絕 order deny,allow 先執行拒絕,再執行允許 若先允許 拒絕 了乙個ip位址或網段的訪問,再拒絕 允許 all,那麼所有訪問...
Apache目錄訪問控制
apache通過配置的方式實現對請求資源的控制,基本對目錄控制的配置如下 option indexes includes execcgi followsymlink allowoverride none order allow deny allow from all 這裡的配置都是針對 home h...
linux下apache訪問控制
chkconfig 35 85 21 35級別自動執行 第85個啟動 第21個關閉 80 修改server名,並將 去掉 指定目錄區域 authname welcome to dsb 介面提示詞 authtype basic 基本認證型別 awspwd 使用者資料檔案 require valid u...