“本地系统”帐户和“网络服务”帐户之间的区别?


386

我编写了一个Windows服务,该服务产生了一个单独的进程。此过程将创建一个COM对象。如果该服务在“本地系统”帐户下运行,则一切正常,但是,如果该服务在“网络服务”帐户下运行,则外部进程将启动,但无法创建COM对象。从COM对象创建返回的错误不是标准的COM错误(我认为这是特定于正在创建的COM对象)。

那么,如何确定“本地系统”和“网络服务”这两个帐户之间的区别?这些内置帐户似乎非常神秘,似乎没人对它们了解太多。

Answers:


701

由于对标准服务帐户的功能有太多的困惑,因此我将尝试快速介绍一下。

首先是实际账目:

  • LocalService帐户(首选)

    受限服务帐户,与网络服务非常相似,用于运行标准的最低特权服务。但是,与网络服务不同,它以匿名用户身份访问网络。

    • 名称: NT AUTHORITY\LocalService
    • 该帐户没有密码(您提供的任何密码信息都会被忽略)
    • HKCU代表LocalService用户帐户
    • 在本地计算机上具有最小权限
    • 在网络上显示匿名凭证
    • SID:S-1-5-19
    • HKEY_USERS注册表项(HKEY_USERS\S-1-5-19)下有自己的配置文件

     

  • NetworkService帐户

    旨在运行标准特权服务的受限服务帐户。与本地系统(甚至是管理员)相比,此帐户的限制要远得多,但仍具有作为计算机访问网络的权利(请参见上面的注意事项)。

    • NT AUTHORITY\NetworkService
    • 该帐户没有密码(您提供的任何密码信息都会被忽略)
    • HKCU代表NetworkService用户帐户
    • 在本地计算机上具有最小权限
    • MANGO$远程服务器显示计算机的凭据(例如)
    • SID:S-1-5-20
    • HKEY_USERS注册表项(HKEY_USERS\S-1-5-20)下有自己的配置文件
    • 如果尝试使用任务计划任务,请进入NETWORK SERVICE选择用户或组”对话框

     

  • LocalSystem帐户 (危险,请勿使用!)

    完全受信任的帐户,而不是管理员帐户。此帐户无法在一个盒子上做任何事情,并且它有权像计算机一样访问网络(这需要Active Directory并向计算机帐户授予某些权限)

    • 名称:(.\LocalSystem也可以使用LocalSystemComputerName\LocalSystem
    • 该帐户没有密码(您提供的任何密码信息都会被忽略)
    • SID:S-1-5-18
    • 没有自己的个人资料(HKCU代表默认用户)
    • 在本地计算机上拥有广泛的特权
    • MANGO$远程服务器显示计算机的凭据(例如)

     

以上在谈论访问网络时,仅指SPNEGO(协商),NTLM和Kerberos,而不涉及任何其他身份验证机制。例如,正在运行的处理LocalService仍可以访问Internet。

作为标准的开箱即用帐户运行的普遍问题是,如果您修改了任何默认权限,那么您正在扩展该帐户可以运行的所有功能。因此,如果将DBO授予数据库,则不仅本地服务或网络服务运行的服务可以访问该数据库,其他所有以这些帐户运行的服务也可以访问该数据库。如果每个开发人员都这样做,则计算机将具有一个服务帐户,该帐户实际上具有执行任何操作的权限(更具体地说,是授予该帐户的所有其他不同特权的超集)。

从安全性的角度来看,始终最好以自己的服务帐户运行,该帐户具有执行服务所需要的权限,而无其他操作。但是,这种方法的成本是设置服务帐户和管理密码。这是每个应用程序都需要管理的平衡行为。

在您的特定情况下,您可能会看到的问题是DCOM或COM +激活仅限于给定的一组帐户。在Windows XP SP2,Windows Server 2003及更高版本中,激活权限受到了严重限制。您应该使用组件服务MMC管理单元检查您的特定COM对象并查看激活权限。如果您不以机器帐户的身份访问网络上的任何内容,则应认真考虑使用本地服务(不是本地系统,基本上是操作系统)。


在Windows Server 2003中,不能将计划的任务运行

  • NT_AUTHORITY\LocalService (又称本地服务帐户),或
  • NT AUTHORITY\NetworkService (又称网络服务帐户)。

该功能仅在Task Scheduler 2.0中添加,仅在Windows Vista / Windows Server 2008和更高版本中存在。

运行为的服务会NetworkService在网络上显示计算机凭据。这意味着,如果您的计算机被调用mango它将作为计算机帐户显示 MANGO$

在此处输入图片说明


7
我认为托管服务帐户消除了设置帐户和管理密码(或将其传递给域管理员或委托的
Carl G

1
嗨,谢谢您的解释。不过,我有一个问题-使用本地系统/网络服务帐户是否可以向活动目录中的容器添加/删除条目(前提是活动目录中的容器已授予运行Windows服务的计算机的完全权限)。请注意,当我作为域用户之一而不是本地系统/网络服务运行该服务时,一切都正常(有关详细信息stackoverflow.com/questions/20943436/…)问候
Dreamer 2014年

1
是的,应该。我将直接回答您的问题,因为该问题更为抽象,这是一个特定的实现。
Peter Oehlert 2014年

7
请注意,“匿名”用户不仅是“经过身份验证的用户”的成员,而且不是Windows上“所有人”的成员。在Windows网络上,“匿名”只能访问已明确授予“匿名”的资源-默认情况下,没有任何权限。
大卫

1
@HakamFostok我没有很多参考。如果我没记错的话,Dan Brown在他的《 Programming Windows Security》一书中做了一些介绍。Windows帮助和MSDN文档中有很多内容,但是我没有具体的参考。Jeff Richter关于编程窗口的书以及Soloman&Russinovich撰写的Inside Windows(第三版或第四版)也有一些。
Peter Oehlert
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.