我已经设置了一个2节点的NLB群集,并使用以下命令在它们之间共享IIS配置。
http://blogs.technet.com/b/meamcs/archive/2012/05/30/configuring-iis-7-5-shared-configuration.aspx
IIS 配置和内容通过 UNC 路径位于网络共享上。这有效 - 在一个节点上更新 IIS 设置,在另一个节点上可见,并且我的网站在各个节点和整个集群上都可以运行。
我可以设置一个 FTP 站点并成功连接到我的 Windows 登录。但是,我想使用 IIS 管理器身份验证,定义如下:
我尝试将“网络服务”与 FTP COM 对象以及存在于所有三个主机上的专用用户帐户一起使用,但每次我尝试使用 IIS 用户登录时,都会出现如下信息:
IISWMSVC_AUTHENTICATION_UNABLE_TO_READ_CONFIG
检索身份验证信息时发生意外错误。
异常:System.Runtime.InteropServices.COMException(0x8007052E):文件名:错误:
在 Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.GetAdminSection(字符串 bstrSectionName,字符串 bstrSectionPath)在 Microsoft.Web.Administration.Configuration.GetSectionInternal(ConfigurationSection section,字符串 sectionPath,字符串 locationPath)在 Microsoft.Web.Management.Server.ConfigurationAuthenticationProvider.GetSection(ServerManager serverManager)
进程:dllhost 用户=NT AUTHORITY\NETWORK SERVICE
有人能给我指出正确的方向吗?
答案1
过去一周我们一直在努力解决这个完全相同的问题,并且找到了解决办法。
当 IIS 处于共享配置模式(它可以与本地配置配合使用)时,自定义 IISManager 身份验证提供程序似乎有一些额外的(未记录的)权限要求。
事件日志:应用程序
类型:错误
来源: Microsoft-Windows-IIS-IISManager
类别:
事件:1106
信息:
IISWMSVC_AUTHENTICATION_UNABLE_TO_READ_CONFIG
检索身份验证信息时发生意外错误。
异常:System.Runtime.InteropServices.COMException(0x8007052E):文件名:错误:
在 Microsoft.Web.Administration.Interop.AppHostWritableAdminManager.GetAdminSection(字符串 bstrSectionName,字符串 bstrSectionPath)在 Microsoft.Web.Administration.Configuration.GetSectionInternal(ConfigurationSection section,字符串 sectionPath,字符串 locationPath)在 Microsoft.Web.Management.Server.ConfigurationAuthenticationProvider.GetSection(ServerManager serverManager)
进程:dllhost 进程:dllhost 用户=NT AUTHORITY\NETWORK SERVICE
我可以确认我们收到这个即使我们在各处都应用了“网络服务”权限(即已经引用过的以下命令):
ICACLS "%SystemDrive%\Windows\System32\inetsrv\config" /Grant "Network Service":R /T
ICACLS "%SystemDrive%\Windows\System32\inetsrv\config\administration.config" /Grant "Network Service":R
ICACLS "%SystemDrive%\Windows\System32\inetsrv\config\redirection.config" /Grant "Network Service":R
除了上述文件夹之外,我们还将“网络服务”帐户[完全权限]添加到:
- 共享配置文件夹(和下面的文件)。
- 目标 FTP 文件夹本身。
以上任何一项均不会影响该问题。
问题是这个错误信息与普通的一,如本例中“文件名:”和“错误:”的详细信息均为空白(通常xxx.config如果缺少权限,则会列出文件名)。所以这是另外一回事……
我们还运行了进程监视器,也没有看到任何“访问被拒绝”消息。我的想法是,这可能是 IIS 用户管理进程首次启动并尝试(但失败)读取配置时出现的缓存错误。我们找到了让它工作的方法,但发现缓存行为有些奇怪(见下文)。
当我们更改了 FTP 扩展进程标识到'{域}\管理员',重启机器后它就正常工作了!
注意:IISReset 不起作用 - 这让我相信这里有一些东西被(弹性地)缓存了。
作为进一步的测试,我们:
- 创建了一个新的普通域用户帐户(称为“{域} \FTPService')。
- 将 FTP 进程标识切换到这个新帐户。
- 对配置文件夹应用适当的权限。
- 已重新启动。
然后我们再次收到相同的错误消息(带有空白的用户名/错误)。
最后,当我们将新的“FTPService”用户设为“Domain Admins”的成员并重新启动时(再次,一些缓存阻止了立即修复)有用。
我们还在 Windows 2008 / IIS7(带有 FTP7.5 插件)、Windows 2008 R2 / IIS 7.5、Windows 2012 / IIS8 和 Windows 2012 R2 / IIS8.5 中尝试过此操作,并且在每个系统中都存在相同的问题(和解决方案)。
因此,似乎存在一些错误或“未记录的”权限,需要这些权限才能使用共享配置和网络服务帐户(不授予 FTP 扩展进程管理权限)来实现此功能,自 FTP 7.5 问世以来就一直存在。
虽然这是一种解决方法,但如果能找出需要哪些额外的权限才能使其与网络服务或非域管理员用户帐户一起工作,那就太好了。