站点访问控制
httpd2.2和httpd2.4的站点访问控制有点不同,这里先说httpd2.4站点访问控制的方法。不同的地方会区别再说。
Option
可以配置在directory标签中,配置文件中,虚拟主机,.htaccess中,有以下选项- Indexes:指明的URL路径下不存在与定义的主页面资源相符的资源文件时,返回索引列表给用户;
- FollowSymLinks:允许跟踪符号链接文件所指向的源文件;
- None:都不允许,常用
- All:都允许
示例:Option Indexes
在站点目录的标签中设置Option Indexes
然后将index.html改个名,当用户访问网站找不到起始页的时候就会返回整个站点目录的结构,这个选项如果是做一些镜像站其实还可以,但是如果不是有列出站点目录结构的需求的最好None关闭。
然后我们用浏览器访问网站看一下
示例:Option FollowSymLinks
在站点目录的标签中设置Option Options Indexes FollowSymLinks
这时候我们在站点目录新建一个目录的软链接ln -sv /etc /usr/local/httpd/htdocs/etc
重启一下服务查看效果
也就是httpd将链接文件也返回了真实的文件,就像这种情况,主机的安全已经不复存在了。因为敏感文件都暴露的差不多了,所以没有特殊需求,最好None
AllowOverride
与访问控制相关的哪些指令可以放在.htaccess文件(每个目录下都可以有一个)中;常用有以下两个- All:
- None
Require(http2.4)
测试认证用户是否被授权提供程序授权。这个是在http2.4里才有的,一般配置在授权容器中,
示例- Require all granted 无条件允许访问
- Require all denied 无条件拒绝
- Require ip 10 172.20 192.168.2 允许某ip访问
- Require not ip 10 172.20 192.168.3 拒绝某ip访问
- Require method http-method [http-method] … 只允许对给定的HTTP方法访问
- Require group group-name 允许某用户组访问
- Require user userid [userid] … 只有命名用户才能访问资源。
order,allow、deny(httpd2.2)
- Allow:控制哪些主机可以访问服务器的某个区域
格式:Allow from all|host|env=[!]env-variable [host|env=[!]env-variable]
例子:
- Allow from 192.168.1.104 192.168.1.205 允许那些ip访问
- Allow from 10 172.20 192.168.2 允许某些网段
- Allow from 10.1.0.0/255.255.0.0
- Deny:控制拒绝访问服务器的主机
格式:Deny from all|host|env=[!]env-variable [host|env=[!]env-variable] …
例如 Deny from 192.168.253.128 拒绝192.168.253.128这个ip访问 - order:控制默认访问状态以及评估Allow和Deny评估的顺序
- Allow,Deny,首先,Allow评估所有指令; 至少一个必须匹配,否则请求被拒绝。接下来,Deny 评估所有指令。如果匹配,则拒绝该请求。最后,默认情况下拒绝任何与指令Allow或Deny指令不匹配的请求。
- Deny,Allow首先,Deny评估所有指令; 如果匹配,则拒绝该请求, 除非它也与Allow指令匹配。任何与任何Allow或Deny指令不匹配的请求都是允许的。
- Allow:控制哪些主机可以访问服务器的某个区域
整体举个例子,以http2.4为例
允许192.168.253.0/24网段访问,拒绝其中的192.168.253.129主机访问
<Directory "/usr/local/httpd-2.4/htdocs">
Options None
AllowOverride None
<RequireAll>
Require ip 192.168.253.0/24
Require not ip 192.168.253.129
</RequireAll>
</Directory>
重启服务测试
再192.168.253.128主机
再192.168.253.129主机上测试