我正在尝试将一个旧的内部网站移到由其自己的服务帐户运行的应用程序池中,以便我可以更细粒度地控制其权限等。
该网站设置为使用 NTLM 身份验证,但它不够大,我没必要费心设置 Kerberos。NTLM 身份验证在旧的默认应用程序池下工作正常,但当我将网站移至新的应用程序池并将身份设置为服务帐户的身份时,任何加载页面的尝试都会导致三个登录提示,然后出现 401.1 错误(基本上就是所描述的这里,但 Kerberos 不应参与任何地方)。
服务帐户属于 IIS_WPG 组。我检查以确保服务帐户和尝试访问网站的用户都有权访问网站的目录,并且确实如此(两者都具有读取/执行、写入、列出内容和修改权限)。我还打开了匿名访问,并能够通过这种方式加载网站(然后我将其关闭以进行进一步测试)。
出于好奇,我尝试将应用程序池重新设置为默认帐户,然后再次尝试,没有更改任何其他设置。这次一切正常——用户顺利地通过了网站正确的身份验证,没有任何问题。当然,这让我有点困惑,因为我没有更改任何其他设置。
默认 IIS 帐户是否具有允许这样做的某些固有权限?我是否需要向服务帐户添加权限,以便它可以使用 Active Directory 对用户进行身份验证?
答案1
该帐户是否是本地 IIS_WPG 组的成员?
IIS IIS_WPG 组帐户具有在 Web 服务器上启动和运行工作进程所需的最低权限和用户特权。应用程序池标识必须是此组的成员,这样应用程序池才能向 Http.sys 注册。下表显示了 IIS_WPG 帐户的默认用户特权以及每个特权的派生方式。
Privilege * Source
Access this computer from the network (SeNetworkLogonRight) * Through membership in the Everyone group
Bypass traverse checking (SeChangeNotifyPrivilege) * Through membership in the Everyone group
Impersonate a client after authentication (SeImpersonatePrivilege) * Explicit assignment
Log on as a batch job (SeBatchLogonRight) * Explicit assignment