当访问某些网站或网页时需要输入用户名和密码。身份认证是防止非法用户使用资源的有效手段,也是管理注册用户的有效方法,现在很多网站都使用身份认证来管理用户资源,对用户的访问权限进行严格的限制。Apache 服务器允许在全局访问配置文件或用户的“.htaccess”文件中对目录进行强制口令保护。对于口令保护的目录,必须为四个不同的命令指定相应的值,即AuthName、AuthType、AuthUserFile和AuthGroupFile 命令。下面分别来介绍。
(1) AuthName。AuthName 命令是一个短的字符串,告诉用户他们所被询问的口令,如:
“Please input you valid username and password:”。
(2) AuthType。AuthType 命令标识了服务器使用的鉴别方法。AuthType 可以选择两个设置之一:Basic 和Digest。如果将AuthType 设为Basic,使用的就是标准的和基于Unix 加密方式的口令系统,还需使用AuthUserFile 命令。如果将其设为Digest,使用的就是MD5加密方式,这是一种更为安全的编码系统。在大多数站点上不应该使用Digest,因为它还没有得到大多数浏览器的支持,但是在Intranet 和可以决定所有用户使用的浏览器软件的小规模的应用中,它是可以使用的。
(3) AuthUserFile。AuthUserFile 命令指定了目录中Apache 服务器用户口令文件的全路径名。可以使用htpasswd 程序来创建口令文件。
(4) AuthDigestFile。如果使用的是Digest 鉴别方式,就要使用AuthDigestFile 作为口令名单。与AuthUserFile 相同,只要将AuthDigestFile 设置为口令文件的路径名和文件名即可。要创建文摘式的口令文件,可以使用htdigest 程序。
(5) require。require 命令指定需要什么条件才能被授权访问。可以使用这个命令强制对一目录的口令保护。这个命令后面应该跟一份“实体”名单。这些实体可以是AuthUserFi1e或AuthGroupFile 命令所定义的用户或组的名称,也可以使用“valid-user”的关键字,告诉服务器在AuthUserFile 中的任何用户只要能够提供有效的口令就允许进行访问。它可以只列出可能连接的指定用户、指定可能连接的用户的一个组或多个组的清单,如:
require user user1 user2
#只有user1 和user2 可以访问。
require group test
#只有test 组可以访问。
下面通过一个具体的实例来讲述基于主机的Apache 的访问控制。
【实例12.6】
本实例是对/usr/apache/htdocs 目录进行保护,需要合法的用户名和口令才能访问。操作过程如下:
(1) 配置httpd.conf 文件。在httpd.conf 文件中的配置模块代码如下:
<Directory /usr/apache/htdocs/>
#该模块的作用目录为/usr/apache/htdocs/。
AuthName Protected
#提示用户的信息为“Protected”。
AuthType basic
# AuthType 鉴别方法是basic。
AuthUserFile /usr/apache/conf/users
# 这一行很重要,它指定了验证用户名和口令的路径和文件名。
<Limit GET POST>
# 限制HTTP 协议中的GET 和POST 方法。
require valid-user
# 需要合法的用户,即在/usr/apache/conf/users 文件中的用户。
</Limit>
</Directory>
(2) 生成用户密码文件。命令htpasswd 可以帮助我们完成这项任务。
比如说我们想要生成lgm 用户密码文件,操作如下:
[root@redflag /root]# htpasswd –c -m /usr/apache/conf/users lgm 123456
其中123456 是用户lgm 的验证密码。-m表示以md5方式加密,
如果想要生成多个用户,则需要去掉-c参数,否则会覆盖前面内容,操作如下:
[root@redflag /root]# htpasswd –m /usr/apache/conf/users test 123456
执行完上述的命令后,可以查看users 文件的内容,操作如下:
[root@redflag /root]#cat /usr/apache/conf/users
内容如下:
lgm:bBdPD1.jOo3tQ
test:3PIo6y6wDBuI2
(3) 测试。重新启动Apache 服务器后,在浏览器中输入本机IP,要求输入用户名和密码才能访问。