news 2026/4/20 16:45:40

10.2.4 服务账户(Service accounts):为什么“服务能不能运行”和“服务该以谁的身份运行”,是两个完全不同层级的问题?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10.2.4 服务账户(Service accounts):为什么“服务能不能运行”和“服务该以谁的身份运行”,是两个完全不同层级的问题?


🔥个人主页:杨利杰YJlio
❄️个人专栏:《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》
《微信助手》 《锤子助手》 《Python》 《Kali Linux》
《那些年未解决的Windows疑难杂症》
🌟让复杂的事情更简单,让重复的工作自动化


文章目录

    • 10.2.4 服务账户(Service accounts):为什么“服务能不能运行”和“服务该以谁的身份运行”,是两个完全不同层级的问题?
      • 1、为什么服务账户问题比普通应用更敏感?
      • 2、三大内置服务账户:Windows 为什么不只给你一个 SYSTEM?
    • 3、本地系统账户(LocalSystem):为什么说它不是“管理员加强版”,而是系统级超强身份?
      • 3.1 它是谁?
      • 3.2 它为什么这么强?
        • 第一,它属于本地 Administrators 组
        • 第二,它可以启用几乎所有特权
        • 第三,它对大量文件和注册表键拥有完全访问
      • 3.3 它用的是哪个用户配置文件?
      • 3.4 它在域环境里还会带上机器身份
      • 3.5 它对网络资源并不是无限制通吃
    • 4、网络服务账户(Network Service):为什么它像“削弱版 SYSTEM,但还保留了网络身份”?
      • 4.1 它存在的目的是什么?
      • 4.2 它比 LocalSystem 弱在哪里?
      • 4.3 它用的是自己的专属 profile
    • 5、本地服务账户(Local Service):为什么它更像“只在本机低权限活动,不代表机器去认证网络”?
      • 5.1 它和 Network Service 的关系是什么?
      • 5.2 它的组成员和 profile 在哪里?
      • 5.3 哪些服务适合它?
    • 6、三者放在一起看,才能真正理解服务账户设计逻辑
    • 7、这一节最值得运维人员记住的实战启发
      • 7.1 服务启动失败,不一定是程序坏了,可能是账户权限不够
      • 7.2 服务权限过高,不一定立刻出故障,但会把风险推高
      • 7.3 服务拿不到当前用户设置,可能不是没权限,而是 profile 不是那个用户的
      • 7.4 网络访问异常,要分清“本机权限”和“网络身份”是两回事
    • 8、我对这一节的理解:服务账户的本质,是 Windows 给后台能力画“权力边界”
    • 9、总结提升

10.2.4 服务账户(Service accounts):为什么“服务能不能运行”和“服务该以谁的身份运行”,是两个完全不同层级的问题?

如果说前面的Service characteristics解决的是:

“这个服务什么时候启动、怎么启动、失败后怎么处理。”

那么Service accounts这一节解决的就是另一个更关键、也更容易被低估的问题:

“这个服务启动以后,到底是以谁的安全身份去访问系统资源?”

《Windows Internals》这里开门见山地指出:服务的安全上下文(security context)对服务开发者和系统管理员都非常重要,因为它直接决定了该进程能够访问哪些资源。书中同时说明,很多内置服务都会运行在合适的服务账户下;而在安装服务时,安装程序或管理员往往会默认指定LocalSystem,这个账户非常强大;另外还有两个能力较弱的内置账户:Network ServiceLocal Service

这句话其实已经点出了服务账户这一节的核心:

服务账户不是“登录名”那么简单,而是服务权限边界、资源可达范围、网络身份和风险暴露面的总开关。

也就是说,一个服务“能不能跑”,和它“跑起来以后能碰到什么资源”,根本不是同一个问题。
很多服务故障、很多服务安全风险,最终都不是出在 EXE 本身,而是出在:

  • 账户太强,导致攻击面过大
  • 账户太弱,导致资源访问失败
  • 本地权限够了,但网络身份不对
  • 能读取系统配置,却拿不到用户配置
  • 能访问本机,却不能正确认证到其他机器

所以这一节真正要建立的认知是:

服务账户决定的,不只是进程归属,而是这个服务在 Windows 安全模型里“能走到哪里”。


1、为什么服务账户问题比普通应用更敏感?

普通交互式应用一般随当前登录用户运行,所以大家天然知道:
“我是谁,我就有什么权限。”

但服务不一样。
服务很多时候是在:

  • 没有用户登录
  • 系统刚启动
  • 后台长期驻留
  • 需要跨机器通信
  • 需要接触系统级对象

的条件下运行。
因此,服务账户本质上是在替系统回答一个问题:

“这个后台能力,到底应该被赋予多大权力?”

书中明确说明,大多数内置服务会运行在适合自己的 Service account 下,而不是一律使用最强账户。原因很简单:如果所有服务都跑在最高权限下,那系统管理虽然方便,但安全面会急剧扩大。

所以,服务账户这一节的底层逻辑,不是“账户分类介绍”,而是:

Windows 在后台服务世界里,如何平衡“功能可用性”和“最小权限原则”。


2、三大内置服务账户:Windows 为什么不只给你一个 SYSTEM?

从 Windows 的设计看,最经典的内置服务账户主要有三个:

  • LocalSystem
  • Network Service
  • Local Service

它们并不是平级替代关系,而是权限、能力和网络行为逐级收缩的三种运行身份。书中也正是围绕这三个账户来展开说明。

可以先用一句话粗略理解:

服务账户本机权限网络身份风险级别
LocalSystem非常强可携带机器身份最高
Network Service较低可用计算机账户做网络认证
Local Service较低基本只可匿名访问网络资源更低

也就是说,Windows 并不是只提供一个“后台运行账号”,而是给出了不同安全强度的运行档位。
你选的不是一个名字,你选的是:

  • 本机权限边界
  • 网络访问方式
  • 配置可见范围
  • 潜在攻击后果

3、本地系统账户(LocalSystem):为什么说它不是“管理员加强版”,而是系统级超强身份?

3.1 它是谁?

书中指出,LocalSystem就是很多核心 Windows 用户态系统组件运行所使用的同一个账户,包括:

  • Session ManagerSmss.exe
  • Windows 子系统进程Csrss.exe
  • 本地安全机构进程Lsass.exe
  • 登录进程Winlogon.exe

这说明一件很重要的事:
LocalSystem 不是某个普通服务专用的便利账户,而是系统核心组件本身就在使用的高权力身份。

所以一旦服务被配置成以 LocalSystem 运行,它获得的就不是“差不多够用的权限”,而是非常接近系统核心进程的能力范围。


3.2 它为什么这么强?

书中对 LocalSystem 的描述非常直白:
从安全角度看,LocalSystem 在本机上的安全能力比任何本地账户或域账户都更强。

它之所以强,主要体现在几个方面:

第一,它属于本地 Administrators 组

这意味着它天然拥有非常高的对象访问能力。书中表 10-9 也显示,LocalSystem 属于Administrators、Everyone、Authenticated Users,并处于System integrity level

第二,它可以启用几乎所有特权

书中指出,LocalSystem 有权启用所有 privilege,甚至包括一些普通本地管理员通常不会被授予的能力,例如创建安全令牌。表 10-10 中列出的权限也远多于其他服务账户。

第三,它对大量文件和注册表键拥有完全访问

即便某些对象没有直接授予它完全控制,运行在 LocalSystem 下的进程还可以通过take-ownership privilege进一步取得访问权。

这三点放在一起,就能解释为什么:

把服务跑在 LocalSystem 下,功能上最省事,但安全上也最危险。


3.3 它用的是哪个用户配置文件?

书中还提到一个很多人容易忽略的点:
运行在 LocalSystem 下的进程使用的是默认用户配置文件HKU\.DEFAULT因此,它们不能直接访问其他真实用户 profile 中存储的配置,除非显式调用LoadUserProfile

这句话对运维和开发都很重要,因为它解释了很多“为什么服务拿不到当前用户设置”的问题。

也就是说,即使 LocalSystem 权限极高,它默认看到的也不是“某个登录用户的 HKCU”,而是自己的系统默认配置上下文。

所以要特别注意:

  • 高权限不等于天然拥有用户级上下文
  • LocalSystem 能碰很多系统对象
  • 但它默认并不活在某个真实登录用户的配置空间里

这也是服务场景和普通用户应用场景非常不一样的地方。


3.4 它在域环境里还会带上机器身份

书中继续指出,当计算机属于 Windows 域时,LocalSystem 还会包含该计算机的 machine SID。这意味着:
运行在 LocalSystem 下的服务,在同一 forest 的其他机器上,可以自动使用这台机器的计算机账户完成身份验证

这其实是一个非常关键的网络语义差异:

  • 你以为它只是“本机最强账户”
  • 但到了网络侧,它还会带着“这台机器”的身份去说话

所以 LocalSystem 的问题不只是“本机太强”,还包括:

它在网络中的行为也不再是普通匿名调用。

这也是为什么企业环境中,服务账户选型经常会影响:

  • 远程共享访问
  • 域内资源认证
  • 跨机器命名管道调用
  • 机器账户授权策略

3.5 它对网络资源并不是无限制通吃

书中也给了一个很有边界感的补充:
除非该机器账户被明确授予某些资源访问权限,否则 LocalSystem 进程访问网络资源时,主要能访问的是那些允许null session的资源。相关共享和命名管道可以通过:

HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

下的NullSessionPipesNullSessionShares来控制。

这说明 LocalSystem 不是“网络随便通行证”,而是:

  • 在本机极强
  • 在网络上可带机器身份
  • 但是否真正能访问远端对象,还取决于对方资源 ACL 和相关配置

4、网络服务账户(Network Service):为什么它像“削弱版 SYSTEM,但还保留了网络身份”?

4.1 它存在的目的是什么?

书中对Network Service的定位非常明确:
它用于那些希望在网络上用计算机账户进行身份验证,但又不需要 LocalSystem 那么强本机能力的服务。

这句话特别值得细想,因为它说明 Network Service 的设计目标非常清晰:

保留“我代表这台机器去和别的机器说话”的能力,但削弱“我在本机上无所不能”的能力。

也就是说,它不是 LocalService 的网络加强版,也不是 LocalSystem 的轻量版,而是一个专门为“需要网络身份、但不该拿太高本机权限”的服务准备的中间档位。


4.2 它比 LocalSystem 弱在哪里?

书中指出,因为 Network Service不属于 Administrators 组,所以默认情况下它能访问的注册表键、文件夹和文件都会比 LocalSystem 少很多;同时,它拥有的 privilege 也更少。比如,一个被攻破的 Network Service 进程,通常无法去加载驱动,也不能任意打开其他进程。

这意味着它的一个核心优势是:

即使服务被利用,攻击者能借它进一步横向或纵向扩展的空间也更有限。

从系统安全设计角度看,这就叫典型的缩小爆炸半径


4.3 它用的是自己的专属 profile

书中还特别给出了一条很实用的信息:
运行在 Network Service 下的进程会使用Network Service 自己的 profile,它的注册表部分加载到:

HKU\S-1-5-20

而相关文件和目录位于:

%SystemRoot%\ServiceProfiles\NetworkService

这一点对理解服务配置、分析服务残留文件、处理 profile 相关故障都很有帮助。


5、本地服务账户(Local Service):为什么它更像“只在本机低权限活动,不代表机器去认证网络”?

5.1 它和 Network Service 的关系是什么?

书中给出的描述非常精炼:
Local Service 与 Network Service 几乎相同,最重要的区别在于,它只能访问允许匿名访问的网络资源。

这句话直接就把两者差异点钉死了:

  • 两者在本机权限层面都比 LocalSystem 弱
  • 两者 privilege 级别相近
  • 真正拉开差距的是网络身份行为

也就是说:

  • Network Service:需要在网络侧代表本机说话
  • Local Service:基本不代表本机说话,更多是本机内低权限运行

5.2 它的组成员和 profile 在哪里?

书中说明,Local Service 与 Network Service 在 group membership 上非常接近,只是它属于Local Service group而不是Network Service group;同时它的 profile 会加载到:

HKU\S-1-5-19

对应目录位于:

%SystemRoot%\ServiceProfiles\LocalService

这也意味着在实际系统中,如果你看到服务读取或写入这些 profile 路径,不要以为是“普通用户 profile”,而要想到它可能是某个服务账户的独立配置空间。


5.3 哪些服务适合它?

书中举的例子包括:

  • Remote Registry Service
  • LmHosts service

前者允许远程访问本地注册表,后者负责 NetBIOS 名称解析。

这类服务的共同点通常是:

  • 需要后台驻留
  • 需要一定系统能力
  • 但没有必要拿到 LocalSystem 那种过大的本机权限
  • 也不需要在网络上以“本机账户”身份去大范围认证

所以 Local Service 的存在,本质上是在告诉你:

不是所有后台基础能力,都需要把自己做成“系统最强权限代理”。


6、三者放在一起看,才能真正理解服务账户设计逻辑

很多人平时会机械记忆:

  • LocalSystem 最强
  • Network Service 次之
  • Local Service 更弱

但真正重要的,不是记结论,而是看出 Windows 的设计思路:

非常高

较低

需要

不需要,只需匿名/本地低权限活动

服务需要运行

需要多大本机权限?

LocalSystem

是否需要在网络上代表本机认证?

Network Service

Local Service

这张图对应的核心思想就是:

服务账户不是按名字选,而是按“本机权限需求”和“网络身份需求”两个维度选。

这也是为什么“默认用 SYSTEM 最省事”虽然短期上看方便,但从长期稳定性和安全性看,往往并不是最优解。


7、这一节最值得运维人员记住的实战启发

7.1 服务启动失败,不一定是程序坏了,可能是账户权限不够

如果服务需要访问某个注册表键、系统目录、命名管道或端口,而当前服务账户拿不到,就会表现成启动超时、初始化失败、功能异常。

7.2 服务权限过高,不一定立刻出故障,但会把风险推高

把本来只需要普通后台能力的服务一股脑跑在 LocalSystem 下,短期问题少,长期风险大。因为一旦该服务被利用,攻击者拿到的就是一个极强落点。

7.3 服务拿不到当前用户设置,可能不是没权限,而是 profile 不是那个用户的

LocalSystem 默认用HKU\.DEFAULT,Network Service 和 Local Service 也各自有独立的 profile。
所以服务访问不到“当前登录用户的 HKCU”并不奇怪,很多时候这是模型设计使然。

7.4 网络访问异常,要分清“本机权限”和“网络身份”是两回事

某服务在本机能读能写,不代表它在网络上就能正确认证;反过来,一个需要代表本机到别处认证的服务,也不一定需要 LocalSystem 那么高的本机权限。
这正是 Local Service 与 Network Service 分离出来的意义。


8、我对这一节的理解:服务账户的本质,是 Windows 给后台能力画“权力边界”

10.2.4 表面上看是在介绍三个账户,实际上真正讲的是一套很成熟的系统治理思想:

  • 给后台服务足够的能力去完成工作
  • 但不要无条件给它最高权限
  • 把“本机能力”和“网络身份”拆开设计
  • 把不同服务放到不同风险档位上运行

这套思路非常符合现代系统安全的基本原则:

能少给就少给,能拆开就拆开,能限制影响面就不要把所有能力绑死在一个超强身份上。

所以,如果要给这一节写一句最适合放在结尾的话,我会这样写:

服务账户的选择,本质上不是“这个服务用哪个账号启动”,而是“这个后台能力应该被允许拥有多大的系统权力和多强的网络身份”。


9、总结提升

这一节最核心的内容,可以压缩成下面几条:

  1. 服务账户决定服务进程能访问哪些资源,因此是服务设计和系统管理中的关键安全变量。
  2. LocalSystem权限极强,属于 Administrators,可启用大量 privilege,默认使用HKU\.DEFAULT,在域环境下还能携带机器身份进行网络认证。
  3. Network Service本机权限明显弱于 LocalSystem,但仍可以在网络上以计算机账户身份进行认证,profile 位于HKU\S-1-5-20%SystemRoot%\ServiceProfiles\NetworkService
  4. Local Service与 Network Service 类似,但网络侧基本只访问允许匿名访问的资源,profile 位于HKU\S-1-5-19%SystemRoot%\ServiceProfiles\LocalService

所以,站在《Windows Internals》这一章的主线上看,10.2.4 真正想让你理解的不是“三个账户的定义”,而是 Windows 如何通过不同服务账户,把后台服务的权限边界做细、做弱、做分层。

下一段如果继续顺着写,最自然的衔接就是10.2.5 以其他账户运行服务(Running services in alternate accounts),因为前面讲的是内置服务账户,后面就顺势进入:那如果内置账户都不合适,服务还能不能跑在别的账号下?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 16:44:36

从零搭建本地数据库环境:MySQL 安装、配置与多端开发实战指南

引言在开发服务类型分类管理系统(如挖机服务、吊机服务的子类维修分类管理)时,本地数据库是不可或缺的测试环境。然而,许多新手开发者常因数据库安装失败、配置错误或连接问题导致开发受阻。本文将以 MySQL 为例,结合 …

作者头像 李华
网站建设 2026/4/20 16:43:33

3步掌握VADER情感分析:从零基础到实战应用的完整指南

3步掌握VADER情感分析:从零基础到实战应用的完整指南 【免费下载链接】vaderSentiment VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned t…

作者头像 李华
网站建设 2026/4/20 16:41:02

Qt5状态栏刷新显示内容

Qt5状态栏刷新显示内容QtWidgets.QApplication.processEvents()def lianxiexe(self):_translate QtCore.QCoreApplication.translateself.statusbar.showMessage(开始初始化工参表距离,预计要几分钟)QtWidgets.QApplication.processEvents()time.sleep(10)self.sta…

作者头像 李华