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/ 访问
require ip 192.168.1.0/ #仅允许网络 192.168.1.0/ 访问
require ip 192.168. #禁止 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 passwd 和 Re-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:

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

访问成功!!!

CentOS 7运维管理笔记(9)----Apache 安全控制与认证的更多相关文章

  1. CentOS 7运维管理笔记(6)----Apache 基于 IP 的虚拟主机配置

    Apache 配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置.本篇随笔记录自己基于IP的虚拟主机配置. 如果同一台服务器有多个IP,可以使用基于IP的 ...

  2. CentOS 7运维管理笔记(8)----Apache基于域名的虚拟主机配置

    使用基于域名的虚拟主机配置是比较流行的方式,可以在同一个IP上配置多个域名并且都通过80端口访问. (1) 在网卡 eth0的第五个接口上配置 192.168.1.215 这个地址: (2) 配置/e ...

  3. CentOS 7运维管理笔记(7)----Apache 基于端口的虚拟主机配置

    如果一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配置. (1) 在虚拟机的CentOS7服务器上配置 eth0:4 为192.168.1.214: (2) ...

  4. CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器

    ##########################    2016-07-07-Thu--20:34 补充 ##################### 编译安装OpenSSL笔记: 如果系统要使用 ...

  5. CentOS 7运维管理笔记(11)----PHP安装与配置

    PHP的安装同样需要经过环境检查.编译和安装3个步骤. 1.首先用百度搜索 “PHP:Downloads”, 点击第一个网页: 选择5.5.37版本,选择 .tar.gz 格式的文件: 来到镜像列表网 ...

  6. CentOS 7运维管理笔记(12)----PHP页面失去焦点后变成空白的解决方法

    昨天搭建好了LAMP服务器,可以正常看到PHP页面了.后来发现每当把鼠标从浏览器中移开而点击其他地方时,PHP页面就变成一片空白.即PHP页面失去焦点后就变空白,不知为何. 今天网上搜索解决方案,终于 ...

  7. CentOS 7运维管理笔记(10)----MySQL源码安装

    MySQL可以支持多种平台,如Windows,UNIX,FreeBSD或其他Linux系统.本篇随笔记录在CentOS 7 上使用源码安装MySQL的过程. 1.下载源码 选择使用北理工的镜像文件: ...

  8. CentOS 7运维管理笔记(4)----安装ftp服务器

    在CentOS 7下安装ftp服务器,可以使局域网内的主机拥有共享文件的一个站点. 在Linux系统下,vsftp是一款应用比较广泛的FTP软件,其特点是小巧轻快,安全易用.目前在开源操作系统中常用的 ...

  9. CentOS 7运维管理笔记(1)----设置默认启动模式为GUI模式或命令行模式

    昨天在虚拟机中安装CentOS 7时选择了GNOME模式安装,开机默认进入GUI模式.网上搜找修改为默认命令行模式的方法,看到说修改 /etc/inittab文件,在最低下一行添加 但是 使用 cat ...

随机推荐

  1. Kettle 解决数据锁的问题(事务(进程 ID 51)与另一个进程被死锁在 锁 资源上)

    1.Kettle做了一个作业, 执行的时候问题发生在步骤2和步骤3之间,也就是步骤2还未完全执行完的时候,步骤3就要更新步骤2插入的数据,造成死锁.(我的理解是既然都分开作业了,那么每个作业都是一个单 ...

  2. ReactNative之坑:停在gradle一直出点

    问题: 初次安装好React Native 环境后,运行项目,会停留在下载 gradle 的界面一直出点 原因: 下载gradle一直不成功 解决方案: 可以根据提示的版本信息,手动下载,放在目录中, ...

  3. Advanced-REST-client安装

    下载得到Advanced-REST-client_v3.1.9.zip:链接:http://pan.baidu.com/s/1c0vUnJi 密码:z34d这里要说明下,目前谷歌浏览器是不允许安装非谷 ...

  4. editplus 编辑 php双击选中变量问题

    windows下,在很多地方双击鼠标左键可以选中一个连续的英文字符串. 在editplus 编辑器里可以双击选中一个变量,方便了编程,但是使用phptools(php.stx)增强语法插件后,在一个变 ...

  5. git提交代码

    安装 Windows 下载安装地址 Linux 1 yum install git / apt-get install git 安装后执行,正常显示则安装正常 1 git --version 使用 生 ...

  6. oracle--dump & V$BH

    一,什么是BH BH即Buffer Header,每一个数据块在被读入buffer cache时,都会先在buffer cache中构造一个buffer header,buffer header与数据 ...

  7. 关于mouseleave事件触发的bug问题

    在做下拉树搜索功能的时候,下方内容框需要一个鼠标移出时就隐藏的功能,于是使用mouseleave的方法, 但是出现了一个问题就是在点击树展开个隐藏的时候,也触发了leave事件,将下方的树进行隐藏,出 ...

  8. MySql的运算符

    数据库中的表结构确立后,表中的数据代表的意义就已经确定.而通过MySQL运算符进行运算,就可以获取到表结构以外的另一种数据.例如,学生表中存在一个birth字段,这个字段表示学生的出生年份.而运用My ...

  9. FileReader实现上传图片前本地预览

    平时做图片上传预览时如果没有特殊的要求就直接先把图片传到后台去,成功之后拿到URL再渲染到页面上.或者使用前端插件.这篇博客使用的是HTML5的新特性——FileReader.由于兼容性,这种方法不适 ...

  10. Golang教程:函数、变参函数

    函数是完成一个特定任务的代码块.一个函数接受输入,对输入进行一些运算并产生输出. 函数声明 在 Go 中声明一个函数的语法为: func functionname(parametername type ...