我是Windows服务编程的新手。在编写Windows服务时,我对如何设置帐户类型感到困惑。
如何选择或如何确定在编写服务时我们需要设置的帐户类型?
答案 0 :(得分:6)
我们通常会创建特殊窗口(本地仅限本地访问或域帐户,用于需要通过网络进行身份验证的帐户)以运行自定义服务。这样我们就可以限制和锁定权限,以确保它只能访问我们需要的内容。您还可以通过共享服务器上的监控查看哪些特定用户是罪魁祸首或资源占用。
至于内置帐户......
本地系统: 内置的LocalSystem用户帐户具有高级别的访问权限;它是Administrators组的一部分。
网络服务: 内置的网络服务用户帐户对系统的访问权限少于LocalSystem用户帐户,但网络服务用户帐户仍然可以使用计算机帐户的凭据在整个网络中进行交互。
本地服务: 内置的本地服务用户帐户在计算机上的访问权限少于网络服务用户帐户,并且这些用户权限仅限于本地计算机。如果工作进程不需要在运行它的服务器之外进行访问,请使用本地服务用户帐户。 来源(S): Microsoft Technet
答案 1 :(得分:2)
LocalSystem
LocalSystem帐户是服务控制管理器使用的预定义本地帐户。安全子系统无法识别此帐户,因此您无法在调用LookupAccountName函数时指定其名称。
它在本地计算机上拥有广泛的权限,并充当网络上的计算机。它的令牌包括NT AUTHORITY \ SYSTEM和BUILTIN \ Administrators SID;这些帐户可以访问大多数系统对象。所有语言环境中的帐户名称为。\ LocalSystem。也可以使用名称LocalSystem或ComputerName \ LocalSystem。此帐户没有密码。如果在调用CreateService或ChangeServiceConfig函数时指定LocalSystem帐户,则忽略您提供的任何密码信息。
NetworkService
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帐户关联。