C# 安全问题IIS7.5/IIS应用池\用户未经授权但拥有完全控制权?

C# 安全问题IIS7.5/IIS应用池\用户未经授权但拥有完全控制权?,c#,asp.net,security,iis-7.5,C#,Asp.net,Security,Iis 7.5,似乎我在安全方面有一个奇怪的问题: 我有一个包含以下文件夹的网站: inetpub\wwwroot inetpub\wwwroot\readyfordownload IIS APPPOOL\Classic用户具有此“readyfordownload”文件夹的完全访问权限 现在我有了一个控制台应用程序,可以在readyfordownload文件夹中创建zipfile。这是从c类库中完成的。奇怪的是,IIS APPOOL无法访问此文件,即使它完全控制该文件夹。此外,classlib首先创建一个xls

似乎我在安全方面有一个奇怪的问题:

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

inetpub\wwwroot inetpub\wwwroot\readyfordownload IIS APPPOOL\Classic用户具有此“readyfordownload”文件夹的完全访问权限

现在我有了一个控制台应用程序,可以在readyfordownload文件夹中创建zipfile。这是从c类库中完成的。奇怪的是,IIS APPOOL无法访问此文件,即使它完全控制该文件夹。此外,classlib首先创建一个xlsx文件,该文件随后添加到zip中。APPPOOL用户确实有权访问xlsx文件

如果我从网站中的代码隐藏运行C类库中的相同函数,则会创建相同的zipfile,IIS APPPOOL用户可以访问该文件

有什么想法吗

zip是这样创建的,不是实际的代码,但它是相同的

}

操作系统是windows 2008 R2 web服务器 ZIP库是Dotnetzip


更新:我最感兴趣的是为什么ZIPfile没有获得权限,而xlsx文件却获得了权限……

您是否尝试过显式设置权限?可能文件没有从目录继承ACL。

检查Windows事件日志以了解相关错误。有关使用的详细信息,您可以查看权限是否有问题。

使用“高级安全设置属性页”配置文件夹的安全性。选择属性->安全性。还请注意,应用程序池可以模拟用户,因此应用程序可能不会使用应用程序池的标识为请求提供服务。默认情况下,模拟可能不起作用。您必须在web配置中显式设置它。例如,或


Sriwantha Sri Aravinda

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

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

确保IIS_IUSR和DefaultAppPool用户有权访问您的wwwroot

正如scottm所建议的那样,更改控制台代码以授予IUSR和DefaultAppPool用户对zip文件的权限。您的代码应该如下所示:

    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);
    }

您是否检查了无法访问的文件的权限?我同意scottm的观点,该文件很可能没有从父文件夹继承权限。但为什么生成的XLSX文件会继承权限而ZIP文件不会?您是如何创建ZIP文件的?你能告诉我们生成它的代码吗?例如,文件副本不会继承目标文件夹的权限请参阅更新的帖子。它不是复制品。奇怪的是,xlsx是从模板文件创建的,而模板文件是复制的……对于其他出现此错误的人,可能值得注意的是,如果目标文件夹中已经存在一个文件名完全相同的文件,这也会抛出相同的/a类似错误Yes,这是我的解决方法,但我不明白为什么zipfile不继承它们,而XLSX文件继承它们。它们是在同一个函数中生成的。xlsx文件非常大,这就是为什么它被zipped@Pleun,您需要查看正在使用的ZIP库的内部结构,以了解在创建.ZIP时如何应用ACL。mmmhh。。。我不知道我是否愿意。解决方案最终会奏效,所以我不想太麻烦了。我希望有一些明显的解决办法。我想,我会在他们的论坛上发帖。塔克斯。除非出现神奇的解决方案,否则您的答案将被视为赏金。抱歉,所有有效分数均已检查,但这并不能解决zipfile和xlsx文件之间的差异。。。
    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);
    }