1.Apache 具有灵活的设置
所有 Apache 的安全特性都要经过周密的设计与规划,进行认真地配置才能够实现。Apache 安全配置包括很多层面,有运行环境、认证与授权设置等。Apache 的安装配置和运行示例如下:
1 修改 apache 的版本信息,使外部访问看到的 apache 信息是经过伪装或错误的,这个可以尽可能的保证 apache 的安全。
2 建立安全的 apache 的目录结构。ServerRoot DocumentRoot ScripAlias Customlog Errorlog 均放在单独的目录环境中。以上主要目录相互独立并且不存在父子逻辑关系。
ServerRoot 目录只能具有管理权限用户访问;DocumentRoot 能够被管理 Web 站点内容的用户访问和使用 Apache 服务器的 Apache 用户和 Apache 用户组访问;只有 admin 组的用户可以访问日志目录。各个目录设置独立的权限
4、禁止默认访问的存在,只对指定的目录开启访问权限。
5 更改 apache 的默认路径,单独建立路径提供 apache 文件的存放
6、通过使用例如“Apache DoS Evasive Maneuvers Module”等工具来实现 Apache 服务器对 DoS 攻击的防范。其工具可以快速拒绝来自相同地址对同一 URL 的重复请求。
7、以 Nobody 用户运行
一般情况下,Apache 是由 Root 来安装和运行的。如果 Apache Server 进程具有 Root 用户特权,那么它将给系统的安全构成很大的威胁,应确保 Apache Server 进程以最可能低的权限用户来运行。通过修改 httpd.conf 文件中的下列选项,以 Nobody 用户运行 Apache 达到相对安全的目的。
2、ServerRoot 目录的权限
为了确保所有的配置是适当的和安全的,需要严格控制 Apache 主目录的访问权限,使非超级用户不能修改该目录中的内容。Apache 的主目录对应于 Apache Server 配置文件 httpd.conf 的 Server Root 控制项中,应为:
Server Root /usr/local/apache
3、SSI 的配置
在配置文件 access.conf 或 httpd.conf 中的确 Options 指令处加入 Includes NO EXEC 选项,用以禁用 Apache Server 中的执行功能。避免用户直接执行 Apache 服务器中的执行程序,而造成服务器系统的公开化。
Options Includes Noexec
4、阻止用户修改系统设置
在 Apache 服务器的配置文件中进行以下的设置,阻止用户建立、修改 .htaccess 文件,防止用户超越能定义的系统安全特性。
AllowOveride None
Options None
Allow from all
然后再分别对特定的目录进行适当的配置。
5、改变 Apache 服务器的确省访问特性
Apache 的默认设置只能保障一定程度的安全,如果服务器能够通过正常的映射规则找到文件,那么客户端便会获取该文件,如 http://local 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
Allow Override 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.test.com
指想让所有的人访问 Apache 服务器,但不希望来自 www.test.com 的任何访问。
Order Deny, Allow
Deny from all
Allow from test.cnn.com
指不想让所有人访问,但希望给 test.cnn.com 网站的来访。
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
指定了一个组、几个组或一个用户的访问权限。