深圳升蓝软件
数据库开发 .Net技术  |  ASP技术 PHP技术 JSP技术 应用技术类   
Hiblue Software

提高IIS的安全性


March 25,2004
提高IIS的安全性

概要:使用IIS的省缺设置就象把你屋子的钥匙给了别人,本文教你如何把门锁上。(本文不是100%直译,括号中的是讨饭猫的废话)

没有任何系统是100%安全的,系统漏洞会不断地发现,这是因为黑客和系统管理员一样也在整天看着新闻组,收集着这方面的信息。黑与反黑之间的战斗会永远进行下去。

如果你采用IIS的省缺设置,那你在这场较量中就已经处于下风。Windows NT省缺下被安装为一个开放的服务器,即使是菜鸟hacker也能得手。但只要你做下面几个简单步骤,情况就会有很大改善。虽不敢说攻无不克,至少可以保护你的数据不象小克的拉链门一样世人皆知。

一个安全的系统要有多层保护。一般的计算机系统有三层保护,物理层,网络层,文件系统。物理层就是保护好计算机硬件本身,硬盘,软盘不被偷走,这就不用我多说了。网络层是要保护与Internet和本地LAN的网络连接,主要是靠防火墙和端口的存取权限设置。最里面的是文件系统,这也是大多数攻击的目标。下面我们主要也就讲这方面。

省缺设置的问题

NT省缺设置成一个开放系统,文件系统是几乎完全没有安全设置的,网络上的任何用户都可以读写删除其中的文件。这主要原因是NT中大量使用了 Everyone 组(更可怕是省缺给 full权限),理论上,地球上任何用户都属于everyone组。相比之下,NetWare就设置为一个封闭的系统,安全性就好很多。为什么Microsoft要做这种蠢事?原因可能是给最大权限可以减少许多因为权限问题带来的技术支持电话吧。(是这样吗?)

IIS同样也有很多问题。安装IIS时,系统建立一个前缀是IWAM_(早期版本是IUSR_)的帐户,该帐户属于Guest组,能够存取Guest组和Everyone组权限下的所有文件。在省缺安装下,90%的系统文件可以被该用户访问。

看来解决方法就是删除所有的everyone组权限了,但实际上这样做行不通。因为IIS不仅要存取HTML文件,还会调用Script和ActiveX控件,还涉及到DLL的执行,全部取消Everyone组权限会使系统出现这样那样的问题。所以要使用一些系统安全工具来一步步做。

系统安全工具

熟悉以下NT系统自带的安全工具是很重要的:

User Manager(usrmgr.exe)
IIS 4.0: Microsoft management console (MMC.EXE)
IIS 3.0: Internet service manager (INETMGR.EXE)
Registry editor (REGEDT32.EXE)
(介绍省略,不相信你没用过)

Command line ACL editor (CACLS.EXE)
这个工具可能知道的人不多,也是NT自带,用于管理access control list(ACL)。

Control panel, system applet
该工具用于管理系统环境变量。

步骤一:使用专用的Web组

1 用user manager建立一个名为WWW的本地组
2 将IWAM_账号从Guests组中删除,加入WWW组
3 赋予WWW组“access this computer from the network”权限,让IIS能执行一个本地登录操作
4 重起WWW服务
5 在Web根目录下执行命令行操作:

CACLS <DIR>*.*  /T /E /C /G WWW:R

参数        Meaning
<DIR>*.*    Web根目录。在  With IIS 4.0 中通常是 C:InetpubWWWRoot.   
/T    作用于所有的目录和子目录   
/E    编辑ACL,不是替换   
/C    有错误停止执行.   
/G WWW:R    赋予WWW组Read权限   

这样Web目录下的所有文件都承认WWW组的读权限了。别忘了在其他包含Web内容的目录下执行这个命令(主要是虚拟目录)

步骤二:删除Everyone组

完成以上操作后,Internet用户只能看所允许的文件了。但这还不够,因为everyone组还存在,现在需要将everyone组从计算机中的所有文件中清除出去。
但清除everyone组不象想象的那么简单。省缺下,许多Microsoft DLL文件在ACL中之只列了everyone组。如果一杆子打到底,这些DLL文件就无人可以访问了。因为一删除everyone组,ACL就空了,空的ACL意味着任何访问者都没有权限。执行以下命令:

CACLS C:*.* /T /E /C /G Users:F /R Everyone

参数    Meaning
/G Users:F    赋予Users组所有权限
/R Everyone    取消Everyone组所有权限

这样可以保证ACL中不为空。然而这样做带来两个问题:本机完全开放给本地网络;变动太多的系统文件权限。最好的方法其实是找出那些文件只有everyone组权限,不幸地是WindowsNT没有提供该功能,但有一些第三方工具能做到这个功能。(原文中没有提到到底是哪些工具)如果有这些工具的话,该命令改为:

CACLS C:*.* /T /E /C /R Everyone

步骤三:处理数据库

如果你的系统包括数据库或ActiveX,例如搜索引擎,guest book什么的,那还需要执行步骤三。对于guest book,执行:

CACLS /T /E /C /G WWW:C

参数    Meaning
/G WWW:C    赋予 WWW 组change权限.

这时,你可能会发现从Web上还是无法更新guest book,甚至连数据库读操作都无法执行。如果出现这种情况,你一定是使用了ODBC连接数据库。问题就出在ODBC的临时文件。当ODBC 建立时,系统会建立一个临时文件记录锁定信息等。省缺情况下,这些文件是存放在system32目录下。Internet用户是没有在该目录下写和创建的权限的。比较好的解决办法是指定另一个Internet用户有权限的目录来存放ODBC临时文件。在Control Panel的system applet中加入以下系统变量

变量     
TEMP    %SystemDrive%TEMP
TMP    %SystemDrive%TEMP

然后给该目录授权:

CACLS C:TEMP*.* /E /C /G WWW:F

然后重启机器。

步骤四:ActiveX 部件

如果使用ASP去连结数据库,还会有问题。ASP使用ActiveX部件ADO 去访问数据库。一个ASP连结数据库的典型语法是:

var DBConn = Server.CreateObject('ADODB.Connection');

ADODB.Connection是一个Program ID,实际上是一个文件。在实际使用中要被翻译成实际的地址以便调用。这个信息被记录在注册表的 HKEY_CLASSES_ROOT 段中。现在明白要改什么了吗?就是要给ADODB.Connection所在目录加上WWW组的读权限。用Regedit去找到该目录吧。

祝贺你

你现在已经使你的系统安全很多了。但记住,hacker会不断寻找新漏洞来攻破你的系统,所以这种安全性设置只是与hacker进行的第一场战役。

原文出自:
http://www.windowstechedge.com/wte/wte-1999-04/wte-04-iis1.html
Copyright © 2001-2008 Shenzhen Hiblue Software Team All rights reserved