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/ 访问
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 安全控制与认证的更多相关文章
- CentOS 7运维管理笔记(6)----Apache 基于 IP 的虚拟主机配置
Apache 配置虚拟主机支持3种方式:基于IP的虚拟主机配置,基于端口的虚拟主机配置,基于域名的虚拟主机配置.本篇随笔记录自己基于IP的虚拟主机配置. 如果同一台服务器有多个IP,可以使用基于IP的 ...
- CentOS 7运维管理笔记(8)----Apache基于域名的虚拟主机配置
使用基于域名的虚拟主机配置是比较流行的方式,可以在同一个IP上配置多个域名并且都通过80端口访问. (1) 在网卡 eth0的第五个接口上配置 192.168.1.215 这个地址: (2) 配置/e ...
- CentOS 7运维管理笔记(7)----Apache 基于端口的虚拟主机配置
如果一台服务器只有一个IP或需要通过不同的端口访问不同的虚拟主机,可以使用基于端口的虚拟主机配置. (1) 在虚拟机的CentOS7服务器上配置 eth0:4 为192.168.1.214: (2) ...
- CentOS 7运维管理笔记(5)----源代码安装Apache 2.4,搭建LAMP服务器
########################## 2016-07-07-Thu--20:34 补充 ##################### 编译安装OpenSSL笔记: 如果系统要使用 ...
- CentOS 7运维管理笔记(11)----PHP安装与配置
PHP的安装同样需要经过环境检查.编译和安装3个步骤. 1.首先用百度搜索 “PHP:Downloads”, 点击第一个网页: 选择5.5.37版本,选择 .tar.gz 格式的文件: 来到镜像列表网 ...
- CentOS 7运维管理笔记(12)----PHP页面失去焦点后变成空白的解决方法
昨天搭建好了LAMP服务器,可以正常看到PHP页面了.后来发现每当把鼠标从浏览器中移开而点击其他地方时,PHP页面就变成一片空白.即PHP页面失去焦点后就变空白,不知为何. 今天网上搜索解决方案,终于 ...
- CentOS 7运维管理笔记(10)----MySQL源码安装
MySQL可以支持多种平台,如Windows,UNIX,FreeBSD或其他Linux系统.本篇随笔记录在CentOS 7 上使用源码安装MySQL的过程. 1.下载源码 选择使用北理工的镜像文件: ...
- CentOS 7运维管理笔记(4)----安装ftp服务器
在CentOS 7下安装ftp服务器,可以使局域网内的主机拥有共享文件的一个站点. 在Linux系统下,vsftp是一款应用比较广泛的FTP软件,其特点是小巧轻快,安全易用.目前在开源操作系统中常用的 ...
- CentOS 7运维管理笔记(1)----设置默认启动模式为GUI模式或命令行模式
昨天在虚拟机中安装CentOS 7时选择了GNOME模式安装,开机默认进入GUI模式.网上搜找修改为默认命令行模式的方法,看到说修改 /etc/inittab文件,在最低下一行添加 但是 使用 cat ...
随机推荐
- Idea中更改主题后xml配置文件局部黄色背景颜色去除
相信很多小伙伴和我一样一样的,喜欢更换Idea的主题,但是细心的小伙伴就发现了,每次更改主题后xml配置文件就会局部产生黄色背景颜色,对于强迫症患者真的是够了,网上也有部分文章,但是不够详细,也跟Id ...
- 高阶篇:4.2.3)DFMEA现有设计:预防控制与探测控制
本章目的:在现有设计中,明确预防控制与探测控制的定义和手段. 1.现有控制的填写部位: 2.现行设计控制(h)定义: 作为设计过程的一部分,现行设计控制是已经实施或承诺的活动,它将确保设计充分考虑设计 ...
- vue 路由更新页面视图未更新问题
最近项目做面包屑的时候遇到一个问题就是路由变化的时候页面视图并没有发生变化,后来上网查,发现是vue-router的特性导致的. vue-router的切换不同于传统的页面的切换.路由之间的切换,其实 ...
- UUID生成工具
public class UUIDUtils { private static SecureRandom SEEDER_STATIC = null; private static byte[] ADD ...
- 2019.03.29 读书笔记 关于override与new
差异:override:覆盖父类分方法,new 隐藏父类方法. 共同:都不能改变父类自身方法. public class Test { public string Name { get; set; } ...
- nodejs 并发控制
1.用 eventproxy 实现控制并发: var EventProxy = require('eventproxy'); const most = 5;//并发数5 var urllist = [ ...
- Android JPush极光推送应用
JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for Pus ...
- 修改MyEclipse8.5的workspaces
到MyEclipse8.5的安装目录下 我安装在D盘,路径为:D:\Genuitec\MyEclipse 8.5\configuration\config.ini 打开config.ini文件: ...
- poj 1168 The Triangle
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 39169 Accepted: 23518 De ...
- Bash编程(5) Shell方法
shell的方法在相同的进程内执行,与调用它的脚本一致.对于方法来说,脚本中的所有变量均可见,且不需要执行export.方法中可以创建局部变量,且不影响正在调用的脚本. 1. 定义语法 (1) Kor ...