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. [原创]PHP 异常错误处理

    目录 错误与异常 异常类 错误类(PHP >= 7) 错误 错误报告级别 错误报告设置 全局异常处理程序 全局错误处理函数 无法捕获的错误类型 范例代码 开发/生产环境处理错误和异常 开发环境 ...

  2. python 控制台输出带颜色的文字的方法

    python_控制台输出带颜色的文字方法   在python开发的过程中,经常会遇到需要打印各种信息.海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性.这时候,如果能给重要的信 ...

  3. IIS服务器环境下某路径下所有PHP接口无法运行报500.19错误

    IIS服务器环境下某路径(文件夹)下所有PHP接口无法运行报500.19错误 环境:IIS8.5 + php7.2.1 错误描述:某目录下(如 d:\web\A)所有php接口文档运行错误,接口测试工 ...

  4. 世界最大BT服务器本周死了三回 海盗湾要凉凉?

    想當初,我是受到BT網站海盜灣的啟發,開發了一個DHT下載網站:http://www.ibmid.com,有一段時間通宵編程,理解此個協議. 海盗湾(The Pirate Bay)是世界上最大的 BT ...

  5. 123th LeetCode Weekly Contest Add to Array-Form of Integer

    For a non-negative integer X, the array-form of X is an array of its digits in left to right order.  ...

  6. BZOJ - 3166 可持久化Trie 维护次大区间

    题意:给出\(a[1...n]\),找出一个连续区间\(a[l...r],r>l\),令该区间的次大值为\(a_k\),使得\(a_k⊕a_i,l≤i≤r\)最大,输出全局最优解 (这题意有点别 ...

  7. FreeRTOS-01移植及任务创建和删除

    根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务创建和删除API函数: 工程列表: 1. main.c /**/ #include ...

  8. 本地DataGrip连接阿里云MySQL

    1.阿里云上开通MySQL端口 2.MySQL上的设置 1⃣️mysql -uroot -p2⃣️create user 'usrabc'@'%' identified by 'usrabc'; 3. ...

  9. linux的yum报错

    yum makecache Loaded plugins: fastestmirror Could not retrieve mirrorlist http://mirrorlist.centos.o ...

  10. 我的Python升级打怪之路【二】:Python的基本数据类型及操作

    基本数据类型 1.数字 int(整型) 在32位机器上,整数的位数是32位,取值范围是-2**31~2--31-1 在64位系统上,整数的位数是64位,取值范围是-2**63~2**63-1 clas ...