> ## Documentation Index
> Fetch the complete documentation index at: https://hilt.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 通过 MDM 部署

> 通过 Jamf、Kandji 或 Intune 对 Hilt macOS 采集器进行零点击主机群部署：推送已签名的 .pkg、自动批准系统扩展，并借助 PPPC 预授予 Full Disk Access——全程无需终端用户交互。

## 概述

Hilt macOS 采集器以一款经过公证的 macOS 应用 **Hilt EDR**（`Hilt.app`，bundle id `Hilt.EDRApp`，团队 **Cybe Corporation / MVMB6LCP2A**）的形式发布，其中内嵌了两个 Apple 系统扩展：

| Extension | Type | Bundle id | Role |
| :- | :- | :- | :- |
| ESensor | Endpoint Security (ES) | `Hilt.EDRApp.ESensor` | 遥测传感器：进程 / 文件 / 网络 / 持久化事件 |
| NetFilter | NetworkExtension content filter | `Hilt.EDRApp.NetFilter` | 逐流网络归因 |

这里**没有内核扩展**——两者都是基于 Apple 现代框架的纯用户空间系统扩展，采集器在启用了 **System Integrity Protection (SIP)** 的普通加固 Mac 上运行。完整的签名与授权（entitlement）说明参见[网络与信任模型](https://hilt.ai/docs/zh/macos-collector/networking-security.md)。

在未受管理的 Mac 上，Endpoint Security 类产品需要两项无法回避的用户授权——批准系统扩展以及授予 Full Disk Access——因为这些是 Apple 的安全要求，没有 MDM 就无法抑制其弹窗。[直接下载路径](https://hilt.ai/docs/zh/macos-collector/deploy-standalone.md)会引导用户完成这两项授权。**在 MDM 下，你可以消除这两个弹窗**：只需随应用一起推送两个配置描述文件，注册即成为一次静默、零接触的安装。

本页介绍 MDM 部署的三个部分：

1. **应用分发** —— 将已签名的 `.pkg` 部署到主机群。
2. **系统扩展 payload** —— 自动批准内嵌扩展，使批准弹窗不再出现。
3. **PPPC（隐私）payload** —— 预授予 Full Disk Access，使 FDA 弹窗不再出现。

> [!NOTE]
>
> macOS 采集器目前处于\*\*早期访问（early access）\*\*阶段。这里描述的经公证 `.pkg` 加 SIP 启用的安装方式即为目标发布模型。设备端隔离响应在 macOS 上尚不可用；采集器安装后会通过其签名的、按部署划分的更新通道保持最新。

## 注册前置条件

这两个描述文件都必须**经由 Mac 所注册的 MDM** 下发。用户双击安装的描述文件会应用其余 payload，但 macOS 会静默忽略手动安装的 TCC 授权。

| Profile | What it does | Minimum enrollment |
| :- | :- | :- |
| System Extensions (`com.apple.system-extension-policy`) | 预批准扩展——无批准弹窗 | **User-Approved MDM (UAMDM)** |
| PPPC (`com.apple.TCC.configuration-profile-policy`) | 预授予 Full Disk Access——无 FDA 弹窗 | **User-Approved MDM (UAMDM)**，设备通道。**无需** ADE——见下文。 |

* **UAMDM** 指任何经用户批准的 MDM 注册——注册 URL、MDM 的注册应用——或 ADE 注册（批准自动完成）。
* Apple 文档中与 PPPC payload 相关联的\*\*监管（Supervision）\*\*状态，在 **macOS 11 及更高版本**上对每台通过 Device Enrollment 注册的 Mac 都是自动获得的，*包括普通的用户自助注册*。本采集器支持的所有 macOS 版本都远高于这条线，因此在任何已注册 MDM 的主机群上，Full Disk Access 授权都会在签入时静默生效。**Automated Device Enrollment（ABM/ADE）不是前置条件**——ADE 省去的是注册这一步的点击，而不是 FDA 切换。
* 唯一**不**承载 PPPC payload 的注册模式是账户驱动的 **User Enrollment**（BYOD 模式）。以该方式注册的 Mac 每台需要手动切换一次 FDA。

| Mac state | System Extension approval | Full Disk Access | User actions |
| :- | :- | :- | :- |
| 未受管理（直接下载） | 一次点击 | 一次切换 | 约 2 次点击 + 1 次密码 |
| 已注册 MDM（用户自助或 ADE） | 自动（静默） | 自动（静默） | **零** |

## 部分 1 —— 部署已签名的 .pkg

采集器以经过公证、使用 Developer ID 签名的 `.pkg` 分发。安装它会将 `Hilt.app` 放入 `/Applications`，并注册更新器 LaunchDaemon（`com.hilt.edr.updater`）；遥测由 ESensor 扩展自身通过出站 HTTPS 发送。获取安装包及其校验和的位置参见[发布工件](https://hilt.ai/docs/zh/macos-collector/release-artifacts.md)。

**1. Upload the package to your MDM**

将已签名的 `.pkg` 添加到你的 MDM 的软件包库中：

* **Jamf Pro：** 上传到分发点（Jamf Admin 或 Web 控制台），然后在策略中限定一个 **Install Package** 操作。
* **Kandji：** 添加一个类型为 **Installer Package (.pkg)** 的 **Custom App**，并将其分配到某个 Blueprint。
* **Intune：** 将其作为 **macOS app → Line-of-business app**（`.pkg`）添加，或通过 Intune macOS PKG 安装程序封装并部署。

**2. Order delivery before first launch**

**在应用首次启动之前**先交付**系统扩展 payload**（见部分 2）。如果应用在其批准描述文件到达之前就启动，macOS 会弹出一次性的批准提示，而该描述文件本可以抑制它。在 Jamf 中，将配置描述文件限定到与安装策略相同的智能群组，并设为相同或更高的优先级；在 Kandji 和 Intune 中，Blueprint / 分配中的描述文件和应用会在设备签入时收敛，因此针对同一群组即可。

**3. Verify the install landed**

从受管主机上（或通过你的 MDM 的远程命令 / 脚本运行器）：

```bash theme={null}
pkgutil --pkg-info-plist <package-identifier>
ls -d /Applications/Hilt.app
systemextensionsctl list
```

批准生效后，`systemextensionsctl list` 应显示 `Hilt.EDRApp.ESensor` 和 `Hilt.EDRApp.NetFilter` 处于 `[activated enabled]` 状态。

该 `.pkg` 经过公证并使用 Developer ID 签名，因此 Gatekeeper 无需任何本地覆盖即可放行。受管主机上不涉及 `csrutil disable`、`systemextensionsctl developer on`，也不涉及开发者模式——这些都是仅供开发使用的步骤，而经过公证的安装包完全省去了它们。

## 部分 2 —— 系统扩展 payload（自动批准扩展）

要抑制系统扩展的批准弹窗，请推送一个**系统扩展**配置描述文件。payload 类型为 `com.apple.system-extension-policy`，关键在于将 Hilt 的 Apple Developer Team ID 列入白名单，从而使由该团队签名的任何扩展都被自动批准。

**所需值**

| Key | Value | Meaning |
| :- | :- | :- |
| Payload type | `com.apple.system-extension-policy` | 系统扩展策略 |
| `AllowedTeamIdentifiers` | `MVMB6LCP2A` | 自动批准由 Cybe Corporation 签名的任何系统扩展 |
| `AllowedSystemExtensions`（可选，更严格） | `MVMB6LCP2A` → `Hilt.EDRApp.ESensor`, `Hilt.EDRApp.NetFilter` | 将批准限制为恰好这两个扩展 |

将 Team ID（`MVMB6LCP2A`）列入白名单是最简单、也是推荐的方式：它会自动批准 ESensor 和 NetFilter，并在同一团队内的扩展重命名或新增时依然有效。如果你的策略偏好显式的允许列表，可在 `AllowedSystemExtensions` 下以团队为键固定这两个 bundle id。

**按 MDM 划分：**

* **Jamf Pro：** Configuration Profile → **System Extensions** payload → 将 **System Extension Types** 设为 *Allowed Team IDs*，添加 `MVMB6LCP2A`。（可选：添加 *Allowed System Extensions* 并填入两个 bundle id。）
* **Kandji：** **System Extensions** 库项目 → 添加允许的团队标识符 `MVMB6LCP2A`。
* **Intune：** **Devices → Configuration → macOS → Templates → Extensions → System Extensions** → 允许团队标识符 `MVMB6LCP2A`。

原始 payload（供参考，或用于自定义描述文件的 MDM）如下所示：

```xml theme={null}
<dict>
  <key>PayloadType</key>
  <string>com.apple.system-extension-policy</string>
  <key>AllowedTeamIdentifiers</key>
  <array>
    <string>MVMB6LCP2A</string>
  </array>
  <key>AllowedSystemExtensions</key>
  <dict>
    <key>MVMB6LCP2A</key>
    <array>
      <string>Hilt.EDRApp.ESensor</string>
      <string>Hilt.EDRApp.NetFilter</string>
    </array>
  </dict>
</dict>
```

此 payload 只需 **UAMDM**，无需监管。只要在首次启动前部署到位，扩展便会激活，而绝不会弹出 *"System extension blocked / Open System Settings"* 提示。

## 部分 3 —— PPPC payload（预授予 Full Disk Access）

Full Disk Access 对任何 Endpoint Security 客户端都是**必需**的——这并非可选项，且 macOS 上的 FDA 条目显示为 **ESensor /"Hilt EDR Sensor"**，而非 "EDRApp"。要静默授予它，请推送一个 **Privacy Preferences Policy Control (PPPC)** 描述文件。

payload 类型为 `com.apple.TCC.configuration-profile-policy`。将 `SystemPolicyAllFiles` 服务设为 **Allow**，并以 ESensor 的代码要求（code requirement）为键，使该授权绑定到正确的、已签名的二进制文件。

**所需值**

| Key | Value |
| :- | :- |
| Payload type | `com.apple.TCC.configuration-profile-policy` |
| Identifier | `Hilt.EDRApp.ESensor` |
| Identifier type | `bundleID` |
| Code requirement | `anchor apple generic and identifier "Hilt.EDRApp.ESensor" and (certificate leaf[field.1.2.840.113635.100.6.1.9] or certificate 1[field.1.2.840.113635.100.6.2.6] and certificate leaf[field.1.2.840.113635.100.6.1.13] and certificate leaf[subject.OU] = MVMB6LCP2A)` |
| Service | `SystemPolicyAllFiles` |
| Access | `Allow` |

该代码要求就是扩展的 designated requirement——与 `codesign -d -r-` 对已安装 ESensor 输出的字符串一致，也与上传已签名应用后 Jamf 自动计算的结果一致。请原样使用。

**按 MDM 划分：**

* **Jamf Pro：** Configuration Profile → **Privacy Preferences Policy Control** payload → 添加一个应用，**Identifier** 为 `Hilt.EDRApp.ESensor`（类型 *Bundle ID*），粘贴代码要求，将 **App or service** 设为 *SystemPolicyAllFiles*、**Access** 设为 *Allow*。如果你上传了已签名的应用，Jamf 可自动计算代码要求。
* **Kandji：** **PPPC** 库项目 → 添加带代码要求的 ESensor 标识符 → 授予 *Full Disk Access (SystemPolicyAllFiles)*。
* **Intune：** macOS PPPC 描述文件 → 服务 `SystemPolicyAllFiles` → *Allow*，并填入上述标识符和代码要求。

原始 payload，供参考：

```xml theme={null}
<dict>
  <key>PayloadType</key>
  <string>com.apple.TCC.configuration-profile-policy</string>
  <key>Services</key>
  <dict>
    <key>SystemPolicyAllFiles</key>
    <array>
      <dict>
        <key>Identifier</key>
        <string>Hilt.EDRApp.ESensor</string>
        <key>IdentifierType</key>
        <string>bundleID</string>
        <key>CodeRequirement</key>
        <string>anchor apple generic and identifier "Hilt.EDRApp.ESensor" and (certificate leaf[field.1.2.840.113635.100.6.1.9] or certificate 1[field.1.2.840.113635.100.6.2.6] and certificate leaf[field.1.2.840.113635.100.6.1.13] and certificate leaf[subject.OU] = MVMB6LCP2A)</string>
        <key>Authorization</key>
        <string>Allow</string>
      </dict>
    </array>
  </dict>
</dict>
```

此 payload 在经由 Mac 所注册的 MDM 下发时即生效（见上文「注册前置条件」）——无需 ADE。在已注册 MDM 的主机群上，它会在无需用户交互的情况下授予 Full Disk Access；整个安装过程从头到尾完全静默。已在运行但缺少该授权的传感器会在描述文件落地后的几分钟内自行拾取——当前的采集器构建会自动重试，无需重启或重装。

> [!NOTE]
>
> PPPC 可以预授予 **Full Disk Access**（以及 Accessibility），但**绝不能**预授予 **Camera、Microphone 或 Screen Recording**——对这三项，Apple 始终要求用户手动授予。Hilt ES 传感器只需要 Full Disk Access，因此 MDM 安装是完全静默的。你不需要、也不应请求任何摄像头 / 麦克风 / 屏幕相关服务。

## 结果与验证

在已注册 MDM 的 Mac 上部署好全部三个部分后：

1. MDM 安装 `.pkg` → `Hilt.app` 落入 `/Applications`，更新器 LaunchDaemon 完成注册。
2. 系统扩展描述文件自动批准 ESensor 和 NetFilter——无批准弹窗。
3. PPPC 描述文件向 ESensor 预授予 Full Disk Access——无 FDA 弹窗。

用户什么都不会看到；遥测开始流动。要从受管主机确认：

```bash theme={null}
# Extensions activated and enabled
systemextensionsctl list

# ESensor process running
pgrep -fl ESensor

# Updater LaunchDaemon loaded
launchctl print system/com.hilt.edr.updater
```

`systemextensionsctl list` 应将 `Hilt.EDRApp.ESensor` 和 `Hilt.EDRApp.NetFilter` 报告为 `[activated enabled]`。一分钟内，该主机会带着 **macOS 主机类型徽章**出现在仪表盘的 **Collectors** 主机群中，其事件也会流入 **Investigate**、**Networks**、**Files** 和 **Users** 视图。端到端管道（ESensor → edr-collector → Kafka → 富化 → ClickHouse `endpoint_events`）参见[数据流](https://hilt.ai/docs/zh/macos-collector/data-flow.md)。

## 更新与 macOS 升级

* **应用 / 扩展更新**（相同 Team ID、已签名）：无需重新批准。既有的系统扩展批准和 FDA 授权会延续，`launchd` 会自动重新启动新的扩展构建。通过同一 MDM 机制推送新的 `.pkg` 即可，或让采集器内置的更新器从你部署的发布通道自动交付——两种方式下既有批准均会延续。
* **macOS 大版本升级：** Full Disk Access 授权在大版本 OS 升级时偶尔会被重置（这是一种已知的 TCC 行为）。MDM PPPC 描述文件会在下次签入时自动重新应用该授权，因此受管理的主机群可自我修复。直接下载（非 MDM）的用户可能需要重新切换一次 FDA。

## 此部署不做什么

* **无入站暴露。** 采集器不打开任何监听套接字，也绝不回连（phone home）。唯一的网络路径是从采集器出站的 HTTPS，连往所配置的接入端点。参见[网络与信任模型](https://hilt.ai/docs/zh/macos-collector/networking-security.md)。
* **无内核扩展。** 没有任何东西加载进内核；不存在 kext 批准，也不改动 SIP。Mac 始终保持 SIP 启用的加固状态。
* **无摄像头 / 麦克风 / 屏幕捕获。** 传感器只请求 Full Disk Access。它无法、也不会请求 Camera、Microphone 或 Screen Recording——况且 PPPC 本就无法预授予它们。
* **暂无设备端响应。** 隔离式响应在 macOS 上尚不可用。（更新已有覆盖：采集器会从其签名的发布通道自我更新，也可以通过 MDM 推送更新的 `.pkg`。）
* **隐私授权没有手动安装路径。** 只有当 PPPC payload 来自 Mac 所注册的 MDM 时才会被遵从。用户双击安装的描述文件会应用其余 payload，但不会授予任何 Full Disk Access。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.