CentOS 6.2 Web系统集成之Apache安全加固

本文涉及的产品
访问控制,不限时长
简介:
Linux 安装Web服务器并不难,但是其维护和安全加固并非易事,这需要深入了解Linux系统以及Apache的各种配置选项这里需了解的问题是如何在安全性, 可操作性和易用性上找到平衡点,但这也取决于项目的具体需求,下面的最佳实践将总结出LAMP项目中所有服务器都有的共同点。
使用配置指令进行访问控制
利用Apache实现访问控制的配置指令包括如下3种。
     1.Order指令。
Order指令用于指定执行允许访问控制规则或者拒绝访问控制规则的顺序。
Order只能设置为“Order Allow,Deny”或“Order Deny,Allow”,分别用来表明用户先设置允许的访问地址还是先设置禁止访问的地址。
Order选项用于定义默认的访问权限与Allow和Deny语句的处理顺序。而Allow和Deny语句可以针对客户机的域名或IP进行设置,以决定哪些客户机能够访问服务器。
Order语句设置的两种值的具体含义如下。
       (1)Allow,Deny
默认禁止所有客户机的访问,且Allow语句在Deny语句之前被匹配,如果某条件即匹配Deny语句,又匹配Allow语句,则Deny语句会起作用(因为Deny语句覆盖了Allow语句)。
         (2)Deny,Allow
默认允许所有客户机的访问,且Deny剧在Allow语句之前被匹配。如果条件即匹配Deny语句又匹配Allow语句,则Allow语句会起作用(因为Allow语句覆盖了Deny语句)。
 
   2.Allow语句
Allow指令指明允许访问的地址或地址序列,例如Allow From All 指令表明允许所有IP来的访问请求。
 
      3.Deny指令
Deny指令指明禁止访问的地址或地址序列。例如Deny from all 指令表明禁止所有IP来的访问请求。
下面举几个简单的例子,对上述的Order、Allow和Deny命令的使用进行示范。
在本例中,itchenyi.com域中的所有主句都允许访问网站,而其他非该域中的任何主句都被拒绝,因为Deny访问都被拒绝,因为Deny在前,Allow在后,Allow语句覆盖了Deny语句。
具体命令如下:
         Order Deny,Allow
         Deny from all
         Allow from itchenyi.com
在本例中, itchenyi.com域中所有主机,除了 ls.itchenyi.com子域包含的主机被拒绝访问以外,其他都允许访问,所有不在itchenyi.com域中的主句都不允许访问,因为默认状态 是拒绝对服务器的访问(Allow在前,Deny在后,Deny语句覆盖了Allow语句)。
具体命令如下:
         Order Allow,Deny
         Allow from itchenyi.com
         Deny from ls.itchenyi.com
使用.htaccess进行访问控制
任 何出现在配置文件httpd.conf中的指令都可能出现在.htaccess文件中。.htaccess文件在httpd.conf文件的Access FileName指令中指定,用于进行针对单一目录的配置,注意:htaccess文件也只能设置对目录的访问控制。
作为管理员,可以指定.htaccess文件的名字和可以通过该文件内容覆盖服务器配置,当站点有多组内容提供者并希望控制这些用户对他们空间的操作时,该指令非常有用。
需要注意的是,除了可以使用.htaccess文件针对单一目录进行访问控制配置外,该文件还可以在不重启Apache服务器的前提下使配置生效,使用起来非常方便。
 
1、在主配置文件httpd.conf中启用并对.htaccess文件的使用。
2、在需要覆盖主配置文件的目录下(也就是需要单独设定访问控制权限的目录生成.htaccess文件),对其进行编辑,并设置访问控制权限。
 
启用并控制对.htaccess文件的使用
想要启用并控制对.htaccess文件的使用,需要使用AccessFileName参数在主配置文件中配置如下语句。
         Access FileName .htaccess
         <File ~ "^\.htaccess">
         Order allow,deny
         Deny from all
         </Files>
 
在.htaccess文件中使用指令进行控制
要限制.htaccess文件能够覆盖的内容,需要使用AllowOverride指令,该指令可以进行全局设置或者单个目录设置。若配置默认可以使用的选项,需要使用Options指令。
例如,在httpd.conf文件中,可以采用指令建立对/var/www/icons目录的访问控制权限清单。具体指令如下:
         <Directory        "/var/www/icons">
         Options Indexs MultiViews
         AllowOverride None
         Order allow deny
         Allow from all
         </Directory>
         使用.htaccess文件例子
下面以一个简单的例子来示范一下具体该如何使用.htaccess文件。
         1、在Apache服务器文档根目录下建立一个测试目录,并创建测试文件。需要使用如下命令:
         [root@chenyi ~]# cd /var/www/html/
         [root@chenyi html]# mkdir chenyi
         [root@chenyi html]# cd chenyi/
         [root@chenyi chenyi]# touch chenyi.a
         [root@chenyi-2 chenyi]# touch chenyi.b
         2、修改Apache服务器配置文件。添加下面所示的语句:
        Directory "/var/www/html/chenyi"
         AllowOverride Options
         Directory
        3、在生成的测试目录/var/www/html/chenyi下生成.htaccess文件,并添加如下所示的语句:
         Options -Indexes
         4、重启Apache服务器,就可以看到在配置.htaccess文件前用户可以使用客户端浏览文件,而配置后无法浏览,注:这里重启Apache服务器是因为前面修改了主配置文件,而不是因为修改了.htaccess文件。
使用认证和授权保护Apache
认证和授权指令
目前,有两种常见的认证类型,即基本认证和摘要认证。
1、基本认证(basic):使用最基本得用户名和密码方式进行认证
2、摘要认证(Digest):该认证方式比基本认证要安全得多,在认证过程中额外使用了一个针对客户端的挑战(Challenge):信息,可以有效的避免基本认证方式可能遇到的“钟放攻击”,不过,目前并不是所有浏览器都支持摘要认证的方式。
 
所有的认证配置指令即可以出现在主配置文件httpd.conf中的Director容器中,也可以出现在单独的.htaccess文件中,这个可以根据需要灵活选择。在认证配置过程中,需要用到如下指令。
1、Authname:用于定义受保护区域的名称。
2、AuthType:用于指定使用的认证方式,包括上面所述的Basci和Digest两种方式。
3、AuthGroupFile:用于指定认证组文件的位置。
4、AuthUserFile:用于指定认证口令文件的位置。
使用上述的认证配置认证之后,需要为Apache服务器访问对象,也就是指定的用户和组进行相应的授权,以便它们对Apache服务器提供的目录文件和文件进行访问。
为用户和组进行授权需要使用Require指令,可以使用如下三种方式进行授权。
1、授权给指定的一个或者多个用户:使用Require user 用户名1、用户名2.....
2、授权给指定的一个组或者多个组:使用Require group 组名1、组名2......
3、授权给指定口令文件中的所有用户:使用Requirevalid-user。
 
管理认真口令文件和认证组文件
要 实现用户认证功能,首先要建立保存用户名和口令的文件,Apache自带的htpasswd命令提供了建立和更新存储用户名、密码文本文件的功能,需要特 别注意的是,这个文件必须放在不能被网络访问的位置,以避免下载或信息邪路,建立口令文件放在/etc/httpd目录或者其他子目录下。
下面的例子在httpd目录下创建一个文件名为passwd_auth的口令文件,并将用户chenyi加入认证口令文件,使用以下命令....(过程中会提示输入该用户的口令)
[root@chenyi apache2]# touch passwd_auth
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
New password:
Re-type new password:
Adding password for user chenyi
命令执行的过程中,系统会要求chenyi用户输入密码。上述命令中的-c选项表述无论口令文件是否已经存在,都会重新写入文件并删去原有内容,所以在添加第二个用户到口令文件时,就不需要-c选项了,使用以下命令即可。
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
认证和授权使用实例
(1)使用主配置文件配置用户认证及授权
在本例中,用户可以在Apache的主配置文件httpd.conf中加入以下语句,建立对目录/software/apache/htdocs/chenyi访问的用户认证和授权机制:
 <Directory      "/software/apache2/htdocs/chenyi">
 AllowOverride None
 AuthType Basic
 AuthName "chenyi"
 AuthUserFile /software/apache2/passwd_auth
 Require user chenyi itchenyi
 </Directory>
在上述例子中,使用了以下的指令。
AllowOveride:该选项定义了不实用htaccess文件
AuthType Basic:AuthType选项定义了对用户实施认证的类型,最常用的是由mod_auth提供的Basic。
AuthName:定义了Web浏览器显示输入用户/密码对话框时的领域内容。
AuthUserFile:定义了口令文件的路径,即使用htpasswd建立的口令文件。
Require user:定义了允许哪些用户访问,各用户之间用空格分开。
 
需要注意的是,在AuthUserFile选项定义中,还要使用语句事先建立认证用户chenyi和itchenyi,该选项中的定义才能生效。
具体语句如下:
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
此时重启了apache后  在访问该目录,就会要求验证....
apache安全加固

         (2)使用.htaccess文件配置用户认证和授权
在本例中,为了完成如上述例子同样的功能,需要先在主配置文件中加入如下语句:
<Directory "/software/apache2/htdocs/chenyi">
AllowOverride AuthConfig
</Directory>
上述语句中的AllowOverride选项允许在.htaccess文件中使用认证和授权指令。
然后,在.htaccess文件中添加以下语句即可:
   AuthType Basic
   AuthName "Please Login:"
   AuthUserFile /software/apache2/passwd_auth
   Require user chenyi itchenyi
在AuthUserFile选项定义中,也要使用如下语句先建立认证文件chenyi和itchenyi该选项的定义才会生效,注:如果你是接着方法1后做的测试就不用在建立认证文件,但要#注释掉Apache定义的参数后重新设置。
[root@chenyi apache2]# /software/apache2/bin/htpasswd -c /software/apache2/passwd_auth chenyi
[root@chenyi apache2]# /software/apache2/bin/htpasswd  /software/apache2/passwd_auth itchenyi
到这里,重启Apache后通过浏览器访问后就能看到.htaccess实现的效果了.....
 
使用Apache中的安全模块
1、找出Apache服务器中安全的相关模块
Apache的一个优势便是灵活的模块结构,其设计思想也是围绕模块(Module)概念而展开的。安全模块是ApacheServer中极重要的组成部分,这些安全模块负责提供ApacheServer的访问控制、认证、授权等一系列至关重要的安全服务。
Apache具有如下几类与安全相关的模块。
mod_access模块:能够根据访问者的IP地址或域名、主机名的等,来控制对Apache服务器的访问,称之为基于主机的访问控制。
mod_auth模块:用来控制客户和组的认证授权(Authentication)。用户名和口令存于纯文本文件中。
mod_auth_db和mod_auth_dbm模块:分别将用户信息(如名称、组属和口令等)纯于Berkeley-DB及DBM型的小型数据库中,便于管理及提高应用效率。
mod_auth_digest模块:采用MD5数字签名的方式进行用户认证,但它需要客户端的支持。
mod_auth_anon模块:功能和mod_auth的功能类似,只是它允许匿名登录,将用户输入的Email地址作为口令。
mod_ssl 模块:用于支持安全套接字层协议,提供Internet上的安全交易服务,如电子商务中的一项安全措施,通过对通信直接流的加密来防止敏感信息的泄露,但 是,Apache的这种支持是建立在对Apache的API扩展来实现的,相当于一个外部模块,通过第三方程序(如OpenSSL)的结合提供安全的网上 交易支持。
 
       2、开启安全模块
为了能使用模块功能,模块通 常以DSO(Dyname Shared Objed)的方式构建,用户应该在httpd.conf文件中使用LoadModule指令,以便在使用前获得模块的功能,以下主配置文件中各个模块的 情况,开启安全模块非常简单,即去掉在各安全模块所在行前面的“#”注释即可。
具体如下:
 LoadModule auth_basic_module modules/mod_auth_basic.so
 LoadModule digest_module modules/mod_auth_diaest.so









本文转自 lgpqdwjh 51CTO博客,原文链接:http://blog.51cto.com/itchenyi/1189003,如需转载请自行联系原作者
相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
1月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
208 1
|
1月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
48 1
|
2月前
|
缓存 前端开发 Java
打造未来兼容的Web应用:Apache Wicket引领响应式设计的热潮
【9月更文挑战第4天】在软件开发领域,构建响应式Web应用至关重要。Apache Wicket作为一个强大的Java框架,支持响应式设计,确保应用在不同设备上均有出色体验。本文通过示例代码介绍使用Wicket的最佳实践,涵盖页面与组件模型、CSS媒体查询及自定义标记处理器的应用。同时,文章强调了优化加载时间、增强交互性和提升可访问性的重要性,帮助开发者打造高性能且美观的Web应用。
51 3
|
2月前
|
Java API Apache
从零到英雄的蜕变:如何用Apache Wicket打造你的第一个Web应用——不仅是教程,更是编程之旅的启航
【9月更文挑战第4天】学习Apache Wicket这一开源Java Web应用框架是一段激动人心的旅程。本文将指导你通过Maven搭建环境,并创建首个“Hello, World!”应用。从配置`pom.xml`到实现`HelloWorldApplication`类,再到`web.xml`的设置,一步步教你构建与部署简单网页。适合初学者快速上手,体验其简洁API与强大组件化设计的魅力。
65 1
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
165 0
|
3月前
|
Java 数据库连接 数据库
强强联手!JSF 与 Hibernate 打造高效数据访问层,让你的应用如虎添翼,性能飙升!
【8月更文挑战第31天】本文通过具体示例详细介绍了如何在 JavaServer Faces (JSF) 应用程序中集成 Hibernate,实现数据访问层的最佳实践。首先,创建一个 JSF 项目并在 Eclipse 中配置支持 JSF 的服务器版本。接着,添加 JSF 和 Hibernate 依赖,并配置数据库连接池和 Hibernate 配置文件。然后,定义实体类 `User` 和 DAO 类 `UserDAO` 处理数据库操作。
61 0
|
3月前
|
开发者 前端开发 开发框架
JSF与移动应用,开启全新交互体验!让你的Web应用轻松征服移动设备,让用户爱不释手!
【8月更文挑战第31天】在现代Web应用开发中,移动设备的普及使得构建移动友好的应用变得至关重要。尽管JSF(JavaServer Faces)主要用于Web应用开发,但结合Bootstrap等前端框架,也能实现优秀的移动交互体验。本文探讨如何在JSF应用中实现移动友好性,并通过示例代码展示具体实现方法。使用Bootstrap的响应式布局和组件可以确保JSF页面在移动设备上自适应,并提供友好的表单输入和提交体验。尽管JSF存在组件库较小和学习成本较高等局限性,但合理利用其特性仍能显著提升用户体验。通过不断学习和实践,开发者可以更好地掌握JSF应用的移动友好性,为Web应用开发贡献力量。
53 0
|
3月前
|
Java Spring Apache
Spring Boot邂逅Apache Wicket:一次意想不到的完美邂逅,竟让Web开发变得如此简单?
【8月更文挑战第31天】Apache Wicket与Spring Boot的集成提供了近乎无缝的开发体验。Wicket以其简洁的API和强大的组件化设计著称,而Spring Boot则以开箱即用的便捷性赢得开发者青睐。本文将指导你如何在Spring Boot项目中引入Wicket,通过简单的步骤完成集成配置。首先,创建一个新的Spring Boot项目并在`pom.xml`中添加Wicket相关依赖。
101 0
|
3月前
|
Apache 开发者 Java
Apache Wicket揭秘:如何巧妙利用模型与表单机制,实现Web应用高效开发?
【8月更文挑战第31天】本文深入探讨了Apache Wicket的模型与表单处理机制。Wicket作为一个组件化的Java Web框架,提供了多种模型实现,如CompoundPropertyModel等,充当组件与数据间的桥梁。文章通过示例介绍了模型创建及使用方法,并详细讲解了表单组件、提交处理及验证机制,帮助开发者更好地理解如何利用Wicket构建高效、易维护的Web应用程序。
47 0
|
3月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
46 0

热门文章

最新文章

下一篇
无影云桌面