(1)httpd服务的访问控制 作用: 控制对网站资源的访问 为特定的网站目录添加访问授权
常用访问控制方式: 客户机的限制 用户授权限制
*(2)基于客户端地址的访问控制 1.使用Require配置项实现访问控制,按先后顺序限制 2.可用于,,,,配置段中 3.Require配置项的常见语法 Require all granted 允许所有主机访问 Require all denied 拒绝所有主机访问 Require local 仅允许本地主机访问 Require [not] host <主机名或域名列表> 允许或拒绝指定主机或域访问 Require [not] ip <ip地址或网段列表> 允许或拒绝指定ip或网段访问 /usr/local/httpd
4.使用not禁止访问时要将其置于 容器中并在容器中指定相应的限制策略
5.多个不带not的require配置语句之间是‘或’关系,满足一条即可访问
Require 192.168.10.1 Require not 192.168.10.2 Require 192.168.10.10 Require 192.168.10.4
6、出现即不带not又有带not的语句,之间是‘与’关系。同时满足所有要求才可以访问
练习: linux-1:apache服务器
练习1:仅允许192.168.10.10 访问
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf 226 <Directory “/usr/local/httpd/htdocs”>
251 #Require all granted 252 Require ip 192.168.10.10 253
[root@www ~]# systemctl restart httpd
[root@localhost httpd]# netstat -anput |grep httpd
验证:
linux-2 客户机 192.168.10.2 验证:curl http://192.168.10.1[root@ns2 ~]# curl http://192.168.10.1
403 ForbiddenYou don't have permission to access / on this server.
2.apache服务器 [root@www ~]# tail -f /usr/local/httpd/logs/access_log
其他客户机访问时服务器会返回错误代码的网页(403)
练习2:禁止内网网段192.168.0.0/24和192.168.10.0/24的主机访问,允许其他任何主机访问
[root@www ~]# vim /usr/local/httpd/conf/httpd.conf 226 <Directory “/usr/local/httpd/htdocs”>
251 252 Require all granted Require ip 192.168.10.10 253 Require not ip 192.168.10.128/25 192.168.0.0/24 254 255
[root@www ~]# systemctl restart httpd
linux-2 客户机 192.168.10.2[root@ns2 ~]# curl http://192.168.10.1
403 ForbiddenYou don't have permission to access / on this server.
(三)用户授权限制 Apache提供了认证(Authentication)与授权(Authorization)机制,当用户访问使用此机制控制的目录时,会提示用户输入用户名和密码,只有输入正确的用户名和密码的主机才可以访问该资源。
2.1 Apache的认证类型分为两种:基本(Basic)认证和摘要认证(Digest)认证两种。摘要认证比基本认证更加安全,然是并非所有浏览器都支持摘要认证,所以本节只针对基本认证进行介绍。基本认证的方式是:当Web浏览器请求经过认证模式保护的URL时,将会出现一个对话框,要求用户输入用户名和口令。用户输入后,传送给服务器,Web服务器验证它的正确性。如果正确,则返回页面;否则出现401错误。
1.创建用户认证数据库
[root@www ~]# cd /usr/local/httpd/
新建密码数据文件.awspwd,其中包含一个名为webadmin用户信息
[root@www httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin
New password: Re-type new password: Adding password for user webadmin
确认用户数据库文件 [root@www httpd]# cat /usr/local/httpd/conf/.awspwd webadmin:2tmD3LVFynBAE
在已有数据文件中添加新用户ly [root@www ~]# htpasswd /usr/local/httpd/conf/.awspwd ly
2.添加用户授权配置
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf ……
226 <Directory “/usr/local/httpd/htdocs”>
251 # 252 #Require all granted 253 # Require not ip 192.168.10.0/24 192.168.0.0/24 254 # 255 256 AuthName “xu yao mi ma” 257 AuthType Basic 258 AuthUserFile /usr/local/httpd/conf/.awspwd 259 Require valid-user 260 261
注释:
受保护的领域名称,该内容在浏览器弹出的认证对话框中显示。 256 AuthName “xu yao mi ma” 设置认证的类型(basic基本认证) 257 AuthType Basic 用户认证账号文件 258 AuthUserFile /usr/local/httpd/conf/.awspwd 要求通过认证才能访问 varlid-user 合法用户,如果单个用户可直接指定 259 Require valid-user
[root@www ~]# systemctl restart httpd
验证用户访问授权 1.打开win7客户机使用浏览器访问尝试http://192.168.10.1 查看是否需要用户名和密码来进行访问 2. linux-2 客户机 192.168.10.2
[root@ns2 ~]# curl http://192.168.10.1 访问失败
扩展:混合模式设置
注意:主机访问控制 > 用户访问授权 设置了两种混合模式时。主机访控中允许的主机可以直接访问网站,不需要用户授权;主机访控禁止的主机在需要用户授权才能访问网站
练习: 主机访问控制:允许192.168.10.2访问 用户授权:要求合法用户访问
[root@www ~]# vi /usr/local/httpd/conf/httpd.conf ……
226 <Directory “/usr/local/httpd/htdocs”>
[root@www ~]# systemctl restart httpd
验证: 1.win7客户机 192.168.10.10 需要用户授权访问
linux-2 192.168.10.2 直接可以访问
二、构建虚拟web主机1.虚拟Web主机、
在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用一台真正的计算机
2.httpd支持的虚拟主机类型
*基于域名的虚拟主机
*基于IP地址的虚拟主机
*基于端口的虚拟主机
(一)构建虚拟主机——基于域名
1.应用示例: *构建2个虚拟Web站点:
。www.benet.com,IP地址为 192.168.10.1 。 www.accp.com,IP地址为 192.168.10.1
在浏览器中访问这两个域名时,分别显示不同的内容
1.为虚拟主机提供域名解析(有dns环境)
[root@dnssvr ~]# vi /var/named/chroot/etc/named.conf
…… zone “benet.com” IN { type master; file “benet.com.zone”; }; zone “accp.com” IN { type master; file “accp.com.zone”; };
课本有错误(benet.com后面不能有".")
[root@dnssvr ~]# vi /var/named/chroot/var/named/benet.com.zone @ IN SOA benet.com. admin.benet.com. ( …… @ IN NS dnssvr.benet.com. dnssvr IN A 173.17.17.2 www IN A 192.168.10.1
[root@dnssvr ~]# vi /var/named/chroot/var/named/accp.com.zone @ IN SOA accp.com. admin.accp.com. ( …… @ IN NS dnssvr.benet.com. www IN A 192.168.10.1 ……为基本的配置命令,需要从样本里面复制
2.为虚拟主机准备网页文档
[root@www ~]# mkdir -p /var/www/html/benetcom
[root@www ~]# mkdir -p /var/www/html/accpcom
[root@www ~]# echo “
[root@www ~]# echo “
3.添加虚拟主机配置 *配置独立的虚拟主机配置文件,然后在主文件里面加载即可,方便配置内容的维护
[root@www ~]# vim /usr/local/httpd/conf/extra/vhosts.conf
<VirtualHost *:80> ServerName www.benet.com DocumentRoot /var/www/html/benetcom ErrorLog logs/www.benet.com.error_log CustomLog logs/www.benet.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory><VirtualHost *:80> ServerName www.accp.com DocumentRoot /var/www/html/accpcom ErrorLog logs/www.accp.com.error_log CustomLog logs/www.accp.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory>配置选项: 1.虚拟主机区域VirtualHost
2.目录权限Directory 继承其父目录 的授权许可即可
主文件里面加载 [root@www ~]# vim /usr/local/httpd/conf/httpd.conf
485 # Virtual hosts 486 #Include conf/extra/httpd-vhosts.conf
添加此选项–加载独立的配置文件 487 Include conf/extra/vhosts.conf
[root@www ~]# /usr/local/httpd/bin/apachectl restart
4.在客户机分别访问虚拟Web主机 实验环境中没有配置dns,可以的hosts文件中配置主机ip映射
4.1 win7 客户机 c:\windows\system32\drivers\etc\hosts
4.2 linux主机 /etc/hosts
应用示例:
1,构建2个虚拟Web站点:
www.benet.com,IP地址为 192.168.10.1
www.accp.com,IP地址为 192.168.10.111
[root@www ~]# ifconfig ens33:0 192.168.10.111
[root@www ~]# vim /usr/local/httpd/conf/extra/vhosts.conf
<VirtualHost 192.168.10.1:80> ServerName www.benet.com DocumentRoot /var/www/html/benetcom ErrorLog logs/www.benet.com.error_log CustomLog logs/www.benet.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory><VirtualHost 192.168.10.111:80> ServerName www.accp.com DocumentRoot /var/www/html/accpcom ErrorLog logs/www.accp.com.error_log CustomLog logs/www.accp.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory>[root@www ~]# systemctl restart httpd
2.在浏览器中访问这两个IP时,分别显示不同的内容 http://192.168.10.1 http://192.168.10.111
应用示例: 1.构建2个虚拟Web站点:
www.benet.com,IP地址、端口为 192.168.10.1:80
www.accp.com,IP地址、端口为 192.168.10.1:8353
[root@www ~]# vim /usr/local/httpd/conf/extra/vhosts.conf
Listen 80 Listen 8353
<VirtualHost 192.168.10.1:80> ServerName www.benet.com DocumentRoot /var/www/html/benetcom ErrorLog logs/www.benet.com.error_log CustomLog logs/www.benet.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory><VirtualHost 192.168.10.1:8353> ServerName www.accp.com DocumentRoot /var/www/html/accpcom ErrorLog logs/www.accp.com.error_log CustomLog logs/www.accp.com.access_log common <Directory “/var/www/html”> Require all granted
</Directory>[root@www ~]# systemctl restart httpd
2.在浏览器中访问这两个端口时,分别显示不同的内容 http://192.168.10.1 http://192.168.10.1:8353