热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Apache服务器的安全配置

作为网管人员最担心Web服务器遭到攻击,一旦遭到攻击,网站的所有信息可能面目全非,直到整个Web系统全面瘫痪。因此,选择安全性能好的Web服务器软件尤其重要。作为Internet上最流行的Web服务器软件,Apache的安全性经受了时间和市场的双重检验。取得了惊人的
作为网管人员最担心Web服务器遭到攻击,一旦遭到攻击,网站的所有信息可能面目全非,直到整个Web系统全面瘫痪。因此,选择安全性能好的Web服务器软件尤其重要。作为Internet 上最流行的Web服务器软件,Apache的安全性经受了时间和市场的双重检验。取得了惊人的成功。了解Apache Server的特性,并进行合理的配置将是每一个站点管理维护或开发人员必须关注的问题。

  一、Apache 服务器的功能
  Apache Serve的前身是NCSA的httpd,曾经在1995年成为最为流行的万维网的服务器。因为强大的功能和灵活的设置及平台移植性,Apache Server取得了广泛的信赖。Apache Server的主要功能有:
  1、支持最新的HTTP1.1协议(RFC2616)。
  2、极强的可配置和可扩展性,充分利用第三方模快的功能。
  3、提供全部的源代码和不受限制的使用许可(License)。
  4、广泛应用于Windows 2000/NT/9x、Netware 5.x,OS/2 和UNIX家族极其他操作系统,所支持的平台多达17余种。
  5、强大的功能,涵盖了用户的需求,包括:认证中的DBM数据库支持;错误和问题的可定制响应的目录导向功能;不受限的灵活的URL别名机制和重定向功能;虚拟主机(多宿主主机)支持多个域主页共存一台主机;超强的日志文件功能;利用站点的分析;拓展于维护等等。
  正因为这些强大的优势,使Apache Server与其他的Web服务器相比,充分展示了高效、稳定及功能丰富的特点。Apache Server 已用于超过600万个Internet站点。

  二、Apache 服务器的安全特性
  作为最流行的Web服务器,Apache Server提供了较好的安全特性,使其能够应对可能的安全威胁和信息泄漏。
1、采用选择性访问控制和强制性访问控制的安全策略
  从Apache 或Web的角度来讲,选择性访问控制DAC(Discretionary Access Control)仍是基于用户名和密码的,强制性访问控制MAC(Mandatory Access Control)则是依据发出请求的客户端的IP地址或所在的域号来进行界定的。对于DAC方式,如输入错误,那么用户还有机会更正,从新输入正确的的密码;如果用户通过不了MAC关卡,那么用户将被禁止做进一步的操作,除非服务器作出安全策略调整,否则用户的任何努力都将无济于事。
  2、Apache 的安全模块
  Apache 的一个优势便是其灵活的模块结构,其设计思想也是围绕模块(Modules)概念而展开的。安全模块是Apache Server中的极其重要的组成部分。这些安全模块负责提供Apache Server的访问控制和认证、授权等一系列至关重要的安全服务。
  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的功能类似,只是它允许匿名登录,将用户输入的E-mail地址作为口令。
  SSL(Secure Socket Lager),被Apache所支持的安全套接字层协议,提供Internet上安全交易服务,如电子商务中的一项安全措施。通过对通讯字节流的加密来防止敏感信息的泄漏。但是,Apache的这种支持是建立在对Apache的API扩展来实现的,相当于一个外部模块,通过与第三方程序的结合提供安全的网上交易支持。

三、Apache服务器的安全配置
  在前面的内容中提到过,Apache具有灵活的设置。所有Apache的安全特性都要经过周密的设计与规划,进行认真地配置才能够实现。Apache服务器的安全配置包括很多层面,有运行环境、认证与授权设置及建立安全的电子交易链接等。
  1、Apache的安装配置和运行
  (
1)以Nobody用户运行一般情况下,Apache是由Root 来安装和运行的。如果Apache Server进程具有Root用户特权,那么它将给系统的安全构成很大的威胁,应确保Apache Server进程以最可能低的权限用户来运行。通过修改httpd.conf文件中的下列选项,以Nobody用户运行Apache 达到相对安全的目的。
  User nobody
  Group# -1
  (2) ServerRoot目录的权限
  为了确保所有的配置是适当的和安全的,需要严格控制Apache 主目录的访问权限,使非超级用户不能修改该目录中的内容。Apache 的主目录对应于Apache Server配置文件httpd.conf的Server Root控制项中,应为:
  Server Root /usr/local/apache
  (3)SSI的配置
  在配置文件access.conf 或httpd.conf中的确Options指令处加入IncludesNOEXEC选项,用以禁用Apache Server 中的执行功能。避免用户直接执行Apache 服务器中的执行程序,而造成服务器系统的公开化。
  
  Options Includes Noexec
  
  (4)阻止用户修改系统设置
  在Apache 服务器的配置文件中进行以下的设置,阻止用户建立、修改 .htaccess文件,防止用户超越能定义的系统安全特性。
  
  AllowOveride None
  Options None
  Allow from all
  
  然后再分别对特定的目录进行适当的配置。
  (5)Apache 服务器的确省访问特性
  Apache 的默认设置只能保障一定程度的安全,如果服务器能够通过正常的映射规则找到文件,那么客户端便会获取该文件,如[url]http://local[/url] host/~ root/ 将允许用户访问整个文件系统。在服务器文件中加入如下内容:
  
  order deny,ellow
  Deny from all
  
  将禁止对文件系统的缺省访问。
  (6)CGI脚本的安全考虑
  CGI脚本是一系列可以通过Web服务器来运行的程序。为了保证系统的安全性,应确保CGI的作者是可信的。对CGI而言,最好将其限制在一个特定的目录下,如cgi-bin之下,便于管理;另外应该保证CGI目录下的文件是不可写的,避免一些欺骗性的程序驻留或混迹其中;如果能够给用户提供一个安全性良好的CGI程序的模块作为参考,也许会减少许多不必要的麻烦和安全隐患;除去CGI目录下的所有非业务应用的脚本,以防异常的信息泄漏。
  以上这些常用的举措可以给Apache Server 一个基本的安全运行环境,显然在具体实施上还要做进一步的细化分解,制定出符合实际应用的安全配置方案。

 四、Apache Server基于主机的访问控制
  Apache Server默认情况下的安全配置是拒绝一切访问。假定Apache Server内容存放在/usr/local/apache/share 目录下,下面的指令将实现这种设置:
  
  Deny from all
  AllowOverride None
  
  则禁止在任一目录下改变认证和访问控制方法。
  同样,可以用特有的命令Deny、Allow指定某些用户可以访问,哪些用户不能访问,提供一定的灵活性。当Deny、Allow一起用时,用命令Order决定Deny和Allow合用的顺序。
  1、拒绝某类地址的用户对服务器的访问权(Deny)
  如:Deny from all
  Deny from test.cnn.com
  Deny from 204.168.190.13
  Deny from 10.10.10.0/255.255.0.0
  2、允许某类地址的用户对服务器的访问权(Allow)
  如:Allow from all
  Allow from test.cnn.com
  Allow from 204.168.190.13
  Allow from 10.10.10.0/255.255.0.0
  Deny和Allow指令后可以输入多个变量。
  3、实例:
  Order Allow, Deny
  Allow from all
  Deny from www.***.com
  则,想让所有的人访问Apache服务器,但不希望来自www.***.com的任何访问。
  Order Deny, Allow
  Deny from all
  Allow from test.cnn.com
  则,不想让所有人访问,但希望给test.cnn.com网站的来访。
  有关访问控制的高级设置请阅读UNIX系统管理书籍。

  五、Apache Sever的用户认证与授权
  概括的讲,用户认证就是验证用户的身份的真实性,如用户帐号是否在数据库中,及用户帐号所对应的密码是否正确;用户授权表示检验有效用户是否被许可访问特定的资源。在Apache中,几乎所有的安全模块实际上兼顾这两个方面。从安全的角度来看,用户的认证和授权相当于选择性访问控制。
  建立用户的认证授权需要三个步骤:
  (1)建立用户库
  用户名和口令列表需要存在于文件(mod_auth模块)或数据库(mod_auth_dbm模块)中。基于安全的原因,该文件不能存放在文挡的根目录下。如,存放在/usr/local/etc/httpd下的users文件,其格式与UNIX口令文件格式相似,但口令是以加密的形式存放的。应用程序htpasswd可以用来添加或更改程序:
  htpasswd -c /usr/local/etc/httpd/users martin
-c表明添加新用户,martin为新添加的用户名,在程序执行过程中,两次输入口令回答。用户名和口令添加到users文件中。产生的用户文件有如下的形式:
  martin:WrU808BHQai36
  jane:iABCQFQs40E8M
  art:FadHN3W753sSU
  第一域是用户名,第二个域是用户密码。
(2)配置服务器的保护域
  为了使Apache服务器能够利用用户文件中的用户名和口令信息,需要设置保护域(Realm)。一个域实际上是站点的一部分(如一个目录、文档等)或整个站点只供部分用户访问。在相关目录下的.htaccess文件或httpd.conf(acces.conf)中的段中,由AuthName来指
定被保护层的域。在.htaccess文件中对用户文件有效用户的授权访问及指定域保护有如下指定:
  AuthName “restricted stuff”
  Authtype Basic
  AuthUserFile /usr/local/etc/httpd/users
  Require valid-user
  其中,AuthName指出了保护域的域名(Realm Name)。valid-user参数意味着user文件中的所有用户都是可用的。一旦用户输入了一个有效的用户/口令时,同一个域内的其他资源都可以利用同样的用户/口令来进行访问,同样可以使两个不同的区域共用同样的用户/口令。
  (3)告诉服务器哪些用户拥有资源的访问权限
  如果想将一资源的访问权限授予一组客户,可以将他们的名字都列在Require之后。最好的办法是利用组(group)文件。组的操作和标准的UNIX的组的概念类似,任一个用户可以属于一个和数个组。这样就可以在配置文件中利用Require对组赋予某些权限。如:
  Require group staff
  Require group staff admin
  Require user adminuser
  指定了一个组、几个组或一个用户的访问权限。
  需要指出的是,当需要建立大批用户帐号时,那么Apache服务器利用用户文件数据库将会极大地降低效率。这种情况下,最好采用数据库格式的帐号文件,譬如 DBM数据库格式的文件。还可以根据需要利用db格式(mod_auth_db)的数据文件,或者直接利用数据库,如:mSQL(mod_auth_msql)或DBI兼容的数据库(mod_auth_dbi)。

  六、在Apache中使用DBM用户认证
  DBM 文件是一种简单而标准的用于加快读取效率的保存信息的方法。文件中存放的每一个记录由两个部分组成部分:键和值。由于DBM的格式,使得与键相关的信息非常有效。在Web用户认证中,这里的键将是用户名,而与该键相关的值将是该用户经过加密的口令信息。从DBM文件中查找用户名和口令,要比从一个纯文本文件中查找有效得多。对于有很多用户的站点,这种方法将大大提高用户认证的效率。
  (1) 在Apache服务器中增加DBM模块
  在默认的条件下,Apache不使用DBM文件来完成用户认证,因此编译时一定要加入可选的DBM认证模块。重新配置Apache服务器文件,去掉其中的注释行
  #Module dbm_auth_module mod_auth_dbm.o
  前的“#”,并重新编译。但是,在编译之前,需要指出Apache DBM函数的位置。
  (2) 创建DBM用户文件(假设文件名为users)
  Apache提供了一个“dbmmanage”的程序,用于创建和管理DBM文件。其中:
  Dbmmanage /usr/local/etc/httpd/usersdbm     创建DBM文件
  Dbmmanage /usr/local/etc/httpd/users adduser martin hamster 新增用户
  Dbmmanage /usr/local/etc/httpd/usersdbm delete martin   删除用户
  Dbmmanage /usr/local/etc/httpd/usersdbm view 显示DBM中所有用户
  有了DBM数据库文件,还要替换目录访问控制,即将Apache配置文件(access.conf)中的AuthUserFile部分替换成:AuthUserFile /usr/local/etc/usersdbm 告诉Apache现在的用户文件是DBM的格式。
  以上内容,是作者在长期的网站管理工作中的一点积累。由于篇幅的关系,只能作粗略的描述,远不能表达清楚Apache服务器的安全使用。安全是相对的,严防是绝对的。只有及时了解最新的安全信息,掌握最新的安全技术、工具,根据实际情况,制定安全策略,才能及时有效地抵御各种各样的网上“侵略者”。

推荐阅读
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • 本文探讨了如何解决PHP文件无法写入本地文件的问题,并解释了PHP文件中HTML代码无效的原因,提供了一系列实用的解决方案和最佳实践。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 深入理解Lucene搜索机制
    本文旨在帮助读者全面掌握Lucene搜索的编写步骤、核心API及其应用。通过详细解析Lucene的基本查询和查询解析器的使用方法,结合架构图和代码示例,带领读者深入了解Lucene搜索的工作流程。 ... [详细]
  • 本文详细介绍了如何在 MySQL 中授予和撤销用户权限。包括创建用户、赋予不同级别的权限(如表级、数据库级、服务器级)、使权限生效、查看用户权限以及撤销权限的方法。此外,还提供了常见错误及其解决方法。 ... [详细]
  • Windows 7 64位系统下Redis的安装与PHP Redis扩展配置
    本文详细介绍了在Windows 7 64位操作系统中安装Redis以及配置PHP Redis扩展的方法,包括下载、安装和基本使用步骤。适合对Redis和PHP集成感兴趣的开发人员参考。 ... [详细]
  • 雨林木风 GHOST XP SP3 经典珍藏版 V2017.11
    雨林木风 GHOST XP SP3 经典珍藏版 V2017.11 ... [详细]
  • 本文详细介绍了如何在不同操作系统和设备上设置和配置网络连接的IP地址,涵盖静态和动态IP地址的设置方法。同时,提供了关于路由器和机顶盒等设备的IP配置指南。 ... [详细]
  • 本文详细探讨了 org.apache.hadoop.ha.HAServiceTarget 类中的 checkFencingConfigured 方法,包括其功能、应用场景及代码示例。通过实际代码片段,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
author-avatar
能豆子2014
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有