我遇到了一个问题,当我尝试从在 IIS 中运行的 Web 应用程序通过另一台计算机上的 UNC 访问文件夹时,收到拒绝访问错误。现在我确信您和我一样认为这肯定只是一个权限问题,然而发生了以下情况:
- 该应用程序正在使用模拟,并且其模拟的用户对该文件夹具有完全访问权限。
- 该文件夹的权限已设置为允许所有人完全控制,如果模拟不起作用,则会出现同样的问题。
- 该应用程序可以非常顺利地查看此共享中的其他文件夹和文件
Procmon 在访问此文件时显示访问被拒绝错误,其询问的详细信息如下:
Operation: Create File
Result: ACCESS DENIED
Desired Access: Generic Read
Disposition: Open
Options: Synchronous IO Non-Alert
Attributes: N
ShareMode: Read, Write, Delete
AllocationSize: n/a
Impersonating: domain\user
该应用程序本质上只是尝试从该文件夹中读取内容,仅此而已(创建文件操作实际上只是创建该文件的句柄)。
文件服务器的安全日志中没有表明访问被拒绝错误的事件。
编辑
已为 UNC 访问设置了委派(允许应用程序池用户委派给文件服务器上的 HOST 和 CIFS 服务),使用 Deleconfig 确认这应该有效,但实际上却不行。但是,仅将应用程序池用户设置为允许委派给任何服务(Kerberos)才有效。据我所知,委派文件服务器访问所需的唯一服务是 HOSTS 和 CIFS,因此我不确定它需要访问哪些额外的服务。
答案1
这是来自远程机器上运行的 procmon 吗?
如果是这样,则表明模拟成功(因为它识别了正确的域\用户,对吗?),所以这不是 Windows 身份验证的委派问题。
如果没有,则可能是 Windows 身份验证的委派问题;请尝试 DelegConfig。
如果应用程序使用 \server\share 创建自己的连接 - 即它不是 IIS 中映射到该位置的文件夹 - 那么根据应用程序框架和编程方式可能会出现进一步的细微差别。
答案2
不记得 IIS 是否允许 UNC 访问规范?
可能需要将该区域分配给驱动器号以供 IIS 访问。