Apache服务器访问控制与用户认证

版权声明:原创文章,如需转载,请注明出处!谢谢合作! https://blog.csdn.net/wnote/article/details/83876475
[b][size=large]访问控制[/size][/b]
[b]Diretory段[/b]
Diretory段用于设置与目录相关的参数和指令,包括访问控制和认证,其格式如下所示。
<Diretory 目录的路径>

目录相关的配置参数和指令

</Diretory>
每个Diretory段以<Diretory>开始,以</Diretory>结束,段作用于<Diretory>中指定的目录及其里面的所有文件和子目录。在段中可以设置与目录相关的参数和指令,包括访问控制和认证。
[b]Apache中的访问控制指令[/b]
1、Allow指令
Allow指令用于设置哪些客户端可以访问Apache,命令格式如下所示。
Allow from [All | 全域名 | 部分域名 | IP地址 | 网络地址 | CIDR地址]…

All:表示所有客户端。
全域名:表示域名对应的客户端,如www.domain.com。
部分域名:表示域内的所有客户端,如domain.com。
IP地址:如172.20.17.1。
网络地址:如172.20.17.0/255.255.255.0。
CIDR地址:如172.20.17.0/24。

%注意:Allow指令中可以指定多个地址,不同地址间通过空格进行分隔。

2、Deny指令
Deny指令用于设置拒绝哪些客户端访问Apache,格式跟Allow指令一样。
3、Order指令
Order指令用于指定执行访问规则的先后顺序,有两种形式:
Order Allow,Deny:先执行允许访问规则,再执行拒绝访问规则。
Order Deny,Allow:先执行拒绝访问规则,再执行允许访问规则。

%注意:编写Order指令时,Allow和Deny之间不能有空格存在。

[b]举例[/b]
设置某个目录secure_info只能由管理员自己的机器172.20.17.55来查看,其它的用户都不能访问;可以通过以下步骤来实现。
1)打开conf/httpd.conf配置文件并添加以下内容:
<Directory "/usr/local/apache2/htdocs/secure_info">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 172.20.17.55
</Directory>

2)保存后重启Apache服务。
在172.20.17.55机器上直接在浏览器访问http://demoserver/secure_info,结果显示只有在172.20.17.55机器上访问成功,而其它的机器上则访问失败。

[b][size=large]用户认证[/size][/b]
Apache的用户认证包括基本(Basic)认证和摘要(Digest)认证两种。摘要认证比基本认证更加安全,但是并非所有的浏览器都支持摘要认证,所以本节只针对基本认证进行介绍。基本认证方式其实相当简单,当Web浏览器请求经此认证模式保护的URL时,将会出现一个对话框,要求用户输入用户名和口令。用户输入后,传给Web服务器,Web服务器验证它的正确性。如果正确,则返回页面;否则将返回401错误。

[b]创建口令文件[/b]
要使用用户认证,首先要创建保存用户名和口令的认证口令文件。在Apache中提供了htpasswd命令用于创建和修改认证口令文件,该命令在<Apache安装目录>/bin目录下。关于该命令完整的选项和参数说明可以通过直接运行htpasswd获取。
要在/usr/local/apache2/conf目录下创建一个名为users的认证口令文件,并在口令文件中添加一个名为sam的用户,命令如下所示。
htpasswd -c /usr/local/apache2/conf/users sam
New password:
Re-type new password:
Adding password for user sam

%注意:htpasswd命令没有提供删除用户的选项,如果要删除用户,直接通过文本编辑器打开认证口令文件把指定的用户删除即可。

[b]用户认证参数[/b]
1、AuthName参数
AuthName参数用于设置受保护领域的名称,其参数格式如下所示。
AuthName 领域名称

领域名称没有特别限制,用户可以根据自己的喜欢进行设置。

2、AuthType参数
AuthType参数用于设置认证的方式,其格式如下所示。
AuthType Basic/Digest

Basic和Digest分别代表基本认证和摘要认证。

3、AuthUserFile参数
AuthUserFile参数用于设置认证口令文件的位置,其格式如下所示。
AuthUserFile 文件名

4、Require参数
Require参数用于指定哪些用户可以对目录进行访问,其格式有下面两种。
Require user 用户名 [用户名] ...
Require valid-user

用户名:认证口令文件中的用户,可以指定一个或多个用户,设置后只有指定的用户才能有权限进行访问。

valid-user:授权给认证口令文件中的所有用户。

[b]举例[/b]
管理员想进一步控制对secure_info目录的控制,希望只有通过验证的sam用户能够访问,用户口令存放在users口令文件中,要实现这样的效果,需要把httpd.conf配置文件中secure_info目录的配置信息替换为下面的内容:
<Directory "/usr/local/apache2/htdocs/secure_info">
Options Indexes FollowSymLinks
AllowOverride None
AuthType Basic
AuthName "secure_info_auth"
AuthUserFile /usr/local/apache2/conf/users
require user sam
Order deny,allow
Deny from all
Allow from 172.20.17.55
</Directory>
重启Apache服务后使用浏览器访问http://demoserver/security_info进行测试,如 图16.31所示。输入用户和口令,单击【确认】按钮,验证成功后将进入如图16.29所示的页面;否则将会要求重新输入。如果单击【取消】按钮将会返回如图16.32所示的错误页面。

[b][size=large]分布式配置文件[/size][/b]
.htaccess文件又称为“分布式配置文件”,该文件可以覆盖httpd.conf文件中的配置,但是它只能设置对目录的访问控制和用户认证。.htaccess文件可以有多个,每个.htaccess文件的作用范围仅限于该文件所存放的目录以及该目录下的所有子目录。虽然.htaccess能实现的功能在<Directory>段中都能够实现,但是因为在.htaccess修改配置后并不需要重启Apache服务就能生效,所以在一些对停机时间要求较高的系统中可以使用。

%注意:一般情况下,Apache并不建议使用.htaccess文件,因为使用.htaccess文件会对服务器性能造成影响。

[b]举例[/b]
以上面例子为基础来演示在.htaccess文件中配置访问控制和用户认证的过程
1)打开httpd.conf配置文件,将security_info目录的配置信息替换为下面的内容。
<Directory "/usr/local/apache2/htdocs/secure_info">
AllowOverride All
</Directory>


修改主要包括两个方面:

[list]
[*]删除原有的关于访问控制和用户认证的参数和指令,因为这些指令将会被写到.htaccess文件中去。
[*]添加了AllowOverride All参数,允许.htaccess文件覆盖httpd.conf文件中关于secure_info目录的配置。如果不做这项设置,.htaccess文件中的配置将不能生效。
[/list]
2)重启Apache服务,在/usr/local/apache2/htdocs/secure_info/目录下创建一个文件.htaccess,写入以下内容:
    AuthType Basic
AuthName "secure_info_auth"
AuthUserFile /usr/local/apache2/conf/users
require user sam
Order deny,allow
Deny from all
Allow from 172.20.17.55

猜你喜欢

转载自blog.csdn.net/wnote/article/details/83876475