如何从网站重新启动应用程序池,而无需将应用程序池标识设置为本地系统?

Mr *_*ubs 4 .net iis-7 application-pool .net-3.5 applicationpoolidentity

我在 .Net 中有一个应用程序,它为其他应用程序执行各种管理/配置。我需要能够停止和启动应用程序池。我已经实现了这一点,但前提是我将应用程序池作为本地系统运行(这通常被认为是一个坏主意)。

最初,我使用 Process.Start (使用适当的 ProcessStartInfo 对象)启动了 appcmd.exe,但这最终导致我的退出代码为 -1073741502,进一步的研究表明我需要使用 Windows SDK 进行调试,因为它与程序集未加载,因此我在命名空间中找到了一个似乎更简单的解决方案Microsoft.Web.Administration

我使用下面的代码,但它似乎要求运行它的 AppPool 具有本地系统的身份(否则我得到System.UnauthorizedAccessException) - 有没有一种方法可以使用权限较低的帐户启动/停止(我更喜欢使用应用程序身份) - 虽然暂时提升权限也是可以的。

    Dim serverManager As New ServerManager()
    Dim applicationPoolCollection As ApplicationPoolCollection = serverManager.ApplicationPools

    For Each applicationPool As ApplicationPool In applicationPoolCollection

        If applicationPool.Name = appPoolName Then
            applicationPool.Stop()
            applicationPool.Start()
        End If

    Next
Run Code Online (Sandbox Code Playgroud)

我已将自定义帐户设置为身份,但我无法确定该用户的最小 ACL 需要是多少。作为测试,我将用户添加到本地管理员组,但仍然得到System.UnauthorizedAccessException- 这表明我需要为用户配置特定权限,但我不确定这是什么或如何做到这一点。有人可以帮忙吗?

问题也在这里解释

Car*_*res 5

唯一的方法是,用于运行代码的帐户(使用 Microsoft.Web.Administration)具有在 IIS 中执行“运行时操作”的正确权限,并且默认情况下仅包括管理员和系统,并且正如您正确指出的那样,从网络上公开该级别的权限是一个坏主意。

\n\n

您可能应该做的是创建一个应用程序池或其他某种方式以高权限运行,但只能在本地访问(例如使用 IP 和域限制),并且使用额外级别的授权检查(例如例如仅允许从应用程序调用),并且被限制为运行尽可能少的代码和所需的最小表面,例如仅回收属于用户的池等。这样,如果您的 Web 应用程序受到损害,损害将受到更多限制。

\n\n

现在,对于好奇的\xe2\x80\xa6,以下内容是“不受支持的”,因此请不要使用\xe2\x80\x99,但仅提供它以供参考。
\n我们在ServerManager中用于读取配置的 API 称为AHADMIN,您可以 \xe2\x80\x9chack 足以读取配置\xe2\x80\x9d,例如,如果您 ACL 如下:

\n\n
Cd C:\\Windows\\System32\\inetsrv\\config  \nicacls . /grant yourUser:(R)  \nicacls redirection.config /grant yourUser:(R)  \nicacls applicationHost.config /grant yourUser:(R)  \n
Run Code Online (Sandbox Code Playgroud)\n\n

从那时起,您将能够与该用户一起读取配置。请注意,此时加密的属性仍将无法读取,因为加密密钥也受到单独保护,并且您可能永远不应该更改那里的 ACL,但其他所有内容都将可读(除了运行时属性,如状态等)。您不应该允许对非特权帐户进行写访问,因为这很容易允许特权提升(例如,他们可以创建一个以 SYSTEM 身份运行的应用程序池,并将其链接到随机目录,现在他们可以在其中以 SYSTEM 身份运行代码)。

\n\n

现在,回到运行时状态,为此我们使用一个称为RSCA(运行时状态和控制 API)的 API,它本身也受到保护,只能以系统或管理员身份运行,尽管您可能会找到一种方法破解它,改变它也是一个坏主意。但长话短说,这不受支持,您可能很容易导致系统出现问题。

\n