站点的资源有两种表现形式,文件和URL,为了保证网站运行的安全,必须对这些资源的访问使用某些方式来加以限制,达到控制访问的目的,由于文件通常都存放于目录中,所以从控制对象的角度上看,我们要控制的站点访问对象通常为目录和URL,虽然目录不能作为网站的真正资源,但是出于访问控制对象的角度却是我们主要的控制对象。
以上两种控制对象的控制方式有:1、基于用户的访问控制;2、基于组的访问控制;3、基于IP的访问控制。上面的两类控制对象,它们都可以通过这三种方式来加以控制。
一、目录的控制设置:
站点资源通常分类存放在具体的文件目录中,这样我们可以方便的控制某一类文件,直接对目录做访问控制,而不必对单个文件做限制。通常网站的根目录为/var/www/html,我们在配置文件的默认设置中可以看到对该目录的权限设定,相应的其他目录如果作为站点的资源使用,也需要对访问权限做设定,这就是我们在配置文件中看到在定义/var/www/icons目录别名时,后面马上就设置目录访问权限的原因。
站点目录访问控制的定义格式:
<Directory "/path/to/directory">
...
</Directory>
对站点文件目录的访问控制设置在<Directory> </Directory>中定义,内部可用的控制方式有基于用户、组、IP三种方式的控制。
1、基于用户的认证从认证信息加密与否分类,又分为基本认证和摘要认证两种方式。
示例:基于名称的虚拟主机站www1.stuX.com,根目录为/web/vhosts/www1,管理目录为admin,目录内有多个文件,只能允许有密码的用户访问,访问时需要提供用户名和密码的方式认证,允许登录的账号为admin,密码admin。
在配置文件中该目录的定义如下:
# mkdir /web/vhosts/www1/admin
# service httpd reload
基于用户名和密码的认证访问方式我们需要借助于htpasswd命令生成用户名和密码,其常用的参数有:
-c:用于创建htpasswd文件,只在创建第一个用户时使用这个参数,用于生成对应的文件使用。
-m:以md5的格式编码存储用户的密码信息。我们设定的.htpasswd文件在/etc/httpd/conf/目录下
# htpasswd -m /etc/httpd/conf/.htpasswd admin
在浏览器内输入http://www1.stuX.com/admin,出现如下图示内容:
输入用户名和密码,结果如图:
访问到的是这个目录下的默认主页,其内容是Admin。如果这个目录下还有其他的文件,比如test.html那么访问的时候输入http://www1.stuX.com/admin/test.html也会要求输入账号密码从能访问,如图:
输入账号密码,结果如下:
2、如果需要访问这个目录的用户很多,那么我们可以在httpd的配置文件中定义允许访问的组的方式来做访问控制,那么我们需要为这个组提供一个组认证文件,这个文件可以手动编辑,比如设置该组名称为admingroup,用户有admin和system,admingroup文件的内容如下:
添加system用户:
配置文件内容定义如下图:
重启服务# service httpd reload;重新装载服务后测试。
登录结果如下图:
3、如果要对一个目录基于IP地址的方式做访问控制,那么设置的方式如下:
Order allow,deny Allow from all;默认规则是deny的,后面的语句开放所有的网段都可以访问。
这种定义方式默认配置,如果做限制如只允许某一网段访问,那么配置方式如下:Order allow,deny Allow from IP/NETMASK 。
二、URL的访问控制定义:
URL的访问控制方式与目录相似,只是其定义的格式由<Location>...</Location>封装起来,通常只有目录支持使用基于用户和组的方式来对目录内的所有文件做访问控制,如果访问的URL需要使用用户认证功能,那么就需要在URL文件所在目录使用基于用户和组的访问控制规则或者单独为该文件创建一个目录然后对目录使用基于用户的访问控制。
示例:通过虚拟主机www1.stuX.com/server-status输出httpd工作状态相关信息。
server-status是由httpd内嵌的处理器输出的,这些处理器被叫做handler。默认情况下只需要开启配置文件中的定义就可以在浏览器中查看从的信息。
使用浏览器测试结果如下:
而如果使用基于用户名的方式来访问,那么还是需要创建一个访问的目录,不过目录内不需要创建任何文件,在配置文件内定义方式如下:
使用浏览器访问时会出现输入账号密码的提示:
输入账号密码后就可以正常查看输出信息了。
在URL的访问控制规则中使用IP的方式来做限制于目录中基于IP做设定是完全相同。默认的规则如下图:
可以结合网段或者具体的IP来调整规则的使用。