问题:当新的IIS应用程序池创建并设置为使用应用程序池标识进行权限时,我不确定如何将这些标识添加到用户组,例如管理员或绩效计数器用户。以编程方式将IIS应用程序池标识“用户”分配给组
背景:我目前正在写它使用Microsoft.Web.Administration为了做以下一个C#.NET库:
- 如果安装了IIS 7.x的检测,如果那么,什么组件。
- 将IIS 7.x安装或升级到所需组件的提供列表。
- 通过IIS创建/管理一个或多个网站。
- 自动创建/管理每个网站一个应用程序池
的背景是,这个库是由可执行安装程序来提供的一个Web服务器和网站/服务的Windows Server操作系统的自动部署作为更大软件部署的一部分。到目前为止,除了需要在应用程序池/网站创建上执行某些权限的自动化之外,以上所有内容都已实现,测试并且(大部分)功能正常。
在我安装一个新的网站方法,我创建了一个新的应用程序池,并迫使它使用的应用程序池标识:
static public void InstallSite(string name, string path, int port)
{
Site site;
var appPoolName = ApplicationPoolBaseName + name;
using (var iisManager = new ServerManager())
{
// Set up a custom application pool for any site we run.
if (!iisManager.ApplicationPools.Any(pool => pool.Name.Equals(appPoolName)))
{
iisManager.ApplicationPools.Add(appPoolName);
iisManager.ApplicationPools[appPoolName].ManagedRuntimeVersion = "v4.0";
}
iisManager.CommitChanges();
}
// ... other code here ('site' gets initialized) ...
using (var iisManager = new ServerManager())
{
// Set anonymous auth appropriately
var config = iisManager.GetWebConfiguration(site.Name);
var auth = config.GetSection("system.web/authentication");
auth.SetMetadata("mode", "Windows");
var authSection = config.GetSection("system.webServer/security/authentication/anonymousAuthentication");
authSection.SetAttributeValue("enabled", true);
authSection.SetAttributeValue("userName", string.Empty); // Forces the use of the Pool's Identity.
authSection = config.GetSection("system.webServer/security/authentication/basicAuthentication");
authSection.SetAttributeValue("enabled", false);
authSection = config.GetSection("system.webServer/security/authentication/digestAuthentication");
authSection.SetAttributeValue("enabled", false);
authSection = config.GetSection("system.webServer/security/authentication/windowsAuthentication");
authSection.SetAttributeValue("enabled", false);
iisManager.CommitChanges();
}
// ... other code here ...
}
据我了解,这将是最佳的安全实践,然后,我会为特定网站添加权限,以获取最少的系统访问权限。这个过程的一部分是将这些应用程序池标识添加到用户组,例如管理员或性能监视器用户。这是复杂性出现的地方。
现在,documented elsewhere,每个应用程序池标识存在的IIS AppPool\\<pool_name>
格式,但这种人造用户不通过正常的GUI用户管理控制上市,似乎并没有被通过库如System.DirectoryServices.AccountManagement
访问以下this example on SO当。此外,有关应用程序池标识的其他问题似乎与referencing it from within a child website有关,而不是来自安装上下文中。
因此,没有人知道什么是正确的方法是
- 一)引用和访问应用程序池标识编程。
- b)通过将应用程序池标识添加到用户组来授予应用程序池标识权限。
为了重现结果,我将尝试更换此解决方案。这看起来很有前途,谢谢分享! – jmsb