科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网服务器频道安全技巧:Apache服务器设置安全指南

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在典型操作中,Apache服务器是由root用户启动的,并且通过用户指令转变为用户定义的操作。正如root执行的任何指令一样,你必须注意保护服务器,防止任何非root用户进行修改。不仅文件本身必须由root用户进行修改,而且目录和所有目录的父目录也是如此。

来源:IT专家网 2008年9月5日

关键字: CGI 漏洞 SSI 服务器 Apache服务器

  • 评论
  • 分享微博
  • 分享邮件

  这里将要介绍到的,有些技巧是关于设置一台网络服务器的安全问题,也许您会说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等。因此,这些引擎执行这些脚本能够让服务器用户访问任何内容。有些脚本引擎可能提供一些限制措施,但是,最好是安全一些,不要这样做。

  保护系统设置

  要保证系统安全,你要阻止用户设置.htaccess文件,因为这个文件能够覆盖你设置的安全功能。下面是实现这个目的的一种方法。

  在服务器设置文件中输入:

  <Directory />

  AllowOverride None

  </Directory>

  除了特别启用的之外,这个设置将阻止在所有的目录中使用.htaccess文件。

  设定默认保护服务器文件

  Apache的一个经常被误解的方面是默认的访问权限。也就是说,如果服务器可以通过正常的URL镜像规则找到一个文件,它就可以把这个文件提供给客户机,除非你采取措施更改设置。

  例如,考虑以下例子:

  # cd /; ln -s / public_html

  Accessing http://localhost/~root/

  这将允许客户浏览整个的文件系统。要解决这个问题,你要在服务器设置文件中增加以下内容:

  <Directory />

  Order Deny,Allow

  Deny from all

  </Directory>

  这将禁止默认的访问文件系统的位置。增加合适的<Directory>小节,仅允许在你希望的那些区域进行访问。例如:

  <Directory /usr/users/*/public_html>

  Order Deny,Allow

  Allow from all

  </Directory>

  <Directory /usr/local/httpd>

  Order Deny,Allow

  Allow from all

  </Directory>

  特别注意以下两个指令<Location>和<Directory>的交互作用;例如,即使<Directory/>拒绝访问,一个<Location/>指令也许改变它。

  同时,必须谨慎地使用“UserDir”指令;对于root来说,把它设定成类似“./”的样子将有相同的作用,与上面的第一个例子相同。如果你在使用Apache 1.3或更高版本,我们强烈建议你在服务器设置文件中增加下面一行:

  UserDir disabled root

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章