- 后端
- 前端
- 企业应用
- 运维
- 网络安全
【免费下载链接】fleet
Open device management
Fleet 4.27.0 是 Fleet(开源设备管理平台)在 2023 年 2 月发布的一个重要版本,核心聚焦两大能力:其一,在活动(Activity)日志中新增"登录失败"事件类型,让管理员可以清楚看到谁尝试登录 Fleet 但失败了;其二,大幅改进"Select Targets"(选择目标)界面的搜索与过滤逻辑,支持同时按设备类型(Platform)、团队(Team)和标签(Label)进行"与"(AND)组合筛选。本文基于当前仓库的发布文档与源码实现,完整梳理该版本的功能清单、关键配置与底层实现细节,帮助你在升级后快速掌握新能力。
版本亮点一览
Fleet 4.27.0 的主要亮点如下,均同时在 Fleet Free 与 Fleet Premium 中提供:
- 更清晰的登录失败告警:当有人尝试登录 Fleet 但失败时,活动日志中会记录下明确的失败事件,方便管理员排查异常登录行为。
- 查询目标更细粒度的过滤:在运行查询时的"Select Targets"界面,支持按设备类型、团队与标签的组合条件进行过滤。
此外,该版本还包含一系列 MDM(移动设备管理)与企业级改进:新增 Controls 页面、新增POST /api/v1/fleet/mdm/apple/request_csr接口、支持为 macOS 主机配置最低系统版本与升级截止时间、在仪表盘展示待处理(pending)主机、以及大量 UI 与 API 细节修正。
更可靠的登录失败告警
适用版本:Fleet Free 与 Fleet Premium
在 Fleet 4.27.0 之前,活动日志中只有"用户登录成功"这类事件,管理员很难掌握登录失败的详情。4.27.0 之后,当有用户尝试登录 Fleet 但失败时,账户管理员可以直接在 UI 的活动(Activity)列表中看到相应记录,例如:"Somebody usingunknown-larry@who.orgfailed to log in from70.127.322.67"(某用户使用该邮箱从某 IP 登录失败),并附有时间信息。这使得管理员能够快速识别暴力破解、账户撞库或误输密码等异常情况。
这一功能在源码层面由新增的活动类型支撑。在 server/fleet/activities.go 中,定义了ActivityTypeUserFailedLogin结构体:
type ActivityTypeUserFailedLogin struct { Email string `json:"email"` PublicIP string `json:"public_ip"` } func (a ActivityTypeUserFailedLogin) ActivityName() string { return "user_failed_login" }可以看到,每次登录失败事件会记录两个关键字段:尝试登录的邮箱地址(Email)与来源公网 IP(PublicIP),活动类型标识为user_failed_login。这正对应用户在 UI 活动列表中看到的"谁(邮箱)从哪里(IP)尝试登录失败"的信息。
更关键的是,这一新事件可以与此前 4.26 版本引入的审计(audit)改进配合使用:你可以在 Fleet 中配置自动化告警,当短时间内出现多次登录失败时触发通知。对于将 Fleet 作为企业核心设备管理入口的团队而言,这意味着即使管理员不在线,也能第一时间感知到针对 Fleet 登录入口的可疑尝试。
"Select Targets"界面的搜索过滤改进
适用版本:Fleet Free 与 Fleet Premium
Fleet 常被多团队、多组织的企业与服务提供商使用。为了让不同组织与团队的主机互相隔离,管理员经常会给工作站打上诸如"公司名标签"(company name label)之类的标签。在此前的版本中,同时按**设备类型(Platform)与标签(Label)**过滤工作站非常困难,因为 Platform、Team、Labels 这三类条件之间是"或"(OR)的关系——只要命中其中任意一类,主机就会被包含进目标集合,导致过滤结果不精确。
4.27.0 修复了这一逻辑:Platform、Team、Labels 之间的运算符由"OR"改为"AND",现在你可以同时指定设备类型、团队和标签,只匹配同时满足所有条件的主机集合。
需要特别注意文档中强调的两个边界行为:
- 显式选择主机 ID(Selecting explicit host IDs)时:无论你同时选择了哪个团队、标签或平台,查询都会精确地在这批指定主机上运行;
- 选择"All hosts"(全部主机)时:查询会在所有主机上运行,同样不受已选的团队、标签或平台条件影响。
也就是说,组合过滤只作用于"按条件批量选择"的中间场景,不会干扰显式指定主机或全量运行这两种极端用法,保证了灵活性与确定性。
如果你需要查阅运行查询的完整操作说明,可以参考 Fleet 文档(当前仓库 docs 目录下的 UI 使用文档),其中详细介绍了如何发起实时查询(live query)并选择目标主机。
关于 osquery packs 的说明
Fleet 4.27.0 对 osquery packs 的处理进行了明确的界定。Packs 是 osquery 原生的一种机制,提供了一种可移植的格式,用于在各种平台(包括 Fleet)之间导入/导出查询。这些 osquery packs依然存在,但在本版本中已从 Fleet UI 中移除;为了向后兼容,仍然可以通过API访问它们。
Fleet 引入 pack 的替代方案如下:
- Fleet Premium:通过"团队(Teams)"概念来定位特定组的主机,实现更细粒度的分组管理;
- Fleet Free:仍然可以使用**定时查询(scheduled queries)**来面向所有主机执行周期性任务,其行为与原先使用 packs 类似。
对于从旧版本升级且依赖 UI 管理 packs 的用户,建议将相关查询迁移为定时查询,或继续通过 API 管理 packs。
MDM 相关的新功能与改进
Fleet 4.27.0 在 Apple MDM 能力上投入了大量改进,具体如下:
新增 Controls 页面与导航样式更新
实现了全新的Controls 页面,并更新了站点级导航的样式。该页面成为管理员集中配置设备控制策略(如 macOS 更新、磁盘加密等)的入口。
新增 APNs 证书签发请求接口
新增POST /api/v1/fleet/mdm/apple/request_csr端点,用于向 fleetdm.com 发起Certificate Signing Request(CSR),并返回对应的APNs 私钥以及SCEP 证书与密钥。这在源码的 server/service/mdm.go 中有完整实现,其核心流程为:
- 校验输入:
RequestMDMAppleCSR首先检查请求者的写权限(fleet.ActionWrite),随后校验email_address与organization字段,两者均不可为空,且邮箱必须是合法格式; - 生成 SCEP CA 证书与密钥:调用
apple_mdm.NewSCEPCACertKey()在本地生成 SCEP 证书颁发机构(CA)的证书与私钥; - 生成 APNs CSR:调用
apple_mdm.GenerateAPNSCSRKey(email, org)生成 APNs 证书签名请求与私钥; - 向 fleetdm.com 请求签名:通过
apple_mdm.GetSignedAPNSCSR将 CSR 发送至 fleetdm.com 获取签名。若使用非企业邮箱域名,接口会返回明确的错误提示,要求使用公司或组织邮箱; - 返回结果:将 APNs 私钥、SCEP 证书与 SCEP 私钥以 PEM 编码封装为
fleet.AppleCSR返回。
对应的路由注册位于 server/service/handler.go,同时保留了GET /api/_version_/fleet/mdm/apple/request_csr用于查询已有 CSR 信息。该接口简化了管理员初始化 Apple MDM 时繁琐的证书申请流程。
MDM 配置状态暴露到配置与设备端点
在GET /config与GET /device/:token端点响应中新增了若干键,用于告知客户端Fleet 的 MDM 是否已正确配置。这方便前端或设备端在 MDM 未就绪时给出明确提示,避免管理员误以为 MDM 已生效。
支持从主机详情页解除 MDM 注册
授权用户现在可以直接在Host details(主机详情)页面上,将某台主机从 MDM 中解除注册(unenroll)。该操作的前提是:主机必须已注册 MDM 且处于在线状态。
可配置最低 macOS 版本与升级截止时间
管理员可以为注册到 Fleet MDM 的 macOS 主机配置最低系统版本与升级截止时间(deadline)。这一能力对应的底层数据结构是 server/fleet/app.go 中的AppleOSUpdateSettings:
type AppleOSUpdateSettings struct { // UpdateNewHosts if true, only enforce the latest macOS version for new hosts (during enrollment) UpdateNewHosts optjson.Bool `json:"update_new_hosts"` // MinimumVersion is the required minimum operating system version. MinimumVersion optjson.String `json:"minimum_version"` // Deadline the required installation date for Nudge to enforce the required // operating system version. Deadline optjson.String `json:"deadline"` // DeadlineDays is the number of days after an OS version's release date // before the update is enforced. It is only valid when MinimumVersion is // "latest", where the deadline is relative to each version's release rather // than a fixed calendar date. DeadlineDays optjson.Int `json:"deadline_days"` }从源码可以归纳出以下关键约束(参见 app.go 的Validate()逻辑):
minimum_version与deadline必须成对提供:只配置其中一个会报错("deadline is required when minimum_version is provided" 等);- 版本号格式:
minimum_version仅接受x、x.y或x.y.z形式的数字版本号,不支持 "Ventura 13" 或 "13.0.1 (22A400)" 这类描述; deadline格式:必须为YYYY-MM-DD日期格式;- 哨兵值
"latest":将minimum_version设为latest时,表示"为每台主机的硬件强制执行苹果提供的最新系统版本",此时不能再设置固定的deadline,而应改用deadline_days(该版本发布后多少天强制执行,须大于 0)。
在 server/service/appconfig.go 中,processAppleOSUpdateSettings会在配置更新时对比新旧设置,并在最低版本+截止时间发生变化时触发对应的 MDM 配置同步(MDMAppleEditedAppleOSUpdates),确保更新指令能及时下发给主机。
仪表盘与托管主机页展示 pending 主机
Fleet Premium现在会在仪表盘(dashboard)与托管主机(managed host)页面展示待处理(pending)主机,让管理员在主机完成注册流程前即可看到即将纳入管理的设备数量。
APNs 与 ABM 配置文档完善
官方文档补充了Apple Push Notification service(APNs)与Apple Business Manager(ABM)的设置与续期步骤,涵盖证书更新、密钥轮换等运维环节,帮助管理员避免因证书过期导致的 MDM 通信中断。
其他功能、改进与 Bug 修复
除上述 MDM 相关改动外,Fleet 4.27.0 还包含以下更新:
fleetctl get teams --yaml的输出现在与fleetctl apply -f兼容,可以直接将团队配置导出后再应用,方便 GitOps 场景下的配置管理;- 在
GET /hosts与GET /hosts/:id端点的响应中新增了MDM 注册状态与MDM 服务器 URL字段; - 用户可以悬停主机 UUID 以查看并复制完整的 ID 字符串;
- 在 Linux 发行版检测列表中加入nixos平台;
- Premium 用户的账户信息页面新增许可证到期时间展示;
- 移除了团队策略/策略自动化加载时的陈旧时间(stale time),切换团队时向用户提供准确的团队数据;
- 更新了软件空状态(empty states)与主机详情空状态的展示;
- 管理主机页面默认每页主机数由 100 调整为 50;
- 支持CrOS作为有效的平台字符串,便于管理 ChromeOS 主机;
- 在小屏宽度下优化了表格展示;
- 为
GET /api/v1/activitiesAPI 端点新增meta属性,包含分页元数据,并修复了活动卡片分页按钮在 UI 上的边界问题; fleetctl updates add命令使用更严格的文件权限;- 当表格只有 1 台主机时,移除冗长的 tooltip 溢出;
- 修复了管理主机页面的分页问题。
升级到 Fleet 4.27.0
如需升级,请参考 Fleet 官方文档中的upgrade guide(升级指南)获取详细步骤。升级前建议:先在测试环境验证 4.27.0 的行为变化,特别是 Select Targets 过滤逻辑由"OR"变"AND"后对已有查询目标选择的影响,以及使用 API 管理 osquery packs 的既有自动化脚本是否仍符合预期。
Fleet 4.27.0 通过"登录失败审计"与"组合过滤"两项核心改进,显著提升了 Fleet 在访问安全管理与大规模主机查询定位两个高频场景下的可用性,同时借由request_csr接口、macOS 最低版本与升级截止时间配置等 MDM 增强,进一步完善了 Apple 设备全生命周期管理的闭环。
- 后端
- 前端
- 企业应用
- 运维
- 网络安全
【免费下载链接】fleet
Open device management
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考