使用 MDM 命令恢复被删除的 fleetd agent:Fleet 系统管理员实战指南

发布时间:2026/9/19 15:34:21

使用 MDM 命令恢复被删除的 fleetd agent:Fleet 系统管理员实战指南 使用 MDM 命令恢复被删除的 fleetd agentFleet 系统管理员实战指南【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本指南以 Fleet 开源仓库中的系统管理员系列文章《Sysadmin diaries: restoring fleetd》为主体结合仓库内fleetctl、MDM 命令调度与fleetdbase下载服务等源码实现深入讲解当设备上的fleetdagent 文件被删除后如何通过 MDM 命令完成恢复。读完本文你将掌握三种可落地的恢复方案重发配置描述文件、擦除设备、手动发送安装命令理解 macOS 与 Windows 两条恢复路径的完整命令构造与执行细节并能从源码层面搞清楚这些命令在 Fleet 服务端是如何被生成、入队和下发的。背景fleetd是什么为什么它如此重要fleetd是 Fleet 提供的一组 agent 套件用于采集和管理设备信息它由以下组件构成osquery负责以 SQL 方式采集操作系统遥测数据支撑主机详情、策略、漏洞与软件清单等能力OrbitFleet 的 agent 管理进程负责 osquery 的启动、保活与自动更新对应仓库中的 orbit/ 目录Fleet Desktop面向终端用户的桌面小程序提供 My device、自助服务等功能入口fleetd Chrome 扩展用于采集基于 Chrome 的遥测信息。这些工具共同构成了 Fleet 对设备集群的可见性与控制力。一旦fleetd文件被删除设备将不再向 Fleet 上报状态策略检查、漏洞扫描、软件安装等管理动作都会中断安全与合规基线随之出现缺口。在进入恢复方案之前需要先明确一个重要前提只要设备是通过 ADEAutomated Device Enrollment自动设备注册完成注册的即使fleetd被删除Fleet 仍然可以通过 MDM 通道向主机下发远程锁屏remote lock、远程擦除wipe等命令这是下文所有恢复操作能够成立的基础。场景心怀不满的员工删除了fleetd文件设想如下场景某位情绪不佳的员工把设备上的fleetd文件删了个干净。这一破坏性行为会让 IT 团队失去对该设备的纳管能力甚至可能带来安全风险。幸运的是借助正确的 MDM 命令我们可以重新安装fleetdagent让设备回到受管状态。在 Fleet 中向主机下发 MDM 命令的核心入口是fleetctl的子命令体系。从 cmd/fleetctl/fleetctl/mdm.go 可以看到fleetctl mdm命令下共注册了五个子命令run-command向 ApplemacOS、iOS、iPadOS、Windows 和 Android 主机下发自定义 MDM 命令lock锁定主机unlock解锁主机wipe擦除主机上的所有内容clear-passcode清除 iOS、iPadOS、Android 主机的密码。其中run-command正是本场景下的主力工具后面三种恢复方案都会用到它。恢复方案一重发fleetd配置描述文件最直接的思路是重发fleetd配置描述文件。Fleet 提供了“批量重发配置描述文件”batch-resend configuration profile的 REST API 端点见 server/api_endpoints/api_endpoints.yml配合 MDM 管理界面即可轻松完成。从权限模型看重发配置描述文件并不是所有角色都能执行的。在 server/authz/policy.rego 中resend被定义为仅针对 profile、且只能作用于单个主机的动作权限规则 明确允许全局管理员global admins、维护者maintainers、技术人员technicians以及 gitops 角色对全局或所属团队内的主机执行重发。如果你在调用接口或执行命令时收到权限拒绝可以先核对当前账号的角色是否满足这一要求。需要说明的是重发 profile 的核心价值在于让设备重新拉取并应用fleetd安装相关的配置例如 enroll secret、Fleet 服务器地址等适合fleetd只是被部分破坏、但 MDM 通道仍然完好、设备仍处于纳管状态的情形。如果fleetd的核心二进制已被彻底删除则更稳妥的做法是直接采用下面两种方案。恢复方案二擦除设备EACS当设备状态已不可控时可以采取更彻底的擦除设备方案。该操作会执行 Erase All Contents and SettingsEACS即擦除并重置整台笔记本电脑——清空用户数据卷把设备恢复到开箱out-of-box状态。EACS 不需要重装 macOS因此执行速度很快但这是一个相当激进的动作建议仅在确认必要例如设备可能已被篡改、或者重发 profile 已无法生效时使用。在 Fleet 中擦除操作由fleetctl mdm wipe --hostHOST_IDENTIFIER触发底层会调用client.MDMWipeHost见 cmd/fleetctl/fleetctl/mdm.go。服务端随后会生成 Apple 的EraseDevice命令将其入队并通过 APNs 通知主机主机下次上线时即执行擦除见 server/mdm/apple/commander.go 附近的 DeviceWipe 实现。执行后可用fleetctl get host HOST_IDENTIFIER查看擦除进度。恢复方案三手动发送安装命令默认情况下fleetd的安装 profile 只在设备首次注册时下发之后不会再自动重发。因此当fleetd被删除时可以手动向主机发送一条安装命令来重新部署 agent。这条路径需要手工构造 MDM 命令 payload并通过fleetctl mdm run-command下发下面分别给出 macOS 与 Windows 的完整做法。macOSInstallEnterpriseApplication命令对 macOS 主机需要发送 Apple 的InstallEnterpriseApplication命令通过ManifestURL指向fleetd的安装清单。完整的 XML payload 如下!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyCommand/key dict keyManifestURL/key stringhttps://download.fleetdm.com/stable/fleetd-base-manifest.plist/string keyRequestType/key stringInstallEnterpriseApplication/string /dict keyCommandUUID/key stringadc1bc23-abec-4499-b57f-c8755c7ffe3c/string /dict /plist这段 XML 与服务端MDMAppleCommander.InstallEnterpriseApplication生成的结构完全一致它接收manifestURL和uuid两个参数组装出包含ManifestURL、RequestType与CommandUUID的 plist 后入队下发见 server/mdm/apple/commander.go。将上述 XML 保存为本地文件例如restore-fleetd.xml后用以下fleetctl命令发送fleetctl mdm run-command --hostsHOST_IDENTIFIER --payloadpath/to/file.xml从 cmd/fleetctl/fleetctl/mdm.go 的run-command实现可以看到几个关键行为--hosts支持逗号分隔的多个主机每个主机可以用 hostname、UUID 或序列号serial number三种标识中的任意一种指定命令会先去重再逐一解析所有目标主机必须是同一平台要么全是 Apple、要么全是 Windows、要么全是 Android混合平台会直接报错避免 payload 格式不匹配命令执行前会校验主机 MDM 是否已开启ConnectedToFleet未开启的主机会被拒绝提示先用fleetctl get hosts --mdm查看可用主机下发成功后终端会返回一个CommandUUID并提示用下面的命令查询执行结果fleetctl get mdm-command-results --idCOMMAND_UUID命令不会立即生效——主机将在下一次与 Fleet 通信check-in时执行它这与 Apple MDM 的异步模型一致。Windows两步走MSI 安装作业Windows 主机的恢复流程分两步先通过添加Add操作在设备上注册一个 MDM 配置通常用 gitops 或在 Fleet UI 中添加再通过执行Exec操作触发下载与安装。第一步添加Add配置。在 Fleet 中通过 gitops 或 UI 添加如下配置LocURI指向 MSI 的DownloadInstall节点Add CmdIDaddCommandUUID/CmdID Item Target LocURI./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7BA427C0AA-E2D5-40DF-ACE8-0D726A6BE096%7D/DownloadInstall/LocURI /Target /Item /Add其中%7BA427C0AA-E2D5-40DF-ACE8-0D726A6BE096%7D是 URL 编码后的 MSI 产品 GUID{A427C0AA-E2D5-40DF-ACE8-0D726A6BE096}即fleetdWindows 安装包的产品代码。第二步执行Exec命令。保存为 XML 文件后用fleetctl mdm run-command下发Exec CmdIDexecCommandUUID/CmdID Item Target LocURI./Device/Vendor/MSFT/EnterpriseDesktopAppManagement/MSI/%7BA427C0AA-E2D5-40DF-ACE8-0D726A6BE096%7D/DownloadInstall/LocURI /Target Data MsiInstallJob id{A427C0AA-E2D5-40DF-ACE8-0D726A6BE096} Product Version1.0.0.0 Download ContentURLList ContentURLhttps://download.fleetdm.com/stable/fleetd-base.msi/ContentURL /ContentURLList /Download Validation FileHash9F89C57D1B34800480B38BD96186106EB6418A82B137A0D56694BF6FFA4DDF1A/FileHash /Validation Enforcement CommandLine/quiet FLEET_URLREPLACE_WITH_FLEET_URL_HERE FLEET_SECRETREPLACE_WITH_FLEET_SECRET_HERE/CommandLine TimeOut10/TimeOut RetryCount1/RetryCount RetryInterval5/RetryInterval /Enforcement /Product /MsiInstallJob /Data Meta Type xmlnssyncml:metinftext/plain/Type Format xmlnssyncml:metinfxml/Format /Meta /Item /Exec对这段 payload 的参数做一下解读ContentURL指向fleetd-base.msi的官方下载地址FileHash是该 MSI 的 SHA-256 校验值Windows 会在安装前校验文件完整性CommandLine中以/quiet做静默安装并通过FLEET_URL你的 Fleet 服务器地址与FLEET_SECRET设备注册密钥两个属性把设备指向正确的 Fleet 实例——这两处REPLACE_WITH_*占位符必须替换为你自己的实际值否则设备无法完成注册TimeOut10 分钟、RetryCount1 次、RetryInterval5 分钟共同定义了安装作业的超时与重试策略。提示如果你不想手工组装 XML社区里有一个名为 Fleet Agent Installer 的第三方 macOS 小应用可以自动化完成上述 macOS 恢复步骤。它只是社区贡献的辅助工具并非 Fleet 官方发布使用前请自行评估其可信度。从源码看命令的来龙去脉安装命令与 DEP 自动注册的同一套机制你可能已经注意到macOS 恢复用的InstallEnterpriseApplication命令正是 Fleet 在设备首次注册DEP 流程时自动下发的那条命令。在 server/worker/apple_mdm.go 的installFleetd方法中服务端 worker 会调用fleetdbase.GetPKGManifestURL()拿到 manifest 地址然后调用InstallEnterpriseApplication将其入队——这与我们手动构造的 XML 完全同构。fleetd下载元数据从哪来fleetd的安装包与 manifest 统一托管在download.fleetdm.com上相关逻辑位于 pkg/fleetdbase/fleetd_base.go。其中GetPKGManifestURL()返回https://download.fleetdm.com/stable/fleetd-base-manifest.plist正是 macOS 恢复命令中ManifestURL的取值来源fleetd_base.goGetMetadata()会请求https://download.fleetdm.com/stable/meta.json解析出 MSI/PKG 的下载 URL 与 SHA-256 校验值、manifest URL 及版本号fleetd_base.goWindows 恢复命令中的FileHash即对应fleetd_base_msi_sha256开发环境可通过环境变量FLEET_DEV_DOWNLOAD_FLEETDM_URL覆盖默认下载域名便于测试。对应地pkg/fleetdbase/fleetd_base_test.go 中的测试用例验证了在测试与生产环境下GetPKGManifestURL分别返回download-test.fleetdm.com与download.fleetdm.com的完整 URL。理解了这条链路你就明白了恢复命令的本质它复用了 Fleet 在首次注册时安装fleetd的同一套下发机制只是把触发时机从自动改成了手动。因此只要 manifest 地址与产品 GUID 保持稳定它们由 Fleet 的fleetd发布流程维护这条恢复路径就可以长期复用。实验验证与结论在原文档的实验中作者在删除fleetd后执行了上述命令并观察到设备重新上线验证了这些恢复方案的有效性——这正是设备被破坏后仍可通过 MDM 通道自愈这一设计价值的最佳注脚。总结一下三种方案的适用取舍方案操作方式强度适用场景重发配置描述文件UI / 批量重发 profile API温和fleetd配置被破坏但 agent 尚可恢复擦除设备EACSfleetctl mdm wipe激进设备已不可控需要彻底重置手动发送安装命令fleetctl mdm run-command 构造 XML中等最通用的恢复路径macOS 与 Windows 各有标准模板当设备上的fleetd文件被删除时正确使用 MDM 命令可以高效地恢复设备功能并保证安全合规。建议把本文中的 XML 模板与命令流程沉淀到团队的运行手册中并提前在测试设备上演练一遍这样即使下次再遇到心怀不满的员工你也能从容应对。相关延伸阅读设备注册全流程Sysadmin diaries: device enrollment若想深入了解fleetd的自动更新机制可继续阅读 orbit/ 目录下的实现与文档。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/19 15:34:21

图片艺术风格化开题:VGG19与AdaIN技术选型及实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:34:21

Linux动态库依赖故障排查:从libbz2.so.1报错看ABI契约本质

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 16:49:24

核心银行系统架构与存款业务实现:从客户信息到账务核对

简介:一份聚焦银行业核心系统基础知识的完整资料,面向银行新入职员工、核心系统运维与开发人员及金融IT项目人员,帮助快速建立从银行IT系统分类到核心业务系统模块的整体认知。资源为1个DOC文档,大小约1.54MB,内容覆盖…

2026/9/19 16:49:24

UE5摄像机抖动指南:Perlin噪点原理与Sequence实战调优

做游戏的人都知道,镜头是玩家和游戏世界之间的那层玻璃。镜头稍微抖一下,爆炸就有了重量;镜头处理得太平,再猛的场面也像在放幻灯片。UE5里实现摄像机抖动的方式不少,但最常用、最可控的路线,还是Perlin噪点…

2026/9/19 16:49:24

3ds Max到Unity单位与轴心全解析:FBX导出避坑指南

1. 单位制错乱的根源:从 3ds Max 的英寸到 Unity 的米1.1 一个真实案例:模型为何会放大 39.37 倍在 3ds Max 默认安装完后,系统单位是 1 unit 1 inch(英寸)。这是 Max 的历史设定,很多初学者根本不会注意到…

2026/9/19 16:49:24

用Python搭建微博舆情监控系统:从爬虫到可视化全流程

简介:面向专科与本科毕业设计场景的一份原创论文文档《基于Python的微博网络舆情监控系统设计与实现》,以微博网络舆情为研究对象,围绕数据采集、数据清洗、文本特征提取、情感分析和可视化展示构建了完整系统流程,可用于Python课…

2026/9/19 16:49:24

财务共享模式下区块链资金管理:构建可信对账与审计链路

简介:一份聚焦财务共享与区块链技术融合应用的学术文献,面向企业财务管理人员、会计信息化研究者及高校财经专业学生。内容从区块链技术概述切入,系统分析财务共享模式的运行特征,深入探讨两者结合对资金管理流程、内部核算效率与…

2026/9/19 16:44:24

微信小程序接入TDesign:解决NPM packages not found报错全指南

说实话,我第一次在小程序项目里接入 TDesign 时,对着控制台里这行NPM packages not found愣是折腾了一整晚。工具是最新版,npm install也显示装好了,node_modules里明明躺着tdesign-miniprogram的目录,可编译跑起来就是…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/19 0:03:10

验证 OpenSpec 兼容性,Cursor 的 Token 从 TaoToken 出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

书桌角落的 Mac mini,OpenClaw 通过 TaoToken 跑任务。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

oh-my-hermes:打造跨工具的命令编排与插件化工作流

1. 项目概述与设计初衷1.1 它到底是什么先说结论:oh-my-hermes 是一个面向开发者日常终端操作的效率工具套件,核心定位是“把分散在各类命令行工具里的高频操作,统一收拢成一套插件化、可编排的工作流”。项目灵感来源很明显——oh-my-zsh 重…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码