用 Fleet 配置 macOS 26.4 Managed Migration Assistant:让 Mac 换机迁移成为受管且可审计的策略

发布时间:2026/9/20 13:43:12
用 Fleet 配置 macOS 26.4 Managed Migration Assistant:让 Mac 换机迁移成为受管且可审计的策略 后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载更换一台 Mac最难的不是买新机而是如何把用户的数据搬到新机器上——过去这要么被 IT 一刀切禁止要么完全交给用户在迁移界面里自行勾选。macOS 26.4 引入的Managed Migration Assistant受管迁移助手改变了这一局面它让 MDM 在 ADE 自动注册Automated Device Enrollment过程中用一份声明式配置declaration精确指定用户的 Home 目录里哪些内容随迁移传往新机。Fleet 完整支持其所需的await_device_configured键能在 Setup Assistant 的正确时机下发配置并通过声明式状态通道declarative status channel在迁移期间和迁移结束后提供全程可见性。读完本文你将掌握在 Fleet 中通过 GitOps 与 Fleet UI 两种方式配置 Managed Migration Assistant 的完整方法、路径作用域与排除规则、以及标准用户认证的解决方案。为什么受管迁移能让 Fleet 的 MDM 保持正常Migration Assistant传统迁移助手对受管 Mac 一直有一个隐藏风险当用户按标准流程迁移并保留Other Files Folders选项时macOS 会把旧 Mac 的 MDM 注册状态一并复制到新机器上。结果是新 Mac 带着旧设备的配置描述文件和一个没有有效身份的陈旧注册stale enrollment。此时 fleetd 仍在正常签到、osquery 也在工作主机看起来一切正常但 MDM 已经坏了命令挂起或落到错误的设备上。Managed Migration Assistant 恰好补上了这个缺口。传输的内容由你部署的声明declaration界定用户数据加上你选择包含的若干设置详见下文传输什么、不传输什么。这些数据落到 Setup Assistant 期间创建的账户中。旧 Mac 的管理状态则留在原地新 Mac 保留自己独立的 ADE 注册Fleet 的 MDM 身份不被破坏。部署下文描述的描述文件后用户可以把数据带过来既不会弄坏 fleetd 或 MDM也不必依赖任何人记得取消勾选某个选项框。前置要求部署之前请逐一核对源 Mac旧机必须运行 macOS 15 或更高版本。目标 Mac新机必须运行 macOS 26.4 或更高版本。目标 Mac必须在 Apple School Manager 或 Apple Business Manager 中注册并通过 Automated Device EnrollmentADE完成注册。该配置要求设备处于受监管supervision状态不支持其他注册方式。两台 Mac 都需要网络连接。Migration Assistant 在可用时优先使用点对点 Wi-Fi并在整个传输过程中持续探测是否有更快的通道它也支持基础网络 Wi-Fi、以太网和 Thunderbolt。源 Mac 不需要任何 MDM 配置也无需预先向它部署任何内容。传输什么、不传输什么Managed Migration Assistant 作用范围限定在用户的 Home 目录内。它可以传输Home 目录下的可见文件夹隐藏文件夹与文件.ssh、.bash_history等Home 目录内的文件夹别名与符号链接指向 Home 目录之外的原始对象不会传输隐私与安全设置以下内容不可迁移应用程序/Applications/Users/Shared/下的文件与文件夹Home 目录内的文件级别名与符号链接打印机与服务其他系统设置注意上面两处别名与符号链接的差异是有意为之Apple 传输文件夹级别名和符号链接但不传输文件级的。如果符号链接指向的是文件而非文件夹它就不会被移动。~/Library文件夹始终会传输无法排除。请把应用、安全工具和系统配置的部署交给 Fleet 单独处理迁移负责用户文件其余一切都由 Fleet 负责。在 Fleet 中配置 Managed Migration Assistant声明类型为com.apple.configuration.migration-assistant.settings。无论使用 GitOps 还是 Fleet UI声明文件本身完全一致。以下是一个可直接起步的示例{ Type: com.apple.configuration.migration-assistant.settings, Identifier: com.example.migration-assistant, Payload: { ShouldDoManagedMigration: true, ShouldMigrateSecurityPrivacySettings: true, RequiredPaths: [ Desktop/, Documents/ ], ExcludedPaths: [ Downloads/, .Trash/ ] } }ShouldDoManagedMigration和ShouldMigrateSecurityPrivacySettings同时为true是让迁移对受管 Mac 安全的基础配置两者必须同时出现。RequiredPaths与ExcludedPaths是可选项只影响哪些文件夹会被移动。只含两个布尔键的描述文件就是一份有效且完整的配置。自定义路径之前有几点需要了解路径相对于用户的 Home 目录。要包含~/Documents/Work/就写Documents/Work/。文件夹路径必须以斜杠/结尾。RequiredPaths与ExcludedPaths可以组合使用要求Documents/同时排除Documents/Archive/是合法的。RequiredPaths中的顺序有含义。当目标 Mac 存储空间不足时传输优先级按照你列出的顺序执行。两个数组都支持隐藏路径。要排除.Trash写.Trash/即可。用户账户创建后Managed Migration Assistant 会向用户展示传输界面。必选路径RequiredPaths会预先选中且不可取消勾选被排除的路径ExcludedPaths则完全不会出现。还有一个来自 Apple 的限制当该功能启用时Setup Assistant 中的Restore恢复窗格无法隐藏Restore跳过键skip key在这里不生效。将描述文件作用域限定到 macOS 26.4 及以上com.apple.configuration.migration-assistant.settings声明类型只在 macOS 26.4 及更高版本上存在。如果 Fleet 把它下发到更老的 Mac描述文件会失败主机的 OS 设置中会显示Error.UnknownDeclarationType: Unknown Declaration Type map[UnknownDeclarationType:com.apple.configuration.migration-assistant.settings]请把描述文件作用域限定到一个动态标签dynamic label确保只有符合条件的宿主机才会收到它。在 Fleet 中进入Labels添加一个名为macOS 26.4之类的动态标签使用如下查询SELECT 1 FROM os_version WHERE major 26 OR (major 26 AND minor 4);然后在下发描述文件时将该标签作为目标见下文两种方式。GitOps 方式将声明保存为仓库中的.json文件。在团队teamYAML 的controls.macos_settings.custom_settings下引用它并以标签为作用域controls: macos_settings: custom_settings: - path: ./platforms/macos/declaration-profiles/migration-assistant.json labels_include_any: - macOS 26.4提交并推送。你的 CI/CD 流水线会运行fleetctl gitops并应用该声明。labels_include_any是 Fleet GitOps 配置中对声明/描述文件做标签作用域的常用键类似的作用域语义在 server/fleet/labels.go 等处有对应实现可结合团队配置一并管理。Fleet UI 方式将声明保存为.json文件。在 Fleet UI 中进入Controls OS settings Configuration profiles。选择要添加描述文件的 fleet车队。选择Add profile并上传你的.json文件。在Target下选择Include any并选中macOS 26.4标签。选择Save。Fleet 会将该声明下发给该 fleet 中受监管、通过 ADE 注册且匹配该标签的 macOS 主机。Fleet 如何保证声明在正确的时机下发Managed Migration Assistant 能否生效关键前提是声明必须在用户走到传输步骤之前就位。这依赖 DEP 注册描述文件中的await_device_configured键它让 Setup Assistant 在设备完成配置包括接收并应用声明式配置之前不会向用户释放操作界面。从源码看Fleet 在向 Apple 注册 DEP 描述文件时始终把await_device_configured置为true。在 server/mdm/apple/apple_mdm.go 中可以看到明确的注释与赋值逻辑// always set await_device_configured to true - it will be released either // automatically by Fleet or manually by the user if // enable_release_device_manually is true. jsonProf.AwaitDeviceConfigured true也就是说Fleet 默认就保证声明类配置包括迁移声明会在 Setup Assistant 流程中被及时下发与应用这正是 Managed Migration Assistant 所要求的交付时机。这也意味着你无需为迁移功能单独调整 DEP 描述文件——Fleet 已替你处理了。当声明被下发到不支持的旧系统时如果你没有使用动态标签做作用域限制声明落到 macOS 26.4 以下的宿主机时主机会在 DDM 状态上报中返回Error.UnknownDeclarationType。Fleet 的服务端对该错误有专门的识别与处理逻辑在 server/service/apple_mdm.go 中isUnknownDeclarationType会检测声明的状态是否为未知类型Valid Unknown、Active false且首条 reason 的 code 为Error.UnknownDeclarationType从而在主机详情等界面中把这类失败标识为声明类型未知而非其他配置错误便于管理员快速定位原因——这也是上面建议用动态标签限定作用域的另一个理由。对应的 DDM 集成测试在 server/service/integration_mdm_ddm_test.go 中也有覆盖。处理标准用户认证源 Mac 上的 Migration Assistant 在传输开始前要求用户使用本地管理员凭据进行认证。如果你的用户是标准用户standard user没有管理员协助他们就无法启动迁移。如果无法在环境中把用户提升为管理员可以修改authorizationdb允许标准用户用自己的凭据认证 Migration Assistant而不再要求管理员密码。在迁移开始前于源 Mac 上执行sudo security authorizationdb write com.apple.system-migration.launch-password authenticate-session-owner这条命令会把管理员认证提示替换为普通用户级认证对话框。迁移完成后将其恢复为默认值sudo security authorizationdb write com.apple.system-migration.launch-password authenticate-admin-nonshared-password另一种实践思路是配合即时just-in-time特权提升工具让标准用户短暂获得启动 Migration Assistant 的权限而不持有长期管理员权限。无论采用哪种方案都建议在发布策略之前先规划好标准用户如何临时获得权限这一环而不是等第一次换机在登录提示处卡住之后才去补救。端到端流程一切配置就绪后整个流程如下用户在源 Mac 上打开 Migration Assistant 并完成认证。用户给新 Mac 开机进入 Setup Assistant。在Transfer Your Data to This Mac窗格用户选择源 Mac。新 Mac 通过 ADE 注册到 Fleet。Fleet 下发迁移声明得益于await_device_configured此时机被正确锁定。用户账户创建后Managed Migration Assistant 以你配置的路径呈现传输界面。传输开始。Fleet 通过声明式状态通道declarative status channel上报进度。迁移完成。Fleet 交付一份迁移后的报告post-transfer report。两台 Mac 在传输完成前需要保持在彼此的通信范围内。这套流程把换机从一次不可控的用户操作变成了可审计、可回滚、可复现的受管事件迁移期间有状态通道持续上报迁移结束有含日期、时间、传输数据量以及失败文件清单的报告同时因为整个策略只是一份小型 JSON 声明通过 GitOps 版本化管理后它可以获得同行评审PR review、变更历史与一键回滚能力——决定哪些公司数据会落到每一台新 Mac 上的策略理应像其他基础设施一样可审计、可回滚。仓库中的相关示例与配套文章 articles/managed-migration-assistant.md 对上述治理价值有更完整的论述可一并阅读。深入阅读本仓库内配套的治理视角文章articles/managed-migration-assistant.mdFleet 的 DEP 注册描述文件实现await_device_configured固定开启server/mdm/apple/apple_mdm.goFleet 对Error.UnknownDeclarationType的识别逻辑server/service/apple_mdm.go相关 DDM 集成测试server/service/integration_mdm_ddm_test.goDEP 描述文件中await_device_configured字段的定义server/mdm/nanodep/godep/profile.go赞分享后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载相关推荐用 Fleet 把 macOS 26.4 Managed Migration Assistant 落地为可审计、可回滚的声明式迁移策略用 Fleet 把 macOS 26.4 Managed Migration Assistant 落地为可审计、可回滚的声明式迁移策略 Mac 换机流程中最不可后端前端企业应用运维网络安全使用 Intune-to-Fleet CSP 转换器将 Intune 策略迁移到 Fleet Windows 配置描述文件使用 Intune to Fleet CSP 转换器将 Intune 策略迁移到 Fleet Windows 配置描述文件 将 Windows 配置策略从 Mi后端前端企业应用运维网络安全Testability Migration Agent 实战指南让 .NET 静态依赖迁移管线可检测、可生成、可迁移、可测试Testability Migration Agent 实战指南让 .NET 静态依赖迁移管线可检测、可生成、可迁移、可测试 本指南以 dotnet test人工智能AI 技能AI 评测Benchmark开发工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考