16.5.2 用户认证
Apache的用户认证包括基本(Basic)认证和摘要(Digest)认证两种。摘要认证比基本认证更加安全,但是并非所有的浏览器都支持摘要认证,所以本节只针对基本认证进行介绍。基本认证方式其实相当简单,当Web浏览器请求经此认证模式保护的URL时,将会出现一个对话框,要求用户输入用户名和口令。用户输入后,传给Web服务器,Web服务器验证它的正确性。如果正确,则返回页面;否则将返回401错误。
要使用用户认证,首先要创建保存用户名和口令的认证口令文件。在Apache中提供了htpasswd命令用于创建和修改认证口令文件,该命令在<Apache安装目录>/bin目录下。关于该命令完整的选项和参数说明可以通过直接运行htpasswd获取。
要在/usr/local/apache2/conf目录下创建一个名为users的认证口令文件,并在口令文件中添加一个名为sam的用户,命令如下所示。
htpasswd -c /usr/local/apache2/conf/users sam
命令运行后会提示用户输入sam用户的口令并再次确认,运行结果如图16.30所示。
图16.30 创建密码文件和用户访问
认证口令文件创建后,如果还要再向文件里添加一个名为ken的用户,可以执行如下命令:
htpasswd /usr/local/apache2/conf/users ken
与/etc/shadow文件类似,认证口令文件中的每一行为一个用户记录,每条记录包含用户名和加密后的口令,如下所示。
用户名:加密后的口令
%注意:htpasswd命令没有提供删除用户的选项,如果要删除用户,直接通过文本编辑器打开认证口令文件把指定的用户删除即可。
创建完认证口令文件后,还要对配置文件进行修改,用户认证是在httpd.conf配置文件中的<Directory>段中进行设置,其主要配置参数如下:
1.AuthName参数
AuthName参数用于设置受保护领域的名称,其参数格式如下所示。
AuthName 领域名称
领域名称没有特别限制,用户可以根据自己的喜欢进行设置。
2.AuthType参数
AuthType参数用于设置认证的方式,其格式如下所示。
AuthType Basic/Digest
Basic和Digest分别代表基本认证和摘要认证。
3.AuthUserFile参数
AuthUserFile参数用于设置认证口令文件的位置,其格式如下所示。
AuthUserFile 文件名
4.Require参数
Require参数用于指定哪些用户可以对目录进行访问,其格式有下面两种。
Require user 用户名 [用户名] ...
Require valid-user
q 用户名:认证口令文件中的用户,可以指定一个或多个用户,设置后只有指定的用户才能有权限进行访问。
q valid-user:授权给认证口令文件中的所有用户。
现在,假设网站管理员希望对security_info目录做进一步的控制,配置该目录只有经过验证的sam用户能够访问,用户口令存放在users口令认证文件中。要实现这样的效果,需要把httpd.conf配置文件中security_info目录的配置信息替换为下面的内容:
#使用Diretory段设置/usr/local/apache2/htdocs/secure_info目录的属性
<Directory "/usr/local/apache2/htdocs/secure_info">
Options Indexes FollowSymLinks
AllowOverride None
#使用AuthType参数设置认证类型
AuthType Basic
#使用AuthName参数设置
AuthName "secure_info_auth"
#使用AuthUserFile参数设置认证口令文件的位置
AuthUserFile /usr/local/apache2/conf/users
#使用require参数设置sam用户可以访问
require user sam
#使用Order参数设置先执行拒绝规则,再执行允许规则
Order deny,allow
#使用Deny参数设置拒绝所有客户端访问
Deny from all
#使用Allow参数设置允许172.20.17.55客户端访问
Allow from 172.20.17.55
</Directory>
重启Apache服务后使用浏览器访问http://demoserver/security_info进行测试,如 图16.31所示。输入用户和口令,单击【确认】按钮,验证成功后将进入如图16.29所示的页面;否则将会要求重新输入。如果单击【取消】按钮将会返回如图16.32所示的错误页面。
图16.31 弹出需要验证的窗口
图16.32 错误页面