一、Apache的访问控制
- 可对特定的网站目录添加访问授权,对客户机地址限制、用户授权做限制;两种控制方式都应用与httpd.conf配置文件中的虚拟目录区域
<Directory 目录位置>
目录相关的配置参数和指令
</Directory>
*每个Diretory段以<Diretory>开始,以</Diretory>结束,段作用于<Diretory>中制定的目录及其里面的所有文件和子目录。在段中可设置与目录相关的参数和指令,包括访问控制和认证,控制方法主要有基于ip地址、域名、http方法、用户等。
1.客户机地址限制
- 通过配置项Order、Deny from、Allow from,根据客户机的主机名或IP地址决定是否允许客户端访问;其中Order配置项用于设置限制顺序,Deny from和Allow from用于设置具体限制内容
Apache-2.2.x
-
Allow,deny:先“允许”后“拒绝”,默认拒绝所有未明确允许的客户机地址
-
Deny,allow:先“拒绝”后“允许”,默认允许所有未明确拒绝的客户机地址
-
使用Allow from和Deny from配置项时,需要设置客户机地址以构成完整的限制策略,地址的形式可以是IP地址、网络地址、主机名或域名,使用名称“all”时表示任意地址。限制策略格式如下 Deny from address1 address2 ... Allow from address1 address2 ...
-
通常情况,网站服务器对所有客户机开放,网页文档未作任何限制,因此使用的是“Allow from all”的策略,表示允许从任何客户机访问,策略格式如下
<Directory “/usr/local/httpd/htdocs”>
.. //省略部分内容
Order Allow,deny
Allow from all
</Directory>
- 需要使用“仅允许”的限制策略时,应将处理顺序改为“allow,deny”,并明确设置允许策略,只允许一部分主机访问。例如,若只希望IP地址为173.17.17.173的网管工作用机能够访问AWStats系统,则针对AWStats系统的目录区域做如下设置
<Directory “/usr/local/awstats/wwwroot:”>
... //省略部分内容
Order allow,deny //先允许后拒绝
Allow from 173.17.17.173 //只允许此IP访问
</Directory>
- 反之,需要使用“仅拒绝”的限制策略时,应将处理顺序改为“deny,allow”,并明确设置拒绝策略,只禁止一部分主机访问。例如,若只希望禁用来自两个内网网段192.168.0.0/24和192.168.1.0/24的主机访问,但允许其它任何主机访问,可以使用如下限制策略
<Directory “/usr/local/awstats/wwwroot”>
... //省略部分内容
Order deny,allow
Deny from 192.168.0.0/24 192.168.1.0/24
</Directory>
当通过未被授权的客户机访问网站目录时,将会被拒绝访问
Apache-2.4.x (1)允许所有
Require all granted
(2)拒绝所有
Require all denied
(3)只允许指定IP访问
Require ip <允许的IP地址>
(4)只拒绝指定IP访问
<RequireAll>
Require all granted
Require not ip xxx
</RequireAll>
例:
- 允许所有人访问/usr/local/httpd/htdocs/ <Directory “/usr/local/httpd/htdocs”> Require all granted </Directory>
- 拒绝所有人访问/usr/local/httpd/htdocs/ <Directory “/usr/local/httpd/htdocs”> Require all denied </Directory>
- 只允许192.168.1.10主机访问/usr/local/httpd/htdocs/,相当于白名单 <Directory “/usr/local/httpd/htdocs”> Require ip 192.168.1.10 </Directory>
- 拒绝192.168.1.10主机访问/usr/local/httpd/htdocs/,其余主机全部允许,相当于黑名单 <Directory “/usr/local/httpd/htdocs”> <RequireAll> Require all granted Require not ip 192.168.1.10 </RequireAll> </Directory>
2.用户授权限制
- httpd服务器支持使用摘要认证(Digest)和基本认证(Basic)两种方式。使用摘要认证需要在编译httpd之前添加“--enable-auth-digest”选项,但并不是所有的浏览器都支持摘要认证。而基本认证是httpd服务的基本功能,不需要预先配置特别选项
- 基于用户的访问控制包括认证(Authentication)和授权(Authorization)两个过程。认证是指识别用户身份的过程,授权是指允许特定用户访问特点目录区域的过程
(1)创建用户认证数据文件
- httpd的基本认证通过校验用户名、密码组合来判断是否允许用户访问。授权访问的用户账号需要事先建立,并保存在固定的数据文件中。使用专门的htpasswd工具程序,可以创建授权用户数据文件,并维护其中的用户账号。
- 使用htpasswd时,必须指定用户数据文件的位置,添加“-c”选项表示新建立此文件。例如,执行以下操作可以新建数据文件/usr/local/httpd/conf/.awspwd,其中包含一个名为webadmin的用户信息
cd /usr/local/httpd //进入httpd安装目录方便执行命令
bin/htpasswd -c /usr/local/httpd/conf/.awspwd webadmin //创建用户账号webadmin(只能用于登录web界面)
cat /usr/local/httpd/conf/.awspwd //查看用户账号数据文件
- 若省略“-c”选项,则表示指定的用户数据文件已经存在,用于添加新的用户或修改现有用户的密码。例如,需要向.awspwd数据文件中添加一个新用户tsengyia时,可以执行以下操作
bin/htpasswd /usr/local/httpd/conf/.awspwd tsengyia
cat /usr/local/httpd/conf/.awspwd
(2)添加用户授权配置
- 有授权用户账号以后,还需修改httpd.conf配置文件,在特定的目录区域中添加授权配置,以启用基本认证并设置允许哪些用户访问。例如,若只允许.awspwd数据文件中的任一用户访问AWStats系统,可以执行以下操作
vim /usr/local/httpd/conf/httpd.conf
<Directory "/usr/local/awstats/wwwroot">
···
AuthName "AWStats Directory"
AuthType Basic
AuthUserFile /usr/local/httpd/conf/.awspwd
require valid-user
</Directory>
注释 AuthName:定义受保护的领域名称,该内容将在浏览器弹出的认证对话框中显示 AuthType:设置认证的类型,Basic表示基本认证 AuthUserFile:设置用户保存用户账号、密码的认证文件路径 required valid-user:要求只有认证文件中的合法用户才能访问。其中valid-user表示所有合法用户,若只授权给单个用户,可改为指定的用户名(如require user webadmin) (3)验证用户访问授权
- 再次访问AWStats系统时,浏览器会首先弹出认证对话框。只有输入正确的用户名和密码后才能查看日志分析报告,否则将拒绝访问
二、构建虚拟Web主机
- 虚拟Web主机指的是在同一台服务器中运行多个Web站点。其中的每个站点实际上并不独立占用整个服务器,因此被称为“虚拟Web主机”,通过虚拟Web主机服务可以充分利用服务器的硬件资源,降低网络构建及运行程序
- 基于域名:为每个虚拟主机使用不同的域名,但是对应IP地址相同;同IP、同端口、不同域名
- 基于IP地址:为每个虚拟主机使用不同的域名,且各自对应的IP地址也不相同,需要为服务器配置多个网络接口;不同IP、同端口、不同域名
- 基于端口:不使用域名、IP来区分不同站点内容,使用不同TCP端口号;同域名、同IP、不同端口
1.基于域名的虚拟主机
(1)为虚拟主机提供域名解析(搭建DNS,测试使用)
yum -y install bind bindg -chroot bind-utils //安装bind软件包
vim /etc/named.conf //修改named服务主配置文件
cp /var/named/named.empty /var/named/hiahia.org.zone //拷贝模板文件
vim /var/named/hiahia.org.zone //编辑正向解析文件
chown named:named /var/named/hiahia.org.zone //设置文件属主和属组为named
/etc/init.d/named start && 8mchkconfig --level 35 named on
(2)为虚拟主机准备网页文档 每个虚拟Web主机准备网站目录及网页文档。
mkdir -p /usr/local/httpd/htdocs/www
mkdir -p /usr/local/httpd/htdocs/blog
echo "www.xueluo.org">/usr/local/httpd/htdocs/www/index.html
echo "blog.xueluo.org">/usr/local/httpd/htdocs/blog/index.html
(3)添加虚拟主机配置
- 监听地址:使用NameVirtualHost配置项指定提供虚拟主机服务的IP地址,也就是进行域名查询时各虚拟Web主机的IP地址
- 虚拟主机区域:使用<VirtualHost 监听地址>...</VirtualHost>区域配置,为每一个虚拟Web主机建立独立的配置内容。其中至少应包含虚拟主机的网站名称、网页根目录的配置项
- 目录权限:使用<Directory 目录位置>...</Directory>区域配置,为每一个虚拟Web主机的网站目录设置访问权限;目录访问可继承其父目录的授权许可
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x这里的两行换成Require all granted)
</Directory>
<VirtualHost 192.168.1.151>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.hiahia.com
ErrorLog "logs/www.hiahia.com_error_log"
CustomLog "logs/www.hiahia.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.151>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.hiahia.com
ErrorLog "logs/blog.hiahia.com_error_log"
CustomLog "logs/blog.hiahia.com_access_log" common
</VirtualHost>
vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf //删除开头#号,读取虚拟主机配置文件
/etc/init.d/httpd restart
(4)客户机中访问虚拟Web主机
2.基于IP地址的虚拟主机
(1)添加虚拟接口IP或新增加网卡配置IP地址
(2)添加虚拟主机配置
vim /var/named/xueluo.org.zone //修改dns正向解析文件,更改其中一个IP地址为新增网卡IP
/etc/init.d/named restart //重启namd服务
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x这里的两行换成Require all granted)
</Directory>
<VirtualHost 192.168.1.151>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.hiahia.com
ErrorLog "logs/www.hiahia.com_error_log"
CustomLog "logs/www.hiahia.com_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.152>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.hiahia.com
ErrorLog "logs/blog.hiahia.com_error_log"
CustomLog "logs/blog.hiahia.com_access_log" common
</VirtualHost>
vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf //删除开头#号,读取虚拟主机配置文件
/etc/init.d/httpd restart //重启httpd服务
(3)客户机访问虚拟Web
3.基于端口的虚拟主机
(1)添加虚拟主机配置
vim /usr/local/httpd/conf/extra/httpd-vhosts.conf
<Directory "/usr/local/httpd/htdocs/">
Order allow,deny
Allow from all
(httpd2.4.x这里的两行换成Require all granted)
</Directory>
<VirtualHost 192.168.1.100:80>
DocumentRoot "/usr/local/httpd/htdocs/www"
ServerName www.xueluo.org
ErrorLog "logs/www.xueluo.org_error_log"
CustomLog "logs/www.xueluo.org_access_log" common
</VirtualHost>
<VirtualHost 192.168.1.200:81>
DocumentRoot "/usr/local/httpd/htdocs/blog"
ServerName blog.xueluo.org
ErrorLog "logs/blog.xueluo.org_error_log"
CustomLog "logs/blog.xueluo.org_access_log" common
</VirtualHost>
(2)加载额外配置文件,并设置监听端口
vim /usr/local/httpd/conf/httpd.conf
Listen 192.168.1.151:999
Listen 192.168.1.152:888
vim /usr/local/httpd/conf/httpd.conf
Include conf/extra/httpd-vhosts.conf //删除开头#号,读取虚拟主机配置文件
/etc/init.d/httpd restart
(3)客户机访问虚拟Web