【问题标题】:System.UnauthorizedAccessException when executing DirectoryInfo().GetFiles() from W3WP - Why?从 W3WP 执行 DirectoryInfo().GetFiles() 时出现 System.UnauthorizedAccessException - 为什么?
【发布时间】:2018-03-07 18:49:17
【问题描述】:

我正在运行一个 ASP.NET 网络表单,它试图使用 new DirectoryInfo(path).GetFiles(pattern) 获取共享文件夹的内容。应用程序池设置为使用域用户名运行,但在执行时它正在模拟我的用户名。我所在的组对树中的所有文件夹具有完全控制 访问权限,并且完全控制 访问共享。此外,我已授予Everyone ReadRead & ExecuteList folder contents 对文件夹树的访问权限以及 Read &执行对共享的访问。

但是,当执行该语句时,我得到一个 System.UnauthorizedAccessException:'Access to the path '\\server\share\sub1\sub2' is denied.

运行SysInternals的Process Monitor,事件显示:

Desired Access: Read Data/List Directory, Synchronize
Disposition:    Open
Options:        Directory, Synchronous IO Non-Alert, Open For Backup
Attributes:     n/a
ShareMode:      Read, Write Delete
AllocationSize: n/a
Impersonating:  <MyUsername>

在同一台服务器上运行命令窗口,在获取文件夹的目录列表或访问文件夹中的任何文件时没有错误。

我错过了什么?

为什么在 Process Monitor 中查看响应,ACCESS DENIED 操作为 CreateFile

没有给予Everyone完全控制(我认为这没有帮助)我想不出更多的权限来授予。

注意,我也试过Directory.EnumerateFiles(path, pattern),结果相同。

更新:

网站上的认证是Windows AuthenticationASP.NET impersonation;匿名访问被禁用。特定页面不会覆盖它。

【问题讨论】:

  • 你使用女巫认证吗?尝试将IISUSR添加到文件夹中
  • IIS_IUSRS 是服务器级帐户,不能添加到域组。无论如何,我没有使用匿名访问。

标签: c# w3wp unauthorizedaccessexcepti


【解决方案1】:

您似乎遇到了“双跳”问题。

当您向 IIS 服务器进行身份验证时,是第一个“跃点”。
当 IIS 尝试访问 UNC 时,是不允许的第二个跃点。

IIS 不能反过来将您的凭据传递给 UNC。

更多信息请看这篇文章

UNC Path Access Denied error

Double Hop Problem

【讨论】:

  • 好像就是这样。我的解决方法是将调用包装在 using (var wic = WindowsIndentity.Impersonate(IntPtr.Zero) { ... } 中,这使它使用应用程序池帐户。
【解决方案2】:

由于您的权限与在 IIS 中运行您的应用程序的帐户不同,您会得到不同的结果。

检查为您的 IIS 站点运行应用程序池的帐户,并确保该帐户有权访问您尝试访问的 UNC 路径。

【讨论】:

  • 应用程序池中指定的帐户和我被模拟的帐户(System.Environment.Username 返回的值)都可以完全控制共享和所有文件夹(和文件)。跨度>
  • 我已经在原始问题中声明我的帐户可以从服务器访问 UNC,并且已经以应用程序池帐户的身份登录并检查它是否也可以从文件资源管理器访问。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多