ChatGPT解决这个技术问题 Extra ChatGPT

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

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

那么,如何确定“本地系统”和“网络服务”这两个帐户有何不同?这些内置帐户看起来很神秘,似乎没有人知道太多关于它们的信息。


T
Tim Cooper

由于标准服务帐户的功能存在很多混淆,我将尝试快速介绍一下。

首先是实际账户:

LocalService 帐户(首选)与网络服务非常相似的受限服务帐户,旨在运行标准的最低特权服务。但是,与网络服务不同,它以匿名用户身份访问网络。名称:NT AUTHORITY\LocalService 该帐户没有密码(您提供的任何密码信息都将被忽略) HKCU 表示 LocalService 用户帐户在本地计算机上具有最低权限 在网络上提供匿名凭据 SID:S-1-5-19 有其在 HKEY_USERS 注册表项下拥有自己的配置文件 (HKEY_USERS\S-1-5-19)

名称: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

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(也可以使用LocalSystem或ComputerName\LocalSystem) 帐户没有密码(您提供的任何密码信息都将被忽略) SID:S-1-5-18 没有自己的任何配置文件(HKCU 代表默认用户)在本地计算机上具有广泛的权限远程服务器的计算机凭据(例如 MANGO$)

名称:.\LocalSystem(也可以使用 LocalSystem 或 ComputerName\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 you cannot run a scheduled task 中作为

NT_AUTHORITY\LocalService(又名本地服务帐户),或

NT AUTHORITY\NetworkService(又名网络服务帐户)。

该功能仅通过任务 Scheduler 2.0 添加,该任务仅存在于 Windows Vista/Windows Server 2008 和更高版本中。

作为 NetworkService 运行的服务在网络上提供机器凭据。这意味着如果您的计算机被称为 mangoit would present as the machine account MANGO$

https://i.stack.imgur.com/exvfr.png


我认为 Managed Service Accounts 消除了设置帐户和管理密码(或者将其传递给域管理员或委托人)的一些痛苦。
你好,谢谢你的解释。我有一个问题 - 使用本地系统/网络服务帐户是否可以向活动目录中的容器添加/删除条目(前提是活动目录中的容器已授予运行这些 Windows 服务的计算机的完全权限)。请注意,当我作为域用户之一运行该服务时,一切正常,但不是作为本地系统/网络服务(详情stackoverflow.com/questions/20943436/…
是的,它应该。我会直接回答你的问题,因为这个问题比较抽象,而且是一个具体的实现。
请注意,“匿名”用户不仅不是“经过身份验证的用户”的成员,也不是 Windows 上“所有人”的成员。在 Windows 网络上,“匿名”只能访问已明确授予“匿名”的资源 - 默认情况下,没有任何权限。
@HakamFostok 我没有很多参考资料。如果我没记错的话,Dan Brown 在他的《Programming Windows Security》一书中介绍了其中的一些内容。 Windows 帮助和 MSDN 文档中有很多内容,但我没有具体的参考。 Jeff Richter 关于编程窗口的书籍,以及 Soloman & Russinovich 的 Inside Windows(第 3 版或第 4 版)也有一些。

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅