《Windows Internals》10.2.11 学习笔记:虚拟服务账户(The Virtual Service Account)——为什么 Windows 服务不再只依赖普通账号?

news2026/5/10 1:46:34
个人主页杨利杰YJlio❄️个人专栏《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》《微信助手》 《锤子助手》 《Python》 《Kali Linux》《那些年未解决的Windows疑难杂症》让复杂的事情更简单让重复的工作自动化文章目录《Windows Internals》10.2.11 学习笔记虚拟服务账户The Virtual Service Account——为什么 Windows 服务不再只依赖普通账号1. 为什么这一节对桌面支持特别重要2. 什么是虚拟服务账户2.1 它和普通账号有什么不同2.2 它的核心特点3. 为什么要使用虚拟服务账户3.1 它解决了什么问题方式一使用 LocalSystem方式二使用普通本地/域账户3.2 为什么它更适合企业环境① 更符合最小权限原则② 更容易做服务隔离③ 更利于 ACL 精准授权④ 更利于审计与排查3.3 一个非常实用的理解方式4. 它到底是怎么工作的4.1 工作链路总览4.2 第一步SCM 读取服务配置4.3 第二步以虚拟服务身份运行4.4 第三步系统生成 Service SID 与访问令牌4.5 第四步加载配置文件与上下文4.6 第五步通过 ACL 访问资源5. 桌面支持该怎么排查虚拟服务账户相关问题5.1 典型故障现象5.2 标准排查思路第一步确认服务名第二步查看服务运行账户第三步检查 Service SID第四步核对资源 ACL第五步验证服务与进程映射关系5.3 我在现场的经验总结6. 实战使用流程从配置到授权该怎么理解6.1 一个典型流程① 配置服务以虚拟服务账户运行② 启动服务让系统生成专属身份③ 为资源做 ACL 授权④ 必要时为注册表授权⑤ 验证访问是否恢复正常6.2 这个流程背后的本质7. 常见误区与注意事项7.1 误区一把虚拟服务账户当成普通用户7.2 误区二觉得看见 NT SERVICE\xxx 就等于权限足够7.3 误区三遇到问题就切回 LocalSystem7.4 误区四只看服务状态不看安全上下文7.5 运维上的注意事项8. 总结提升学会虚拟服务账户你的服务排障会进入下一个层级8.1 第一层看问题不再只看“服务有没有启动”8.2 第二层你会更理解“最小权限”不是口号8.3 第三层你会写出更有价值的排障结论8.4 本文重点回顾《Windows Internals》10.2.11 学习笔记虚拟服务账户The Virtual Service Account——为什么 Windows 服务不再只依赖普通账号在 Windows 服务体系里很多人一开始只知道LocalSystem、LocalService、NetworkService这几类经典服务账户。但当我继续深入读《Windows Internals》第 10 章时会发现一个非常值得桌面支持、系统运维、排障人员重点掌握的知识点虚拟服务账户Virtual Service Account。这篇文章我会结合书中 10.2.11 的内容用更通俗的方式把这个知识点讲清楚让你真正理解什么是虚拟服务账户它和普通账户、内置服务账户到底有什么区别为什么它是“最小权限 服务隔离”的关键实现方式在桌面支持/企业运维场景中应该如何排查相关问题如何把这个知识转化成你平时能直接用上的排障能力1. 为什么这一节对桌面支持特别重要很多桌面支持同学在处理服务故障时往往只会看两个点服务有没有启动服务启动类型对不对但实际工作里真正难处理的问题往往不是“服务起不来”而是服务明明在运行却访问不了某个目录服务能读注册表不能写注册表某些资源在手工登录用户下能访问换成服务运行就不行服务迁移、加固或权限收缩后开始莫名报错这类问题的根子很多时候就出在你没有真正弄清楚这个服务是“以什么身份”在访问系统资源。而虚拟服务账户就是 Windows 为了实现更细粒度的服务隔离而设计出来的一种机制。一句话理解虚拟服务账户不是给“人”登录用的而是给“服务”专门准备的运行身份。这就是它和普通用户账户最本质的差别。2. 什么是虚拟服务账户先看这张图更容易建立整体印象从定义上看虚拟服务账户The virtual service account可以理解为它是 Windows 为某个服务动态提供的专属身份常见表示形式为NT SERVICE\服务名它不需要你手动创建本地用户它没有传统意义上的人工管理密码它通常配合Service SID一起使用实现服务级别的资源授权与隔离比如一个服务叫WaaSMedicSvc那么它可能对应的服务身份就是NT SERVICE\WaaSMedicSvc这不是一个给人交互登录的账号而是服务运行时的安全主体。2.1 它和普通账号有什么不同很多人第一次看到NT SERVICE\xxx会误以为它就是一个特殊用户名。但实际上它更像是“服务在安全模型中的身份证”。你可以把它理解成普通用户账户给人登录、使用桌面、运行程序内置服务账户给很多系统服务共用虚拟服务账户给某一个服务单独使用的专属身份2.2 它的核心特点虚拟服务账户通常具备以下几个特征不需要人工维护密码不能用于交互式登录每个服务都有自己的独立身份边界更适合做最小权限授权更容易做 ACL 精准控制有利于服务隔离与安全加固这也是为什么现代 Windows 越来越强调“按服务粒度进行隔离”而不是让一堆服务共享一个大权限账户。3. 为什么要使用虚拟服务账户先看这张总结图这一节其实可以归纳成四个字更小、更清晰、更安全、更易管。3.1 它解决了什么问题在更早期或者不够规范的部署里服务常见的运行身份有两种直接使用LocalSystem使用一个手工创建的本地用户 / 域用户这两种方式都各有问题方式一使用 LocalSystem优点是“方便”但问题也很明显权限通常过大一旦被滥用风险很高不利于最小权限原则不利于故障隔离方式二使用普通本地/域账户表面上更灵活但会带来新的维护成本需要创建和维护账户需要管理密码可能遇到密码过期、密码不同步账户被误改、禁用、删除后会引发服务故障而虚拟服务账户刚好卡在一个很好的平衡点上既不像 LocalSystem 那样“权限过大”也不像普通账户那样“维护成本高”。3.2 为什么它更适合企业环境对于企业桌面支持、系统运维来说虚拟服务账户的价值很大① 更符合最小权限原则服务只拿它真正需要的权限而不是一把抓。② 更容易做服务隔离每个服务拥有自己的身份边界不容易出现“一个服务出事牵连一大片”的问题。③ 更利于 ACL 精准授权你可以把文件夹、注册表项、命名对象等资源明确授权给某个服务身份。④ 更利于审计与排查日志里能更明确看出是谁在访问资源是哪个服务而不是一堆模糊的“系统账户”。3.3 一个非常实用的理解方式你可以这样记忆LocalSystem系统级“大权限”NetworkService / LocalService通用型低权限服务身份Virtual Service Account服务专属低权限身份这就是为什么在安全加固和服务治理里虚拟服务账户越来越像一种“最佳实践”。4. 它到底是怎么工作的这一节是整篇文章最关键的部分。建议你先看图再看下面的拆解。4.1 工作链路总览可以先用一个 mermaid 流程图快速梳理逻辑SCM 读取服务配置服务启动服务以 NT SERVICE\\服务名 运行系统生成 Service SID 与访问令牌加载服务配置文件上下文访问文件/注册表/命名对象由 ACL 决定是否允许访问这条链路里最关键的是三个概念服务身份Service SIDACL 授权4.2 第一步SCM 读取服务配置服务启动时SCMService Control Manager会先读取服务配置。也就是说Windows 要先知道这个服务叫什么名字它的二进制路径是什么它使用什么启动类型它以什么账户身份运行所以服务启动不是“点一下就跑”而是先经过 SCM 这套服务管理逻辑。4.3 第二步以虚拟服务身份运行当服务配置为虚拟服务账户时它运行时的身份会类似NT SERVICE\MyService注意这里有一个非常容易混淆的点它不是你在“本地用户和组”里手工创建的普通用户。它是一个由系统在服务运行语境下提供的专属安全身份。4.4 第三步系统生成 Service SID 与访问令牌这是最核心的部分。服务一旦运行Windows 会基于服务名称为它生成唯一的Service SID对应的访问令牌Token这个 Token 里会带上与该服务相关的安全信息比如SID所属组特权信息默认 DACL完整性级别所以服务访问资源时本质上不是“名字在访问资源”而是服务进程拿着自己的 Token 去参与 Windows 安全检查。4.5 第四步加载配置文件与上下文很多人只注意到“服务身份”却忽略了另一个关键点虚拟服务账户通常还会关联自己的配置环境。比如系统会在类似路径下为服务准备专属配置目录%SystemRoot%\ServiceProfiles\ServiceName这意味着配置更独立与普通用户配置分离更利于服务隔离更方便后续排障4.6 第五步通过 ACL 访问资源当服务要访问文件、目录、注册表、命名管道等资源时最终都会落到 Windows 的访问控制模型里服务拿 Token 发起访问资源有自己的 ACL系统检查 ACL 是否允许该服务 SID 访问如果允许就能访问。如果不允许就会失败。所以你在现场遇到的很多问题本质就是不是服务“坏了”而是服务“没有被授权”。5. 桌面支持该怎么排查虚拟服务账户相关问题这一节非常贴近实战。建议你认真掌握因为这部分最容易直接转化成工作能力。先看图5.1 典型故障现象你在现场可能会遇到这些场景服务运行正常但无法写入某个目录服务无法访问某个注册表键应用启动后后台服务报权限错误改完安全基线后服务开始异常用户说“我手动运行程序没问题但作为服务运行就报错”遇到这些现象时建议不要只盯着“服务状态”而要从身份 ACL的角度入手。5.2 标准排查思路第一步确认服务名先确认到底是哪个服务出了问题可以用services.msc事件查看器应用日志厂商错误日志第二步查看服务运行账户使用下面命令查看服务配置scqc WaaSMedicSvc重点看这一行SERVICE_START_NAME如果结果是NT SERVICE\WaaSMedicSvc那就说明它使用的是虚拟服务账户。第三步检查 Service SID继续查看服务对应的 SIDscshowsid WaaSMedicSvc你会得到类似这样的输出SERVICE SIDTYPE: UNRESTRICTED SERVICE SID : S-1-5-80-......这个 SID 很重要因为资源授权最终看的是 SID不是只看服务显示名。第四步核对资源 ACL如果服务访问的是某个目录就检查该目录权限如果访问的是某个注册表项就检查对应注册表 ACL。例如检查目录权限时你要确认 ACL 中有没有授予该服务身份或对应 SID 必要权限。第五步验证服务与进程映射关系有时候你还需要确认该服务是否在独立进程里是否在某个 svchost 实例里当前进程到底挂载了哪些服务可以使用tasklist/svc|findstr/i WaaSMedicSvc或者使用Process Explorer进一步查看。5.3 我在现场的经验总结如果你在企业桌面支持里遇到“服务权限类问题”最实用的思路不是一上来重装软件而是先回答这三个问题这个服务以什么身份运行它访问的资源 ACL 有没有允许它问题出在服务配置、资源权限还是安全策略变更只要这三件事理清楚大多数虚拟服务账户相关问题都能快速定位。6. 实战使用流程从配置到授权该怎么理解下面这张图更偏“落地操作流程”6.1 一个典型流程如果我要把一个服务按“虚拟服务账户”方式来管理可以按下面理解① 配置服务以虚拟服务账户运行服务运行身份格式通常是NT SERVICE\MyService② 启动服务让系统生成专属身份一旦服务启动系统就会为它生成对应的 Service SID对应的访问 Token对应的配置上下文③ 为资源做 ACL 授权比如某个目录需要被服务访问可以通过 ACL 授权给该服务身份。示意命令如下icacls D:\MyServiceData/grantNT SERVICE\MyService:(OI)(CI)M说明(OI)(CI)M表示对象继承、容器继承、修改权限。实际生产环境中请根据需要控制权限避免过度授权。④ 必要时为注册表授权某些服务并不主要操作文件而是操作注册表配置。这时排查重点就要转移到注册表 ACL 上。⑤ 验证访问是否恢复正常最后看服务是否还能正常启动目标资源是否可访问日志中错误是否消失事件查看器是否还有权限报错6.2 这个流程背后的本质你要记住虚拟服务账户的价值不只是“换了个账户名”而是它让服务真正成为一个可被单独授权、单独隔离、单独审计的安全主体。这才是它最值钱的地方。7. 常见误区与注意事项这一节我专门列出来因为很多人初学时最容易踩坑。7.1 误区一把虚拟服务账户当成普通用户这是最常见的误解。错误理解它是一个“看不见的普通账号”正确理解它是服务运行时使用的专属安全身份它不是给人交互登录用的7.2 误区二觉得看见NT SERVICE\xxx就等于权限足够不是的。就算服务以NT SERVICE\xxx运行如果目标资源 ACL 没有允许它访问照样会失败。运行身份存在不等于访问权限自动具备。7.3 误区三遇到问题就切回 LocalSystem很多人为了“先让业务恢复”会把服务直接切回 LocalSystem。这在临时恢复时也许有用但从长期看并不推荐因为权限过大安全边界变差不利于后续治理容易掩盖真实根因我的建议是临时恢复可以作为应急验证思路根因修复还是要回到正确的身份与 ACL 授权模型上7.4 误区四只看服务状态不看安全上下文服务“正在运行”不代表它的逻辑一定正常。很多故障点都在于进程在服务状态正常但实际业务动作失败这类情况往往就是安全上下文或资源授权出了问题。7.5 运维上的注意事项如果你后面要把这个知识点沉淀成团队 SOP我建议至少加入下面几条记录服务名记录服务运行账户记录 Service SID记录受影响资源路径记录 ACL 现状记录修复前后验证结果这样以后碰到类似问题团队排查效率会高很多。8. 总结提升学会虚拟服务账户你的服务排障会进入下一个层级《Windows Internals》10.2.11 这一节看似只是讲一个“账户类型”但我读下来最大的感受是它实际上是在教我们Windows 服务不是简单的后台 EXE而是一个真正参与系统安全模型的主体。如果你是桌面支持、系统运维、Windows 排障方向的同学掌握这一节至少会带来三层提升8.1 第一层看问题不再只看“服务有没有启动”你会开始关注服务的运行身份它的 Service SID它访问资源时的 ACL 结果这会让你的排障视角更底层。8.2 第二层你会更理解“最小权限”不是口号以前很多人谈最小权限只停留在概念层。但学完虚拟服务账户后你会知道最小权限可以具体落到“每个服务用独立身份访问独立资源”这件事上。8.3 第三层你会写出更有价值的排障结论以后再遇到问题你就不只是说服务异常权限有问题而是可以更专业地描述成该服务以虚拟服务账户运行服务对应的 Service SID 未被目标目录 ACL 授权导致服务虽能启动但无法访问业务资源修复方式为补齐 ACL并保持最小必要权限这样的结论才真正体现专业度。8.4 本文重点回顾最后帮大家再快速回顾一次虚拟服务账户 服务专属运行身份常见格式NT SERVICE\服务名它的目标是更低权限、更强隔离、更易管理它依赖Service SID Token ACL桌面支持最重要的排查点服务名 → 运行账户 → Service SID → 资源 ACL → 验证结果如果你后面继续学习《Windows Internals》第 10 章那么这一节会是后续理解这些内容的一个关键基础服务隔离Session 0 隔离SCM服务启动流程服务登录共享服务进程Svchost 拆分用户服务因为这些知识点本质上都围绕同一个核心问题Windows 到底是如何把“服务”组织成可控、可隔离、可恢复、可治理的一套系统机制。 返回顶部点击回到顶部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…