CentOS 7运维管理笔记(9)----Apache 安全控制与认证

  Apache 提供了多种安全控制手段,包括设置Web访问控制、用户登陆密码认证及 .htaccess 文件等。通过这些技术手段,可以进一步提升Apache服务器的安全级别,减少服务器受攻击或数据被窃取的风险。

1.Apache 安全控制

  要进行Apache 的访问控制首先要了解Apache的虚拟目录。虚拟目录可以用指定的指令设置,设置虚拟目录的好处在于除了便于访问之外,还可以增强安全性,类似软连接的概念,客户端并不知道文件的实际路径。虚拟目录的格式如下所示:

<Directory  目录的路径>
        目录相关的配置参数和指令
</Directory>

  每个Directory段都以<Directory>开始,以</Directory>结束,段作用于<Directory>中指定的目录及里面的所有文件和子目录。在段中可以设置与目录相关的参数和指令,包括访问控制和认证。2.4版的Apache中的控制指令主要使用Require,控制方法主要有基于ip地址、域名、http方法、用户等。

(1)允许、拒绝所有访问指令

#允许所有访问
Require all granted

#拒绝所有访问
Require all denied

(2)基于IP地址或网络

#仅允许 192.168.1.116 访问
require ip 192.168.1.116

#仅允许网络 192.168.1.0/24 访问
require ip 192.168.1.0/24

#仅允许网络 192.168.1.0/24 访问
require ip 192.168.1

#禁止 192.168.1.116 访问
require not ip 192.168.1.116

(3) 基于域名

  通常不建议使用基于域名的访问控制,这主要是因为解析域名可能会导致访问速度变慢:

#禁止 www.example.com 访问
Require not host www.example.com

#允许 www.example.com 访问
Require host www.example.com

 

1.1 实例演练

(1)基于IP的控制

(i)本实例的Apache的安装路径为 /usr/local/apache2 , Apache 的配置文件为 /usr/local/apache2/conf/httpd.conf

之前在 “CentOS 7运维管理笔记(6)、(7)、(8)”中已经描述过在 httpd.conf 中加入 "Include conf/vhost/*.conf" 这条命令,这样新建虚拟主机或者配置虚拟主机的时候,只需要创建或修改 $APACHE_HOME/conf/vhost 目录下的 .conf文件即可。

此处,我们编辑 vhost/nice1.conf ,其中 nice1.conf 是之前基于 192.168.1.211:80 的虚拟主机的配置文件,现在先查看原先的配置,如下

之前配置的是允许任何主机访问。我们开启Apache配置的这些IP和端口,在虚拟机做在的windows宿主机中,先尝试访问:

可以正常访问。

(ii)在Windows宿主机中打开cmd,输入ipconfig查看IP:

(iii)既然宿主机IP为192.168.1.116,那么我们配置 $APACHE_HOME/conf/vhost/nice1.conf ,使其只允许 192.168.1.115 访问:

(iv)检查配置文件语法是否正确,如果正确,那么重启Apache服务器:

(v)可以看到,宿主机已经不能访问 192.168.1.211 IP 的虚拟主机了

 

但是却还可以访问基于 192.168.1.212 IP 的虚拟主机,因为我们没有在 192.168.1.212 虚拟主机的配置文件nice2.conf 中加入任何限制:

 

2. Apache认证

  除了可以使用以上介绍的指令控制特定目录的访问之外,Apache提供了认证与授权机制,当用户访问使用此机制控制的目录时,会提示用户输入用户名和密码,只有输入正确的用户名和密码的主机才可以访问该资源。

2.1  Apache的认证类型分为两种:基本(Basic)认证和摘要认证(Digest)认证两种。摘要认证比基本认证更加安全,然是并非所有浏览器都支持摘要认证,所以本节只针对基本认证进行介绍。基本认证的方式是:当Web浏览器请求经过认证模式保护的URL时,将会出现一个对话框,要求用户输入用户名和口令。用户输入后,传送给服务器,Web服务器验证它的正确性。如果正确,则返回页面;否则出现401错误。

  要使用用户认证,首先要创建保存用户名和口令的认证口令文件。在Apache中提供了htpasswd 命令用于创建和修改认证口令文件,该命令在<Apache安装目录>/bin 目录下。关于该命令完整的选项和参数说明,可以通过直接运行 htpasswd 获取。

  要在 /usr/local/apache2/conf 目录下创建一个名为 users 的认证口令文件,并在口令文件中添加一个名为 hero 的用户,命令如下所示(因为已经将 $APACHE_HOME/bin 目录添加到了环境变量PATH当中,所以可以直接调用 $APACHE_HOME/bin 目录下的 htpasswd 命令):

首次创建 users.list 文件,需要用到 -c (create)参数,提示输入New passwdRe-type password for user hero 时,两次输入的密码要一样。

可以看到 conf 目录下多了一个 users.list 文件,查看该文件内容,可以看到有 hero:<加密后的口令> 内容。

  认证口令文件创建后,如果还要再向文件里添加一个名为 grace  的用户,可以执行以下命令:

可以看到添加用户记录成功。

认证口令文件中的每一行为一个用户记录,每条记录包含用户名和加密后的口令。

注意:htpasswd 命令没有删除用户的选项,如果要删除用户,直接通过 vim 打开文件删除用户和加密后的口令即可。

 

2.2 创建完认证口令文件后,还要对配置文件进行修改,用户认证是在 httpd.conf 配置文件中的<Directory> 段中进行设置的,因为我们在 httpd.conf 最后添加了 "Include conf/vhost/*.conf", 所以对于新的认证的配置,只需要在 $APACHE_HOME/conf/vhost 目录下建立 .conf 文件并进行配置即可。其配置涉及的主要指令如下:

(1) AuthName 指令

  AuthName指令设置了使用认证的域,此域会出现在显示给用户的密码提问对话框中,其次也帮助用户确定该输入哪个用户名和哪个密码。其指令格式如下:

AuthName  域名称

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

(2) AuthType 指令

  AuthType指令主要用于选择一个目录的用户认证类型,目前只有两种认证方式可以选择,Basic和Digest 分别代表基本认证和摘要认证,该指令格式如下:

AuthType   Basic/Digest

(3) AuthUserFile指令

AuthUserFile指令用于设定一个纯文本文件的名称,其中包含用于认证的用户名和密码的列表,该指令格式如下:

AuthUserFile  文件名

(4) Require 指令

  Require指令用于设置哪些认证用户允许访问指定的资源。这些限制由授权支持模块实现,其格式有下面两种:

Require user  用户名 [用户名] ...
Require valid-user

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

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

  现在,假设网站管理员希望对 $APACHE_HOME/www/nice1 目录做进一步控制控制,配置该目录只有经过验证的 hero 用户能够访问,用户口令存放在 users.list 口令认证文件中。要实现这样的效果,需要把 $APACHE_HOME/conf/vhost/nice1.conf 配置文件中的配置信息替换为下面的内容:

检车配置语法有没有错误,如果没有,则重启Apache服务器:

在Windows宿主机的浏览器中输入 nice1 虚拟主机的ip地址:192.168.1.211,可以看到需要认证:

注意空色方框内的 gallant (英勇的,雄伟的)一词,正是刚才在 nice1.conf 中设置的 AuthName,用来提示用户到底该输入什么用户名来进行验证。我们输入hero和相关密码:

如果点击了了“记住我的凭据”,那么下次登录这个页面就不用重新输入了。

点击确定:

登录成功!

如果输入错误的用户名和密码三次后,就会出现如下画面:

 

3.   .htaccess 设置

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

  本实例仍然以配置 nice1 虚拟主机做演示。

(1)首先,恢复之前一步中修改的 nice1.conf 中的配置,并将 AllowOverride 的配置修改为 ALL ,之前关于访问控制和用户认证的参数和指令,后面会写入到 .htaccess文件中去:

(2)检查有没有配置错误,没有错误则重启服务器:

(3) 可以看到此时在Windows宿主机中可以正常访问 nice1 虚拟主机而不需要认证:

(4) nice1 虚拟主机的DocumentRoot是 /usr/local/apache2/www/nice1 ,进入该目录,并创建 .htaccess 文件如下:

(5)无需重启服务器,直接在Windows宿主机的浏览器中输入 nice1 虚拟主机的IP地址 192.168.1.211:

显示需要验证。输入用户名和密码:

 

访问成功!!!

 

posted on 2016-07-05 11:39  HorseShoe2016  阅读(1095)  评论(0编辑  收藏  举报