Apache 訪問控制

2021-09-08 07:52:00 字數 4725 閱讀 8486

如果**上有些敏感資訊或只希望為乙個小群體所訪問,您需要將伺服器配置為使用者只能訪問被允許的資源。

這裡涉及的配置方式主要是使用 .htaccess 檔案 , 要使用.htaccess檔案,則必須設定伺服器以允許在這些檔案中使用認證指令,即用allowoverride指令指定哪些指令在針對單個目錄的配置檔案中有效。 首先將對應的allowoverride這樣設定:

allowoverride all
apache2 為我們提供了/usr/bin/htpasswd命令用於建立密碼檔案,命令的具體操作方法請參閱htpasswd的手冊頁: 這裡僅做簡單的應用。

首次新增使用者需要使用 ?c 引數,以建立密碼檔案,再次新增使用者則不要 -c引數了:

# 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

必要時,使用htpasswd 命令需要加入完整路徑/usr/bin/htpasswd

修改對應.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,在檔案尾部加入一下內容
auth_mysql_info    localhost    a2_user   password      

options +indexes followsymlinks multiviews

allowoverride authconfig options fileinfo limit

order allow,deny

allow from all

在/var/www/apache2-default/目錄下建立.htaccess檔案, 內容如下:

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

然後重啟apache服務
tonybox:~# /etc/init.d/apache2 restart
在mysql資料庫中新增認證資料庫
$ 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');

此時,訪問訪問web伺服器的預設站點, 您會發現,需要輸入使用者名稱(tony),密碼(123456)方可登入.基於使用者名稱和密碼的認證只是方法之一,時常會有不需要知道來訪者是誰,只需要知道來自**的情況。

allow和deny指令可以允許或拒絕來自特定主機名或主機位址的訪問,同時,order指令告訴apache處理這兩個指令的順序,以改變過濾器。

這些指令的用法:

allow from address
address可以是乙個ip位址(或者ip位址的一部分),也可以是乙個完整的網域名稱(或者網域名稱的一部分),還可以同時指定多個ip位址和網域名稱。

deny from 205.252.46.165
deny from host.example.com
deny from 192.168.2 //這是我們隔壁部門使用的網段 :)

deny from msn.com microsoft.com //不喜歡它們

deny from du //對面的那個傢伙

order可以組合deny和allow指令,以保證在允許乙個群體訪問的同時,對其中的一些又加以限制:

order deny,allow

deny from all

allow from dev.example.com

只列出allow指令不會得到你想要的結果,因為它在允許指定物件訪問的同時並不禁止其他未列出的物件的訪問。所以上例使用的方法是:首先拒絕任何人,然後允許來自特定主機的訪問。

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...