7

我是 Windows 服务编程的新手。在编写 Windows 服务时,我对设置帐户类型的内容感到困惑。

在编写服务时如何选择或确定我们需要设置的帐户类型?

4

2 回答 2

8

我们通常创建特殊的窗口(本地仅用于本地访问或域帐户用于需要通过网络进行身份验证的事物)帐户来运行自定义服务。通过这种方式,我们可以限制和锁定权限,以确保它只能访问我们需要的内容。您还可以通过在共享服务器上进行监控来查看哪些特定用户是罪魁祸首或资源占用。

至于内置帐户...

本地系统:
内置 LocalSystem 用户帐户具有高级别的访问权限;它是管理员组的一部分。
网络服务:
内置网络服务用户帐户在系统上的访问权限少于 LocalSystem 用户帐户,但网络服务用户帐户仍然能够在整个网络中使用计算机帐户的凭据进行交互。
本地服务:
内置本地服务用户帐户在计算机上的访问权限少于网络服务用户帐户,并且这些用户权限仅限于本地计算机。如果工作进程不需要在其运行的服务器之外进行访问,请使用本地服务用户帐户。

来源:Microsoft Technet

于 2009-08-19T16:35:41.027 回答
4

本地系统

LocalSystem 帐户是服务控制管理器使用的预定义本地帐户。安全子系统无法识别此帐户,因此您无法在调用 LookupAccountName 函数时指定其名称。

它在本地计算机上具有广泛的权限,并充当网络上的计算机。它的令牌包括 NT AUTHORITY\SYSTEM 和 BUILTIN\Administrators SID;这些帐户可以访问大多数系统对象。所有语言环境中的帐户名称都是 .\LocalSystem。也可以使用名称、LocalSystem 或 ComputerName\LocalSystem。此帐户没有密码。如果您在调用 CreateService 或 ChangeServiceConfig 函数时指定 LocalSystem 帐户,则您提供的任何密码信息都将被忽略。

网络服务

NetworkService 帐户是服务控制管理器使用的预定义本地帐户。安全子系统无法识别此帐户,因此您无法在调用 LookupAccountName 函数时指定其名称。它在本地计算机上具有最低权限,并充当网络上的计算机。

可以在对 CreateService 和 ChangeServiceConfig 函数的调用中指定此帐户。请注意,此帐户没有密码,因此您在此调用中提供的任何密码信息都将被忽略。虽然安全子系统会本地化此帐户名称,但 SCM 不支持本地化名称。因此,您将从 LookupAccountSid 函数收到此帐户的本地化名称,但是当您调用 CreateService 或 ChangeServiceConfig 时,该帐户的名称必须是 NT AUTHORITY\NetworkService,无论区域设置如何,否则可能会出现意外结果。

在 NetworkService 帐户的上下文中运行的服务将计算机的凭据提供给远程服务器。默认情况下,远程令牌包含 Everyone 和 Authenticated Users 组的 SID。用户 SID 是根据 SECURITY_NETWORK_SERVICE_RID 值创建的。

NetworkService 帐户在 HKEY_USERS 注册表项下有自己的子项。因此,HKEY_CURRENT_USER 注册表项与 NetworkService 帐户相关联。

于 2014-05-27T09:25:31.510 回答