在上篇博文中介绍了基于客户端地址的访问控制,这种方法设置起来相对比较简单,但是不具备太大的实用价值。在实际应用中,我们大都是希望通过对用户进行身份验证从而来进行访问控制,在这篇博文中将主要介绍这种基于用户的访问控制方法。


在前面介绍IIS的时候曾提到过,在IIS中进行用户身份验证有3种方法,按照安全级别由高到低分别是:Windows身份验证、摘要式身份验证、基本身份验证。其中使用比较多的是基本身份验证。
Apache支持的身份验证方法有基本认证(Basic)和摘要认证(Digest)两种,应用较多的同样也是基本认证。下面就以基本认证为例来进行介绍。


同基于客户端地址的访问控制一样,基于用户的访问控制也是只能针对服务器上的某个目录进行设置,设置内容必须包含在<Directory 目录> …… </Directory>的区域中。
我们仍以www.example.com站点中的虚拟目录/movie为例来进行设置,要求只有输入用户名harry或natasha以及相应的密码才能访问www.example.com/movie
修改配置文件/etc/httpd/conf/httpd.conf,在www.example.com站点的虚拟主机区域设置部分中添加如下的内容:
061228199.jpg

如果Apache中并没有启用虚拟主机,那么可以将下面图中的这部分区域设置内容添加在配置文件中的Main server部分。

061314241.jpg

 

下面对其中的设置项目进行解释:

  •  <Directory “/movie”>……</Directory>,表示对目录“/movie”进行访问控制设置。

  •  AuthName:定义受保护的领域名称,客户端访问时在弹出的认证登陆对话框中将显示该名称。

  •  AuthType:设置认证的类型,Basic为基本认证

  •  AuthUserFile:设置用于保存用户帐号、密码的认证文件路径。(文件可以自由定义,但通常都是保存于/etc/httpd/conf目录中,并采用.htpasswd的文件名,文件名前面加.表示隐藏文件。)

  •  require valid-user:授权给认证文件中的所有有效用户。这一项也可以写成“require user [用户名]”,指定一个具体的用户,这样无论认证文件中如何定义,也只有该用户才可以访问。

修改完配置文件后,保存退出。


下面再来添加认证用户,需要注意的是,这个认证用户与系统用户没有任何关系,也就是说我们并不需要先创建相应的系统用户,而是可以直接来添加认证用户。
对认证用户进行管理需要用到htpasswd命令,执行下面的命令创建.htpasswd文件并向其中添加harry用户。
061609618.jpg

命令中用到的两个选项的含义:
-c,创建用户认证文件   -m,MD5加密
如果要再加入别的用户,那么就不再需要-c选项。下面继续将natasha添加为认证用户:
061652495.jpg

我们可以查看一下这个认证用户文件,其中的用户密码都经过了MD5加密:

061802923.jpg

全部设置完成后,重启httpd服务使配置生效:
# service httpd restart


最后在客户端访问测试,在访问www.example.com/movie时提示要输入用户名和密码。成功通过验证后,可以顺利访问到该页面。
061851123.jpg