httpd访问控制
为了更好地控制对网站资源的访问,可以为特定的网站目录添加访问授权。
🥓作用
控制对网站资源的访问
为特定的网站目录添加访问授权
常用访问控制方式
客户机地址限制
用户授权限制
🥓基于客户端地址的访问控制
使用Require配置项实现访问控制,按先后顺序限制 可用于<Location>、<Directory>、<Files>、<Limit>配置段中, 注:not表示拒绝
🥓用户授权限制
创建用户认证数据库
添加用户授权配置
验证用户访问授权
🥓虚拟Web主机
在同一台服务器中运行多个Web站点,其中每一个站点并不独立占用一台真正的计算机。
🥓httpd支持的虚拟主机类型
基于域名的虚拟主机
基于IP地址的虚拟主机
基于端口的虚拟主机
实验步骤
客户机地址限制
Require配置项的常见语法
Require all granted——表示允许所有主机访问。
Require all denied——表示拒绝所有主机访问。
Require local——表示仅允许本地主机访问。
Require [not] host <主机名或域名列表>
Require [not] ip <ip地址或网段列表>
🍓注:not表示拒绝
通常情况下,网站服务器是对所有客户机开放的,网页文档目录未做任何限制,因此使用的是Require all granted策略,表示允许从任何客户机访问,具体配置如下。
1. vim /usr/local/httpd/conf/httpd.conf 2. 文本下搜索 3. <Directory "/usr/local/httpd/htdocs"> 4. ......//省略部分内容 5. Require all granted //添加(默认有) 6. </Directory>
若只希望 禁止来自一个内网网段和一个IP地址。但允许其他任何主机访问,可以使用如下限制策略。
1. vim /usr/local/htpd/conf/httpd.conf 2. 搜索 <Directory "/usr/local/httpd/htdocs"> 3. <RequireAll> //加 4. Require all granted 5. Require not ip 192.168.1.10 192.168.2.0/24 //添加要禁止的网段或主机 6. </RequireAll> //加 7. </Directory>
未做路径优化的重启apachectl服务
/usr/local/httpd/bin/apachectl restart
重启后,未被授权的客户机访问网站目录时,将会拒接访问。
因为本机地址为1.100,客户机1.10所以访问被拒绝。修改成1.0网段没有地址冲突的地址即可访问。
修改地址后可以访问的默认网页
用户授权限制
基于用户的访问控制包含认证(Authentication)和授权(Authorization)两个过程,是Apache允许指定用户使用用户名的密码访问特定资源的一种方式。
httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httod之前添加“--enable-auth-digest” 选项,但并不是所有的浏览器都支持摘要认证;而基本认证是httpd服务的基本功能,不需要预先配置特别选项。
创建用户认证数据文件
httpd的基本认证通过校验用户名,密码组合来判断是否允许用户访问。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
使用htpasswd工具时,必须指定用户数据文件的位置,添加“-c”选项表示新建此文件。
创建zhang3用户,/.awspwd为存放目录,新密码输入两次。
1. [root@localhost ~]# cd /usr/local/httpd 2. [root@localhost httpd]# bin/htpasswd -c /usr/local/httpd/conf/.awspwd zhang3 3. New password: 4. Re-type new password: 5. Adding password for user zhang3 6. [root@localhost httpd]# cat /usr/local/httpd/conf/.awspwd 7. zhang3:$apr1$T1/SEmVK$k7VqIYih78oHFcfst3a.B/
已创好/.awpwd目录后创建用户取消“-c”选项,创建li4用户
1. [root@localhost httpd]# bin/htpasswd /usr/local/httpd/conf/.awspwd li4 2. New password: 3. Re-type new password: 4. Adding password for user li4 5. [root@localhost httpd]# cat /usr/local/httpd/conf/.awspwd 6. zhang3:$apr1$T1/SEmVK$k7VqIYih78oHFcfst3a.B/ 7. li4:$apr1$SLNy2tvP$H36ifUr/wsz.klI1cY1bt0
添加用户授权配置
有了授权用户之后还需要修改httpd.conf 配置文件,在特定的目录区域中添加授权配置,以启用基本认证并配置允许哪些用户访问。例如,若只允许.awspwd 数据文件中的任何一用户访问网页,可以执行以下操作。
🍓注:客户机地址限制的配置需要Require all granted改成Require all denied或者注释掉。
1. <RequireAll> 2. # Require all granted // 加#号注释掉,其他不用改 3. Require not ip 192.168.1.10 192.168.2.0/24 4. </RequireAll>
1. [root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf 2. 搜索此文件 <Directory "/usr/local/httpd/htdocs"> 3. ......省略部分 4. 输入以下四行配置 5. authname "123.com" 6. authtype basic 7. authuserfile /usr/local/httpd/conf/.awspwd 8. require valid-user 9. [root@localhost ~]# systemctl restart httpd.service
上述配置文件内容中,相关配置项的含义如下:
authname:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示。
authtype:设置认证的类型,basic表示基本认证。
authuserfile:设置用于保存用户账号,密码的认证文件路径。
require valid-user:要求只有认证文件中的合法用户才能访问。
🍓需要注意的是,用户访问授权与主机访问控制同时设置时,设置的主机访问控制优先生效。
验证用户访问授权
当再次访问网站的默认首页时,浏览器会首先弹出认证对话框。
构建虚拟web主机
基于域名的虚拟主机:相同IP,相同端口号,不同域名。
基于IP地址的虚拟主机: 不同IP相同端口。
基于端口的虚拟主机: 相同IP,相同域名,不同端口号。
基于域名的虚拟主机
- 为虚拟主机提供域名解析
🥠安装DNS
没有DNS需要安装,有的话可省略此部分
挂载系统盘安装源码包
1. [root@localhost ~]# mount /dev/cdrom /media 2. mount: /dev/sr0 写保护,将以只读方式挂载 3. [root@localhost ~]# cd /media/Packages/ 4. [root@localhost Packages]# rpm -ivh bind-9.9.4-37.el7.x86_64.rpm bind-chroot-9.9.4-37.el7.x86_64.rpm
主配置文件
[root@localhost ~]# vim /etc/named.conf
配置如图,将红框中的两行删除
添加两个区域
1. zone "123.com" in { 2. type master; 3. file "123.com.zone"; 4. }; 5. zone "456.com" in { 6. type master; 7. file "456.com.zone"; 8. }; 9.
区域数据1文件(正向)
[root@localhost ~]# vim /var/named/123.com.zone
文件内配置
1. $ttl 86400 2. @ in soa 123.com. admin.123.com. ( 3. 201801 4. 3h 5. 15m 6. 1w 7. 1d 8. ) 9. in ns ns1.123.com. 10. ns1 in a 192.168.1.100 11. www in a 192.168.1.100
区域数据2文件(正向)
[root@localhost ~]# vim /var/named/456.com.zone
文件内配置
1. $ttl 86400 2. @ in soa 456.com. admin.456.com. ( 3. 202253 4. 3h 5. 15m 6. 1w 7. 1d 8. ) 9. in ns ns1.456.com. 10. ns1 in a 192.168.1.100 11. www in a 192.168.1.100
重启服务
systemctl restart named
排错(OK直接跳过)
检查/etc/named.conf文件:
named-checkconf -z /etc/named.conf
检查正向和反向数据文件:
named-checkzone 123.com /var/named/123.com.zone
为每个虚拟web主机准备网站目录及网页文档。
1. [root@localhost ~]# mkdir -p /var/www/html/123com 2. [root@localhost ~]# mkdir -p /var/www/html/456com 3. [root@localhost ~]# echo "<h1>www.123.com</h1>" > /var/www/html/123com/index.html 4. [root@localhost ~]# echo "<h1>www.456.com</h1>" > /var/www/html/456com/index.html
添加虚拟主机配置
1. [root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 2. 3. <VirtualHost *:80> 虚拟站点区域 4. ServerAdmin 123@.com 邮箱 5. DocumentRoot "/var/www/html/123com" 网站根目录 6. ServerName www.123.com 完整名称(别名) 7. ErrorLog "logs/www.123.com-error_log" 错误日志 8. CustomLog "logs/www.123.com-access_log" common 访问日志 9. <directory "/var/www/html"> 设置访问权限 10. require all granted 11. </directory> 12. </VirtualHost> 13. 14. <VirtualHost *:80> 15. ServerAdmin 456@.com 16. DocumentRoot "/var/www/html/456com" 17. ServerName www.456.com 18. ErrorLog "logs/www.456.com-error_log" 19. CustomLog "logs/www.456.com-access_log" common 20. <directory "/var/www/html"> 21. require all granted 22. </directory> 23. </VirtualHost>
加载独立的配置文件
1. [root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf 2. # nclude conf/extra/httpd-vhosts.conf 取消#注释
重启服务
/usr/local/httpd/bin/apachectl restart
在本机访问虚拟web主机。注意,这里要在本地主机访问,如果在其他服务器需要修改本地hosts文件
基于IP地址的虚拟主机
对于基于IP地址的虚拟主机,每个虚拟web主机各自使用不同的IP地址,但是都通过同一台httpd服务器对外提供web浏览服务。
虚拟机临时配置IP命令如下
1. [root@localhost ~]# ifconfig ens33:2 192.168.1.200 2. [root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 3. 4. 插入模式下网站1(不同地址相同端口) 5. <VirtualHost *:80>改成<VirtualHost 192.168.1.100:80> 6. 网站2 7. <VirtualHost *:80>改成 <VirtualHost 192.168.1.200:80> 8. 加载独立的配置文件 9. [root@localhost ~]# vim /usr/local/httpd/conf/httpd.conf 10. # nclude conf/extra/httpd-vhosts.conf 取消#注释 11. [root@localhost ~]# systemctl restart httpd
在客户机上访问虚拟web主机
基于端口的虚拟主机
基于端口的虚拟机通常只用于同一个web站点,其针对的网站名称、、IP地址往往都是相同的,但 通过不同的TCP端口来提供不同网页内容的服务入口。
配置基于端口的虚拟web主机时,需要通过多个 Listen配置项来指定要监听的TCP端口号,每个虚拟web主机的VirtualHost配置中应同时指定IP地址和端口号。
🍓特别注意的是基于端口的虚拟主机需要监听端口号,如Listen 80。
1. [root@localhost ~]# vim /usr/local/httpd/conf/extra/httpd-vhosts.conf 2. <VirtualHost 192.168.1.100:80> 加端口号 3. ...... 4. 5. <VirtualHost 192.168.1.100:8080> 6. ...... 7. #在最后面空白地方加,不要加在模块内 8. Listen 80 监听80端口 9. Listen 8080 监听8080端口
加载独立的配置文件并重启
1. [root@localhost ~]# vim //usr/local/httpd/conf/httpd.conf 2. # nclude conf/extra/httpd-vhosts.conf 取消#注释 3. [root@localhost ~]# systemctl restart httpd
访问时,默认是80端口,第二个网站需要添加8080端口。