当前位置:编程学习 > C#/ASP.NET >>

ASP.NET虚拟主机安全漏洞解决方案(2)

答案:     默认情况下,IIS 6.0在工作进程隔离模式下运行,如图五所示。在这种模式中,对于每一个Web应用,IIS 6.0都用一个独立的w3wp.exe的实例来运行它。w3wp.exe也称为工作进程(Worker Process),或W3Core。
  
  
  
  可靠性和安全性。可靠性的提高是因为一个Web应用的故障不会影响到其他Web应用,也不会影响http.sys,每一个Web应用由W3SVC单独地监视其健康状况。安全性的提高是由于应用程序不再象IIS 5.0和IIS 4.0的进程内应用那样用System帐户运行,默认情况下,w3wp.exe的所有实例都在一个权限有限的“网络服务”帐户下运行,如图六所示,必要时,还可以将工作进程配置成用其他用户帐户运行。
  
  
  
  对,这里,这里就是我们解决的核心。
  
    我们把每一个网站都分配一个独立的应用程序池,并赋予不同的权限。不就能解决这个问题了吗?
  
    具体如何做呢,下面我就针对建立一个网站来做一个示范:
  
    首先,我们为网站创建两个用户(一个是app_test_user、密码为appuser,一个是iis_test_user、密码为iisuser)
  
    1. 打开 计算机管理器
  
    2. 单击控制台树中的用户→计算机管理→系统工具→本地用户和组→用户
  
    3. 单击“操作”菜单上的“新用户”输入用户名为。app_test_user、密码为appuser
  
    4. 在对话框中键入适当的信息。
  
    5. 选中复选框:
  
     用户不能更改密码
  
     密码永不过期
  
    6. 单击“创建”,然后单击“关闭”。
  
  
  
  按照此方法在创建iis_test_user账户
  
    然后分别把app_test_user添加到iis_wpg组,把iis_test_user添加到Guests组。删除其他组。
  
  
  
  
  然后,建立相应的应用程序池。
  
    依次打开Internet 信息服务→本地计算机→应用程序池→新建→应用程序池
  
    新建一个名字为test的应用程序池
  
  
  
  编辑test应用程序池的属性→标示→配置→用户名→浏览→把用户名改为我们刚才建立的app_test_user并输入相应的密码
  
  
  
  其次建立相应的网站。
  
    依次打开Internet 信息服务→本地计算机→网站→新建→test的网站,目录为d:\test →编辑test网站的属性→主目录→应用程序池→app_test_user →目录安全性→身份验证和访问控制→编辑,选择我们刚才建立的iis_test_user,并输入相应的密码iisuser→保存并退出。
  
  
  
  最后设定服务器的安全。
  
    C:只给administrators和system完全控制的权利,删除掉其他所有的权限,不替换子目录
  
  
  
  C:\Documents and Settings继承父项,并替换子目录。
  
    C:\Program Files继承父项,并替换子目录,并把C:\Program Files\Common Files\Microsoft Shared继承属性删除并复制现有属性,增加users的读取权限并替换子目录(这样做是为了能够让ASP,ASP.NET使用Access等数据库)。
  
    C:\Windows删除继承,并复制现有属性,只给予administrators,system完全控制和users读取的权限并替换子目录。
  
  
  
  其余所有的盘都只给于administrators和system用户的完全控制权限,删除其他所有用户并替换子目录。
  
    D:\test(用户网站目录)继承现有属性并增加app_test_user和iis_test_user完全控制的权限并替换子目录。
  
    以后每增加一个网站都以此类推。
  
    但是,至此,system.io还是对c:\windows又读取权限的,(怀疑network servers用户属于users组,但是好多服务都要使用users组来执行的,所以不能把c:\windwos去掉users组的读取权限)但必须知道系统路径,有两种方案解决。
  
    1、 再安装系统的时候使用无人值守安装,更换c:\windows默认安装路径,如更改为c:\testtest(要符合dos的命名规则,不能超过8个字符)。这个是必需的
  
    2、 以下位置具有指派给 IIS_WPG 的权限:
  
    %windir%\help\iishelp\common – 读取
    %windir%\IIS Temporary Compressed Files – 列出、读取、写入
    %windir%\system32\inetsrv\ASP Compiled Template – 读取
    Inetpub\wwwroot(或内容目录)- 读取、执行
  
    此外,IIS_WPG 还具有以下用户权限:
  
    忽略遍历检查(SeChangeNotifyPrivilege)
  
    作为批处理作业登录(SeBatchLogonRight)
  
    从网络访问此计算机(SeNetworkLogonRight)
  
    当然两种方法结合起来算是最安全的方案,一般使用第一种方案已经算是很安全的,毕竟是用一个webshell来猜测8位字符的目录还是需要花费时间的。使用防火墙很容易就能察觉出来,并加以控制。
  
    第二种可能根据所安装软件不同还要相应增加目录的读取权限,详细情况要根据软件来确定。
  
    如果主机用户比较多,这将是一个相当大的劳动量,推荐使用程序来解决问题,下面给出网上不常见的针对iis应用程序池操作的代码和针对iis虚拟目录的操作代码。
  
  

上一个:ASP.NET虚拟主机安全漏洞解决方案(3)
下一个:ASP.NET虚拟主机安全漏洞解决方案(1)

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,