1. 程式人生 > >httpd2.2訪問控制與虛擬主機配置

httpd2.2訪問控制與虛擬主機配置

httpd 基礎服務

httpd2.2訪問控制與虛擬主機配置

實驗環境:CentOS 6.9 httpd 2.2

基礎知識:

站點訪問控制

   可以基於兩種類型的路徑指明對那些資源進行訪問控制
   文件系統路徑
   <Directory ""> </Direcotry>
  <File ""> </File>
   <FileMatch ""> </FileMatch>

   URL路徑:
   <Location ""> </Location>
  ...
訪問控制機制
   基於來源地址
  基於賬號
  Directory中“基於來源地址”實現訪問控制
    (1) Options
       所有可用特性:
        Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        None, All
        Indexes: 索引;
        FollowSymlinks:允許跟蹤符號鏈接文件;
    (2) 基於來源地址的訪問控制機制
       Order:檢查次序
       Order allow,deny 白名單
       Order deny,allow 黑名單
      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
  修改配置文件

&emsp;&emsp;找到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訪問控制與虛擬主機配置