在LocalSystem或LocalService帐户下运行AppPool时,从ASP.NET应用程序重新启动服务器

时间:2011-11-27 01:27:46

标签: c# asp.net security iis

是否可以从LocalSystem或LocalService帐户托管的ASP.NET应用程序重新启动服务器?这在我创建自定义管理帐户并将AppPool放在该帐户下运行时起作用:

Process.Start("shutdown", "/r /d 4:1 /t 10");

但是,我不想拥有自定义帐户(因为密码过期,需要在更改用户密码时更新所有AppPools - 我需要维护多个服务器)。

那么,这可能吗?

2 个答案:

答案 0 :(得分:6)

您始终可以使用可以重新启动服务器的其他标识启动该过程:

var info = new ProcessStartInfo("shutdown.exe", "/r /t 0");
info.UserName = "accountWithAdminPermissions";
//A not-so-secure use of SecureString
var secureString = new SecureString();
var password = "abc123";
foreach (var letter in password)
{
    secureString.AppendChar(letter);
}
info.Password = secureString;
var restart = new Process();
restart.StartInfo = info;
restart.Start();

如果您只想为非管理员帐户授予重新启动服务器的权限:

  1. 打开secpol.msc
  2. 导航到“本地策略\用户权限分配”。
  3. 查找Shutdown The System
  4. 添加帐户。
  5. 这可能是使用帐户获取最低权限的好方法。这样,您就不必像管理员组中的帐户那样使用非常大的锤子。

    Shutdown.exe(我相信)始终需要管理员权限。在没有shutdown.exe的情况下重启服务器时,可以参考this MSDN post

答案 1 :(得分:2)

您可以让您的代码在拨打电话时模拟特定帐户,或使用一个帐户启动网络服务。我推荐网络服务,最糟糕的情况是你更新一个应用程序池。您还可以在内部将Web服务锁定为仅应用程序。

A small C# Class for impersonating a User