安全问题IIS7.5 / IIS APPPOOL \用户未经授权但具有完全控制权?

时间:2011-10-06 09:18:36

标签: c# asp.net security iis-7.5

我的安全性似乎有一个奇怪的问题:

我的网站包含以下文件夹:

  • 的Inetpub \ wwwroot的
  • 的Inetpub \ wwwroot的\ readyfordownload

IIS APPPOOL \ Classic用户可以完全访问此“readyfordownload”文件夹。

现在我有一个控制台APP,它在readyfordownload文件夹中创建一个zipfile。这是从c#classlib完成的。奇怪的是,IIS APPOOL无法访问此文件,即使它完全控制该文件夹。此外,classlib首先创建一个xlsx文件,稍后将其添加到zip中。 APPPOOL用户可以访问xlsx文件。

如果我从网站后面的代码在C#classlib中运行相同的函数,则会创建相同的zip文件,并且IIS APPPOOL用户可以访问该文件....

有什么想法吗?

像这样创建

zip(不是实际代码,但它是相同的) http://dotnetzip.codeplex.com/

  using (ZipFile zip = new ZipFile())
 {
     // add this map file into the "images" directory in the zip archive
             zip.AddFile("test.xlsx");
     zip.Save("MyZipFile.zip");

}

操作系统是Windows 2008 R2 Web服务器 ZIP库是Dotnetzip(Ionic)

更新:我最感兴趣的是为什么ZIP文件没有获得权利而xlsx文件没有....

4 个答案:

答案 0 :(得分:5)

您是否尝试过明确设置FileAccessSecurity?也许文件没有从目录继承ACL。

答案 1 :(得分:2)

apppool用户可以访问xlsx文件,因为您的控制台直接在readyfordownload文件夹下创建它。

另一方面,zip文件首先在临时文件夹中创建,然后复制到您的文件夹中。这意味着文件上的文件权限设置错误。

  1. 确保IIS_IUSR和DefaultAppPool用户可以访问您的wwwroot。

  2. 正如scottm建议更改您的控制台代码,以便为zip文件上的IUSR和DefaultAppPool用户授予权限。您的代码应如下所示:

        using (ZipFile zip = new ZipFile())
        {
            // add this map file into the "images" directory in the zip archive
            zip.AddFile("test.xlsx");
            zip.Save("MyZipFile.zip");
    
            var accessControl = File.GetAccessControl("MyZipFile.zip");
    
            var fileSystemAccessRule = new FileSystemAccessRule(
                                        @"BUILTIN\IIS_IUSRS",
                                        FileSystemRights.Read | FileSystemRights.ReadAndExecute,
                                        AccessControlType.Allow);
    
            var fileSystemAccessRule2 = new FileSystemAccessRule(
                                        @"IIS AppPool\DefaultAppPool",
                                        FileSystemRights.Read | FileSystemRights.ReadAndExecute,
                                        AccessControlType.Allow);
    
            accessControl.AddAccessRule(fileSystemAccessRule);
            accessControl.AddAccessRule(fileSystemAccessRule2);
    
            File.SetAccessControl(path, accessControl);
        }
    

答案 2 :(得分:0)

检查Windows EventLog是否存在相关错误。有关详细信息,请使用ProcessMonitor,以便查看权限是否存在问题。

答案 3 :(得分:0)

使用“高级设置属性页”配置文件夹的安全性。 (选择属性 - &gt;安全性)。另请注意,应用程序池可以模拟用户,以便应用程序可能无法使用应用程序池的标识提供请求。默认情况下,模拟可能无效。您必须在Web配置中明确设置它。例如。 <identity impersonate="true" /><identity impersonate="true" userName="domain\user" password="password" />

Sriwantha Sri Aravinda