macOS 安全基础 — FileVault · 防火墙 · Gatekeeper · XProtect
开箱后必须启用的四项安全功能。磁盘加密、防火墙、应用验证和恶意软件隔离的工作原理及配置方法。
macOS 的默认配置尚可,但开发者机器需要再多拨几个开关。FileVault(磁盘加密)、防火墙、Gatekeeper(签名验证)和 XProtect(恶意软件隔离)是四项核心功能。
本指南在 Mac 初始配置 完成后约 30 分钟内建立安全基线。工作笔记本、个人笔记本以及任何存有源代码的机器均应完成此配置。
TL;DR
- FileVault 开启 — 设备丢失/被盗时保护数据(最重要)
- 防火墙 开启 — 阻止入站连接 + 启用隐身模式
- Gatekeeper 保持默认 — 仅允许 App Store + 已识别开发者
- XProtect 是自动的 — 保持自动更新开启即可
- 企业笔记本:(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 enabled3. Gatekeeper — 应用验证
3.1 功能说明
macOS 首次启动应用时:
- 验证代码签名(Apple Developer ID 或 App Store)
- 验证公证(Apple 恶意软件扫描通过的证明)
- 仅在两者均通过时才运行
3.2 保持默认设置
系统设置 → 隐私与安全 → 安全性:
- App Store — 最严格
- App Store 和已识别的开发者 — 默认(推荐)
- 「任何来源」选项已在 macOS 14 中移除(现在只能通过命令行绕过)
3.3 一次性允许未签名应用(开发构建等)
运行一次未签名应用的方法:
# A. 右键 → 打开
# 在 Finder 中右键点击应用 → 打开 → 在警告弹窗中点击「打开」→ 之后可正常启动
# B. 移除隔离属性(有风险 — 仅用于可信应用)
xattr -d com.apple.quarantine /path/to/MyApp.app3.4 禁用 Gatekeeper(禁止)
# ❌ 不要运行这个
sudo spctl --master-disable这会关闭所有应用的签名检查,敞开大门。即使作为开发者也不要禁用——临时情况使用第 3.3 节的方法。
3.5 验证
spctl --status
# assessments enabled ← 正常
# 检查特定应用
spctl --assess --verbose /Applications/SomeApp.app4. 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. 下一步
- Mac 初始配置 — /mac/initial-setup
- SSH 多账户 — /mac/ssh-multi-account
- 密码管理器(1Password / Bitwarden) — /multi-os/password-manager
- 备份(Time Machine) —
/mac/backup-time-machine(已计划)
参考资料
更新日志
- 2026-05-16:首次发布。FileVault + 防火墙 + Gatekeeper + XProtect + SIP + SSH 安全 + 一次性验证脚本 + 六个故障排除案例。