国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 服务器 > 安全技巧:Apache服务器设置安全指南

安全技巧:Apache服务器设置安全指南

来源:程序员人生   发布时间:2013-10-19 05:37:32 阅读次数:2554次
这里将要介绍到的,有些技巧是关于设置一台网络服务器的安全问题,也许您会说Apache本身是比较安全的,但相信本问都会让你受益非浅。本文有些建议是通用的,有些是专门针对Apache服务器的。

  批准ServerRoot目录

  在典型操作中,Apache服务器是由root用户启动的,并且通过用户指令转变为用户定义的操作。正如root执行的任何指令一样,你必须注意保护服务器,防止任何非root用户进行修改。不仅文件本身必须由root用户进行修改,而且目录和所有目录的父目录也是如此。例如,如果你选择把ServerRoot放在/usr/local/apache目录中,建议你把那个目录创建为根目录,使用如下指令:

  mkdir /usr/local/apache

  cd /usr/local/apache

  mkdir bin conf logs

  chown 0 . bin conf logs

  chgrp 0 . bin conf logs

  chmod 755 . bin conf logs

  假定/、/usr和/usr/local只能被root用户修改。当你安装httpd可执行文件时,你应该保证这个文件受到同样的保护。使用如下命令:

  cp httpd /usr/local/apache/bin

  chown 0 /usr/local/apache/bin/httpd

  chgrp 0 /usr/local/apache/bin/httpd

  chmod 511 /usr/local/apache/bin/httpd

  你可以创建一个其他用户可以修改的htdocs子目录,因为根永远不能在那里执行任何文件,不应该在那里创建任何文件。

  如果你允许非根用户修改根不能执行或者写入的任何文件,那么,你的系统的根就会被攻破。例如,有人会替换httpd二进制代码,这样,当你下一次启动机器的时候,它就会执行任意代码。如果这个记录目录是允许非根用户写入的,有人就会用其它系统文件取代这个记录文件。然后,根就能够使用任何数据覆盖那个文件。如果那些记录文件本身是允许非根用户写入的,有人就会用虚假的数据覆盖那个记录本身。

  服务器端包含(SSI)

  服务器端包含为服务器管理员提出了一些潜在的安全风险。

  第一个风险是服务器工作量的增加。所有具有SSI功能的文件都必须由Apache服务器解析,无论这些文件是否包含任何SSI指令。虽然这个工作量增加的很少,但是,在一个共享服务器环境中,这个工作量将变得非常大。

  一般来说,SSI文件能够产生与CGI脚本相同的风险。使用“exec cmd”指令,具有SSI功能的文件能够在用户的允许之下执行任何CGI脚本或者程序。组Apache服务器可根据httpd.conf文件中的设置运行。这应该为服务器管理员提供一个休息的机会。

  在利用SSI文件提供的好处的同时,有许多提高SSI文件安全的方法。

  要限制一个难以驾驭的SSI文件引起的损失,服务器管理员可以按照CGI总则部门介绍的方法启用suexec程序。

  让有.html或者.htm扩展名的文件具有SSI功能是危险的。特别是在共享的、通讯量大服务器环境更是如此。具有SSI功能的文件应该有一个单独的扩展名,如.shtml。这有助于把工作量保持在较低的水平,使风险管理更加容易。

  另一个解决方案是关闭从SSI页运行脚本和程序的能力。要做到这一点,在选项指令中用“IncludesNOEXEC”取代“Includes”。注意,用户也许仍然可以使用 <--#include virtual="..." --> 执行CGI脚本,如果这些脚本在一个ScriptAlias指令指定的目录中的话。

  非脚本别名的CGI

  应该仅在如下条件下才允许用户使用任何目录中的CGI脚本:

  1.你信任你的用户不会编写这种脚本,故意或无意地让你的系统遭受攻击。

  2.你认为你的网站安全在其它方面如此的脆弱,以至于多一个漏洞也没有关系。

  3.你没有用户,而且没有人访问你的服务器。

  脚本别名的CGI

  把CGI限制在特定的目录中可让管理员控制进入目录的内容。这必然比“非脚本别名的CGI”更安全,但是,这仅限于拥有这些目录写入权限的用户是可信赖的,或者管理员愿意测试每一个新的CGI脚本/程序,查找其中的漏洞。

  大多数网站选择这个选项,不选择“非脚本别名的CGI”方法。

  通用CGI

  你要永远记住,你必须相信CGI脚本/程序的作者,或者相信你自己有能力发现CGI中潜在的安全漏洞,无论这些漏洞是有意的或是无心的。

  所有CGI脚本将作为同一用户运行,因此,这些脚本有可能相互冲突(意外的或故意的)。例如,用户A憎恨用户 B,于是他编写一个脚本破坏用户B的 CGI数据库。一个能够用来允许脚本以不同用户身份运行的程序是 suEXEC。它包含在Apache 1.2版中,可以使用Apache服务器代码调用。另一个常用的方法是使用CGIWrap。

  其它动态内容资源

  嵌入的脚本选项以服务器本身的身份运行。这些选项作为服务器本身的一部分运行,如mod_php、mod_perl、mod_tcl和mod_python等。因此,这些引擎执行这些脚本能够让服务器用户访问任何内容。有些脚本引擎可能提供一些限制措施,但是,最好是安全一些,不要这样做。
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生