通过 ASP.NET 启动服务需要哪些权限?

Posted

技术标签:

【中文标题】通过 ASP.NET 启动服务需要哪些权限?【英文标题】:What permissions are needed to start a service through ASP.NET? 【发布时间】:2011-05-31 07:57:11 【问题描述】:

我想知道我需要什么权限才能让用户在我们的服务器上启动服务。

情况如下,我们网站上的一些人可以在服务器上启动某个服务(Windows 2008和IIS7)。到目前为止,我使用的方法是指定我用我的用户帐户创建的应用程序池(msdn 的模拟方法由于某种原因不起作用)。但是,现在我想将该用户帐户更改为仅有权启动和停止服务的用户帐户(以及让他这样做所需的一切)。

该网站是用 ASP.NET 和 C# 编写的。我使用 ServiceController 来启动和停止我的服务。

我应该为该用户分配哪些权限?

编辑:我只想在这里澄清一些事情。我设法让这个东西通过应用程序池工作(虽然它不能通过调试器工作)。但它只适用于属于 Administrators 组 的用户,这不是我想要的。我想指定一个特殊用户,该用户能够通过网站启动和停止服务。那么我需要什么特权?请具体。

编辑 2: 我发现了为什么我的服务无法在调试器中启动。我没有以管理员权限运行 Visual Studio。我现在觉得很愚蠢。无论如何,问题仍然存在,因为我仍然需要具有正确权限的 特殊 用户。

任何评论将不胜感激! 亲切的问候, 弗洛里斯·德弗里恩特

【问题讨论】:

***.com/questions/6070295/… @Massimiliano Peluso,这个问题与我在那里提出的问题不同。首先,在那个问题中,关于使用 Impersonate(如您所见从未工作过)或 AppPool 结束。最终做到了。但是这种方式在调试器中仍然行不通。而且我仍然没有得到启动服务所需的权限的答案。您说的是:“您应该创建一个只能启动服务并执行您的网络应用程序的用户,但它不应该进入管理员组”。您在哪里设置这些权限?是在本地安全策略中还是在其他地方? 【参考方案1】:

您必须在 web.config 中将 identity impersonate 设置为 true,如果您使用 Windows 身份验证,则需要在 IIS 中进行设置。如果您在两者之间使用 WCF 服务,则可能需要查看 Impersonation in WCF.

【讨论】:

恐怕你没有理解我的问题。它通过应用程序池工作。我设法设置了那个。但只有当我使用属于管理员组的帐户时。另一个帐户不起作用,因此我需要为该用户提供正确的权限才能启动服务。 如果您希望应用程序池加载用户配置文件,则将“LoadUserProfile”属性设置为“true”。希望这会有所帮助。 它没有帮助,我不需要使用我现在使用的帐户(它是管理员组的一部分)这样做。我只需要让它与不同的用户一起工作。我已将其设置为 AppPool 中的 identity,但它仍然无法正常工作。 原来在 IIS7 中我需要设置另一个设置。在 IIS 管理器用户和 IIS 管理器权限中。【参考方案2】:

(术语抱怨)- 您不应该查看特权,因为它们适用于整个机器。您应该查看权限

here 有一个关于允许远程用户启动和停止服务的答案。您可能需要运行相同的步骤来允许您的网站在特定权限下的帐户,即:

复制 IA 用户对 scmanager 的权限,以允许非交互式用户访问服务控制器,并且 为您的用户添加针对特定服务的适当权限。

这两个操作都使用sc 命令行工具。希望您可以根据自己的具体情况一起婴儿床。比如:

sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CCLCRPRC;;;S-1-5-3-3127463467463)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)

其中S-1-5-3-3127463467463 是网站帐户的 SID,并且:

sc sdset Alerter D:(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPLOCRRC;;;PU)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCLCSWLOCRRCWPRP;;;S-1-5-3-3127463467463)S:(AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)

其中 Alerter 是特定服务的名称,S-1-5-3-3127463467463 又是网站帐户的 SID。

(不确定是否分解这些命令以使它们在 SO 上更具可读性 - 在命令行中运行时它们需要没有换行符)

【讨论】:

我设法完成了第一步并授予它访问服务控制器的权限。但是在第二步中我面临一个问题。首先,我的服务没有 Authenticated Users ACE,其次,当仍在尝试第二步时,我得到“设备尚未准备好”这一行。【参考方案3】:

您必须将服务分层的权利授予您用于应用程序池的用户。

单击开始,指向设置,单击控制面板,然后双击管理工具。 双击服务 在登录选项卡上,单击本地系统帐户,然后单击应用。 在“常规”选项卡上,单击“开始”以重新启动服务。 退出服务工具。

【讨论】:

好吧,我已经这样做了,我的问题是关于启动服务所需的权限。但对于不属于管理员组的用户。我知道当将用户应用到服务时,它会获得“作为服务登录”权限,但这显然不足以解决问题。 您必须授予用户启动服务的权利的唯一方法是上面显示的方法:除非您自己创建,否则没有特殊的组拥有此权利。可能你错过了什么。我可以建议使用默认用户运行应用程序池 - 禁用匿名访问并尝试在此链接中解释的解决方案来模拟用户。您模拟的用户必须与您指定的广告服务级别(登录选项卡)weblogs.asp.net/kaushal/archive/2011/02/28/… 相同 好的,正如我在另一个问题中所解释的那样,我已经尝试过了。您可以看到我何时编辑以及我使用了哪些代码。但因为我想再试一次,我听从了你的建议。但是,仍然存在相同的错误“访问被拒绝”。除了禁用匿名访问之外,我遵循了每一步。这是因为我禁用了它,我收到“HTTP 错误 401.2 - 未经授权的访问”错误。这我不能不改变,不是因为我不想要,而是因为这是由仍在努力的第三方公司制造的。在我剩下的一小段时间里,我唯一关心的就是让这个服务运行起来。 如果我可以让它与 AppPool 一起工作,那么我更喜欢这样。在我的情况下,模仿看起来多么好。显然我做错了什么,但我似乎无法指责它。奇怪的是,我的一个帐户可以启动它,而另一个帐户却不能,而他们几乎拥有相同的权利。我必须深入挖掘或找到其他方法。

以上是关于通过 ASP.NET 启动服务需要哪些权限?的主要内容,如果未能解决你的问题,请参考以下文章

从 ASP.NET 启动进程 - 为啥进程会立即终止?

ASP.NET报错:failed due to the following error: 8000401a.

使用经过身份验证的用户凭据从 asp.net 启动控制台应用程序

在 ASP.NET 上启动维护过程的最佳实践是啥 [关闭]

我在运行Asp.NET web应用程序时.建不了项目.提示说计算机上没有运行web服务器。请先启动web服务器

IIS7下由于权限不足,导致没法读取配置文件,引发的错误