devAlice
← Mac

macOS 安全基础 — FileVault · 防火墙 · Gatekeeper · XProtect

开箱后必须启用的四项安全功能。磁盘加密、防火墙、应用验证和恶意软件隔离的工作原理及配置方法。

macOS 的默认配置尚可,但开发者机器需要再多拨几个开关。FileVault(磁盘加密)、防火墙Gatekeeper(签名验证)和 XProtect(恶意软件隔离)是四项核心功能。

本指南在 Mac 初始配置 完成后约 30 分钟内建立安全基线。工作笔记本、个人笔记本以及任何存有源代码的机器均应完成此配置。

TL;DR

  1. FileVault 开启 — 设备丢失/被盗时保护数据(最重要)
  2. 防火墙 开启 — 阻止入站连接 + 启用隐身模式
  3. Gatekeeper 保持默认 — 仅允许 App Store + 已识别开发者
  4. XProtect 是自动的 — 保持自动更新开启即可
  5. 企业笔记本:(1)+(2) 为强制要求,绝不禁用 (3)

前提条件

  • macOS 14+(Sonoma 或更新版本)
  • 管理员账户
  • 已登录 Apple ID(用于 FileVault 恢复密钥备份)

1. FileVault — 磁盘加密(必须)

1.1 为什么是必须的

  • 丢失/被盗时无数据泄露 — 没有密钥,磁盘毫无意义
  • macOS 默认关闭 — Apple Silicon 有硬件加密,但不启用 FileVault 时密钥处于解锁状态
  • 几乎所有企业安全政策均要求开启

1.2 启用

系统设置 → 隐私与安全 → FileVault → 开启

选择恢复选项:

  • 允许 iCloud 恢复(简便;丢失 Apple ID = 数据永久丢失)
  • 生成恢复密钥(28 个字符 — 存放在安全的地方,如 1Password)

建议:生成恢复密钥并存入密码管理器。消除 iCloud 作为单点故障的风险。

启用后,磁盘加密在后台运行。你可以继续使用设备,但预计会有 1-2 小时的轻微性能下降。进度显示在同一设置页面。

1.3 验证

fdesetup status
# FileVault is On.

或:

diskutil apfs list | grep -i encrypted
# Encrypted:                  Yes (Unlocked)

1.4 注意事项

  • 丢失恢复密钥 + 丢失 Apple ID = 数据永久丢失。将密钥备份到两个地方
  • 企业笔记本:雇主可能托管恢复密钥 — 确认 IT 政策
  • 外置 SSD 也可以加密(diskutil apfs encryptVolume

2. 防火墙(必须)

2.1 启用

系统设置 → 网络 → 防火墙 → 开启

选项:

  • 阻止所有传入连接 — 拦截几乎所有内容(禁用共享服务)
  • 自动允许已签名软件 — 允许已签名应用(推荐默认)
  • 启用隐身模式 — 不响应 ping/探测(公共 Wi-Fi 下效果好)

2.2 推荐配置

环境配置
家庭 / 可信网络防火墙开启 + 自动允许已签名
办公室防火墙开启 + 自动允许已签名
咖啡馆 / 机场 / 酒店 Wi-Fi+ 隐身模式开启 + 尽量阻止所有传入连接

2.3 为特定应用允许入站

当应用需要入站连接(开发服务器、游戏主机)时:

防火墙 → 选项 → + → 添加应用 → 「允许传入连接」

或在应用首次请求时接受 macOS 提示。

2.4 验证

sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
# Firewall is enabled. (State = 1)
 
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
# Stealth mode enabled

3. Gatekeeper — 应用验证

3.1 功能说明

macOS 首次启动应用时:

  1. 验证代码签名(Apple Developer ID 或 App Store)
  2. 验证公证(Apple 恶意软件扫描通过的证明)
  3. 仅在两者均通过时才运行

3.2 保持默认设置

系统设置 → 隐私与安全 → 安全性

  • App Store — 最严格
  • App Store 和已识别的开发者默认(推荐)
  • 「任何来源」选项已在 macOS 14 中移除(现在只能通过命令行绕过)

3.3 一次性允许未签名应用(开发构建等)

运行一次未签名应用的方法:

# A. 右键 → 打开
# 在 Finder 中右键点击应用 → 打开 → 在警告弹窗中点击「打开」→ 之后可正常启动
 
# B. 移除隔离属性(有风险 — 仅用于可信应用)
xattr -d com.apple.quarantine /path/to/MyApp.app

3.4 禁用 Gatekeeper(禁止)

# ❌ 不要运行这个
sudo spctl --master-disable

这会关闭所有应用的签名检查,敞开大门。即使作为开发者也不要禁用——临时情况使用第 3.3 节的方法。

3.5 验证

spctl --status
# assessments enabled    ← 正常
 
# 检查特定应用
spctl --assess --verbose /Applications/SomeApp.app

4. XProtect — 恶意软件隔离

4.1 功能说明

macOS 内置的后台恶意软件扫描器,无需配置。

  • 根据已知恶意软件签名自动扫描
  • 在应用运行前扫描下载的文件和应用
  • Apple 静默推送定义更新(独立于系统更新)

4.2 确认自动更新

系统设置 → 通用 → 软件更新 → 自动更新

  • 安装安全响应和系统文件 — 包含 XProtect 定义,必须开启

4.3 验证

# XProtect 上次更新时间戳
defaults read /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Info CFBundleShortVersionString
 
# 或
sudo /usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" /Library/Apple/System/Library/CoreServices/XProtect.bundle/Contents/Info.plist

看到近期的 2026-xx-xx 风格日期属正常。

4.4 可选补充杀毒软件

XProtect 只能拦截已知恶意软件。零日漏洞和高级攻击可能绕过。可选方案:

  • Malwarebytes — Mac 版,有免费层
  • CrowdStrike / SentinelOne — 企业 EDR

对于个人开发者,XProtect + Malwarebytes 通常已足够。叠加多个杀毒工具会严重拖慢性能。


5. SIP(系统完整性保护)

5.1 功能说明

即使以 root 身份也无法修改系统文件夹。macOS 的自我保护机制。

  • 保护 /System/usr
  • 阻止内核扩展加载
  • 阻止调试系统进程

5.2 检查状态

csrutil status
# System Integrity Protection status: enabled.

enabled 是正确状态。绝不禁用 — 非常危险。

禁用只能在 macOS 恢复模式下进行,普通用户实际上永远不需要这样做。


6. 推荐额外设置 — 锁屏 + 自动锁定

6.1 屏幕锁定快捷键

系统设置 → 锁定屏幕无操作时关闭显示器:5 分钟

快速锁屏:

  • Ctrl + Cmd + Q — 立即锁定

6.2 禁用自动登录

系统设置 → 用户与群组 → 登录选项

  • 自动登录:关闭

6.3 锁定屏幕时隐藏通知内容

系统设置 → 通知 → 显示预览 → 「解锁时」

不在锁定屏幕显示消息内容。防止工作消息和短信验证码从锁定屏幕泄露。


7. SSH 密钥安全

macOS 默认将 SSH 密钥以明文存储在磁盘上。加固方法:

7.1 使用密码短语

# 生成时输入密码短语
ssh-keygen -t ed25519 -C "you@example.com"

空密码短语虽然方便,但意味着密钥泄露后立即可用 — 不推荐。

7.2 使用 macOS 钥匙串

~/.ssh/config

Host *
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

密码短语存入 macOS 钥匙串 → 输入一次后自动使用。

7.3 1Password SSH agent(可选)

最安全的配置。SSH 密钥存在 1Password 保险库中,每次认证需要 Touch ID。

详情:/multi-os/password-manager


8. 验证 — 一次性基线检查

echo "=== FileVault ==="
fdesetup status
 
echo "=== 防火墙 ==="
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getstealthmode
 
echo "=== Gatekeeper ==="
spctl --status
 
echo "=== SIP ==="
csrutil status
 
echo "=== 自动登录 ==="
defaults read /Library/Preferences/com.apple.loginwindow autoLoginUser 2>/dev/null && echo "自动登录已开启 — 请禁用" || echo "自动登录已关闭"

期望输出:

FileVault is On.
Firewall is enabled. (State = 1)
Stealth mode enabled
assessments enabled
System Integrity Protection status: enabled.
自动登录已关闭

五项全通过 = 安全基线达成。


9. 故障排除

启用 FileVault 后开机提示两次密码

  • 正常 — 一次在 EFI 阶段,一次在登录窗口
  • 如果想只提示一次,禁用 系统设置 → 用户与群组 → 登录选项 → 在菜单栏中显示快速用户切换菜单

防火墙导致应用停止工作

  • 可能是需要入站连接的应用(开发服务器、游戏主机)
  • 防火墙 → 选项 → + 显式允许
  • 或在应用首次请求时接受提示

Gatekeeper 阻止了你信任的开发者的应用

  • 偶有发生 — Apple 公证服务的临时延迟
  • 5-30 分钟后重试,或右键 → 打开

XProtect 定义看起来过时

  • 确认 软件更新 自动更新已开启
  • 手动触发:重启

M1/M2/M3 需要未签名的 kext

  • 需要切换到降低安全性(macOS 恢复 → 启动安全性实用工具)
  • 尽可能避免 — 寻找不需要 kext 的软件

「此应用已损坏」(无法打开)

  • Apple Silicon 上的 ARM 不兼容二进制
  • 或缺少 quarantine 属性的用户构建 — xattr -cr /path/to/App.app 后重试(仅限可信来源)

10. 下一步


参考资料

更新日志

  • 2026-05-16:首次发布。FileVault + 防火墙 + Gatekeeper + XProtect + SIP + SSH 安全 + 一次性验证脚本 + 六个故障排除案例。