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

Posted

技术标签:

【中文标题】安全问题 IIS7.5 / IIS APPPOOL\\用户未授权但拥有完全控制权?【英文标题】:security issue IIS7.5 / IIS APPPOOL\user not authorized but has full control?安全问题 IIS7.5 / IIS APPPOOL\用户未授权但拥有完全控制权? 【发布时间】:2011-10-06 09:18:36 【问题描述】:

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

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

inetpub\wwwroot inetpub\wwwroot\readyfordownload

IIS APPPOOL\Classic 用户拥有对此“readyfordownload”文件夹的完全访问权限。

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

如果我从网站后面的代码在 C# 类库中运行相同的函数,则会创建相同的 zipfile,并且 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 server ZIP 库是 Dotnetzip (Ionic)

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

【问题讨论】:

您是否检查了您无法访问的文件的权限?我同意 scottm 的观点,该文件很可能没有从父文件夹继承权限。 但是为什么生成的XLSX文件会继承权限而ZIP文件不会呢? 您是如何创建 zip 文件的?你能告诉我们生成它的代码吗? (例如,文件副本不会继承目标文件夹的权限) 查看更新后的帖子。它不是副本。奇怪的是,xlsx 是从模板文件创建的,并且模板文件被复制... 对于收到此错误的其他人,可能值得注意的是,如果目标文件夹中已存在具有完全相同文件名的文件,这也会引发相同/类似的错误 【参考方案1】:

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

【讨论】:

是的,这是我的解决方法,但我不明白为什么 zipfile 不继承它们,但 XLSX 文件却继承了它们。它们是在同一个函数中生成的(xlsx 文件很大,这就是它被压缩的原因) @Pleun,您需要查看您使用的 ZIP 库的内部结构,以了解在创建 .zip 时如何应用 ACL。 mmmhh... 不确定我是否愿意。有了解决方法,它最终会起作用,所以我不会打扰那么多。希望有一些明显的解决方案。我想会在他们的论坛上发帖。谢谢。除非出现一些神奇的解决方案,否则会将您的答案归功于赏金。【参考方案2】:

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

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

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

    正如 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);
        
    

【讨论】:

【参考方案3】:

检查 Windows 事件日志以了解相关错误。详细信息请使用ProcessMonitor,以便您查看权限是否存在问题。

【讨论】:

【参考方案4】:

使用“高级安全设置属性页”配置文件夹的安全性。 (选择属性--> 安全性)。另请注意,应用程序池可以模拟用户,因此应用程序可能不会以应用程序池的身份为请求提供服务。默认情况下,模拟可能不起作用。您必须在 Web 配置中明确设置它。例如。 <identity impersonate="true" /><identity impersonate="true" userName="domain\user" password="password" />

Sriwantha Sri Aravinda

【讨论】:

抱歉,有效点数(全部选中),但这并没有解决 zipfile 和 xlsx 文件之间的区别...

以上是关于安全问题 IIS7.5 / IIS APPPOOL\用户未授权但拥有完全控制权?的主要内容,如果未能解决你的问题,请参考以下文章

确定哪个 w3wp.exe 进程属于 Windows 7 / IIS7.5 中的哪个 App Pool?

如何防止 IIS 7.5 缓存符号链接内容?

(原创)win7自带IIS7.5+php7.0.10安装教程(图)

IIS AppPool 回收时间使用啥时区/格式?

IIS上传大文件

用户 'IIS APPPOOL***' 登录失败