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文件,使其可以进行解析