httpd2.2訪問控制與虛擬主機配置
實驗環境:CentOS 6.9 httpd 2.2
基礎知識:
站點訪問控制
可以基於兩種類型的路徑指明對那些資源進行訪問控制
文件系統路徑
<Directory ""> </Direcotry>
<File ""> </File>
<FileMatch ""> </FileMatch>
<Location ""> </Location>
...
訪問控制機制
基於來源地址
基於賬號
Directory中“基於來源地址”實現訪問控制
(1) Options
所有可用特性:
Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
Indexes: 索引;
FollowSymlinks:允許跟蹤符號鏈接文件;
(2) 基於來源地址的訪問控制機制
Order:檢查次序
Order allow,deny 白名單
Allow from
Deny from
來源地址:
IP
NetAddr:
172.16
172.16.0.0
172.16.0.0/16
172.16.0.0/255.255.0.0
基於用戶的訪問控制
認證質詢:
WWW-Authenticate:響應碼為401,拒絕客戶端請求,並說明要求客戶提供賬號和密碼;
認證:
Authorization:客戶端用戶填入賬號和密碼後再次發送請求報文;認證通過,則服務器發送響應的資源;
認證類型:
basic:明文
digest:消息摘要
安全域:需要用戶認證後方能訪問的路徑;
應該通過名稱對其進行標識,並用於告知用戶認證的原因;
虛擬賬號:僅用於訪問某服務時用到的認證標識;
存儲:
文本文件
SQL數據庫
ldap
nis
basic認證:
(1) 定義安全域
<Directory "">
Options None
AllowOverride None
AuthType Basic
AuthName "STRING"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
Require user username1 username2 ...
</Directory>
允許賬號文件中的所有用戶登錄訪問:
Require valid-user
(2) 提供賬號和密碼存儲(文本文件)
使用htpasswd命令進行管理
htpasswd [options] passwordfile username
-c: 自動創建passwordfile,因此,僅應該在添加第一個用戶時使用;
-m: md5加密用戶密碼;
-s: sha1加密用戶密碼;
-D: 刪除指定用戶
(3) 實現基於組進行認證
<Directory "">
Options None
AllowOverride None
AuthType Basic
AuthName "STRING"
AuthUserFile "/PATH/TO/HTTPD_USER_PASSWD_FILE"
AuthGroupFile "/PATH/TO/HTTPD_GROUP_FILE"
Require group GROUP1 GROUP2 ...
</Directory>
要提供:用戶賬號文件和組文件;
組文件:每一行定義一個組
GRP_NAME:user1 user2 user3 ...
虛擬主機
有三種實現方案:
基於ip:
為每個虛擬主機準備至少一個ip地址;
基於port:
為每個虛擬主機準備至少一個專用port;實踐中很少使用;
基於hostname:
為每個虛擬主機準備至少一個專用hostname;
可混合使用上述三種方式中任意方式;
註意:一般虛擬主機莫與中心主機混用,所以,要使用虛擬主機,先禁用中心主機;
禁用中心主機:註釋DocumentRoot
每個虛擬主機都有專用配置:
<VirtualHost "IP:PORT">
SeverName
DocumentRoot ""
</VirtualHost>
ServerAlias: 虛擬主機的別名;
ErrorLog
CustomLog
<Directory "">
</Directory>
實驗過程:
1.基於來源地址的訪問控制(源地址可以偽裝適用性有限)
允許的地址訪問
編輯/etc/httpd/conf/httpd.conf配置文件
vim /etc/httpd/conf/httpd.conf
找到當前主目錄下的 Order allow,deny字段
修改allow from字段(這裏的ip是你想允許訪問的ip)
之後保存退出
重啟httpd服務
service httpd restart(reload也行)
除了192.168.242.1其他機器均無法訪問目標頁面
不允許地址訪問
編輯/etc/httpd/conf/httpd.conf配置文件
vim /etc/httpd/conf/httpd.conf
找到當前主目錄下的 Order allow,deny字段
進行如下的修改,重啟服務後可以實現禁止目標ip的訪問
service httpd restart(reload也行)
2.基於用戶的訪問控制
一般情況下有以下兩種,digest方式有些瀏覽器不支持,適用性有限,basic明文相對比較危險,不過可以嘗試通過https來實現加密有一定適用性。目前大多數的用戶控制使用的是表單提交。
(1)basic:明文
(2)digest:消息摘要
環境:
在/var/www/html目錄下創建一個新的admin目錄,在目錄下新建一個內容是admin的index.html文件
編輯配置文件/etc/httpd/conf/httpd.conf
vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
Require valid-user
</Directory>
保存退出後開始創建用戶和密鑰文件(第一次要-c之後添加用戶不需要)
htpasswd -c -m /etc/httpd/conf.d/.htpasswd admin
htpasswd -m /etc/httpd/conf.d/.htpasswd user
重啟httpd服務
service httpd restart
訪問對應目錄下的頁面會提醒輸入賬號和密碼
正確輸入後顯示頁面內容
同時這裏還可以實現基於用戶組的限制訪問
整體方法類似用戶控制,只是多了一個組文件
編輯/etc/httpd/conf/httpd.conf文件
<Directory "/var/www/html/admin">
Options None
AllowOverride None
AuthType Basic
AuthName "Administator private"
AuthUserFile "/etc/httpd/conf.d/.htpasswd"
AuthGroupFile "/etc/httpd/conf.d/.htgroup"
Require group admin
</Directory>
用戶添加仍然使用之前的命令
這裏就不在添加直接做分組就好
創建分組配置文件
vim /etc/httpd/conf.d/.htgroup
保存退出後,重啟httpd服務
service httpd restart
之後訪問對應頁面,只有在admin組下的用戶可以訪問,其他用戶無法訪問
一直在該頁面循環
可以正常訪問
3.虛擬主機的3種實現:
在httpd2.2下啟用虛擬主機的話,最好將主目錄禁用
編輯httpd的配置文件
vim /etc/httpd/conf/httpd.conf
找到DocumentRoot "/var/www/html"字段,將其註釋掉
基於ip
添加一塊網卡
創建好對應目錄和頁面
mkdir -pv /data/web{1,2}
echo web1 > /data/web1/index.html
echo web2 > /data/web2/index.html
在配置文件的最後寫入一下字段,
<VirtualHost 192.168.242.150:80>
ServerName web1.douma.com
DocumentRoot "/data/web1"
</VirtualHost>
<VirtualHost 192.168.242.151:80>
ServerName web2.douma.com
DocumentRoot "/data/web2"
</VirtualHost>
保存後重啟服務,之後進行檢驗
基於port
修改配置文件
  找到listen字段添加8080
<VirtualHost 192.168.242.150:80>
ServerName web1.douma.com
DocumentRoot "/data/web1"
</VirtualHost>
<VirtualHost 192.168.242.150:8080>
ServerName web2.douma.com
DocumentRoot "/data/web2"
</VirtualHost>
保存後,重啟httpd服務並且進行檢驗
基於hostname
2.2 要開啟NameVirtualHost:80 項
修改配置文件
NameVirtualHost 192.168.242.150:80
<VirtualHost 192.168.242.150:80>
ServerName web1.douma.com
DocumentRoot "/data/web1"
</VirtualHost>
<VirtualHost 192.168.242.150:80>
ServerName web2.douma.com
DocumentRoot "/data/web2"
</VirtualHost>
保存後重啟httpd服務,這裏要修改hosts文件,使其可以進行解析
httpd2.2訪問控制與虛擬主機配置