macos 系统卷默认只读是 catalina 起强制实施的安全基线,由 apfs 卷组、只读挂载和 firmlink 三层机制实现,sip 协同防护;加固应立足此设计,善用用户路径、launchdaemon、synthetic.conf 等合规方式,避免禁用 sip 或强行可写。

macOS 系统卷(如 Macintosh HD)默认就是只读的——这不是需要“配置”的状态,而是从 Catalina 开始由系统强制实施的安全基线。它本身已是加固结果,而非待开启的选项。真正要做的,是理解其机制、尊重其设计,并在此基础上做合理加固。
系统卷只读本身就是安全加固的核心体现
macOS 通过 APFS 卷组 + 只读挂载 + firmlink 三层机制实现:
-
/System、/usr、/bin、/sbin等路径被物理隔离在独立的只读系统卷中 - 即使获得 root 权限,也无法直接修改这些目录下的二进制或配置文件
- 系统更新通过原子快照切换完成,旧卷可瞬间回滚,无损且可靠
- SIP(系统完整性保护)与只读卷协同,从内核层阻止绕过行为
你不需要、也不应主动“配置”系统卷为只读——它出厂即如此,强行解除反而削弱防护。
正确加固方向:用好只读机制,而非对抗它
-
✅ 把自定义脚本、工具、配置文件放在用户可控路径
- 如
~/bin/、~/Library/Scripts/、/usr/local/bin/(Homebrew 默认位置,属数据卷) - 避免尝试往
/usr/bin或/opt(若为只读卷一部分)硬写入
- 如
-
✅ 修改系统级行为时,优先使用 Apple 支持的接口
- LaunchDaemon 配置放
/Library/LaunchDaemons/(实际映射到数据卷) - 内核扩展(kext)已弃用,改用 System Extensions 或 DriverKit
- TCC 权限通过
tccutil或隐私设置界面管理,不直接改数据库文件
- LaunchDaemon 配置放
-
✅ 需要在根目录下挂载可写位置?用
synthetic.conf安全映射- 编辑
/etc/synthetic.conf(需sudo),例如添加一行:data Users/yourname/data - 重启后
/data自动指向你的用户目录,读写自由,不碰系统卷
- 编辑
-
❌ 不要禁用 SIP 或
mount -uw /除非绝对必要(如底层驱动开发)- 恢复模式下
csrutil disable会永久降低防御纵深 - 临时挂载可写仅对当前会话有效,重启即失效,且无法绕过 firmlink 逻辑
- 恢复模式下
配合只读机制的深度加固建议
- 启用并定期校验 Gatekeeper 和公证(Notarization)策略
- 关闭非必要服务:AirDrop、Remote Login(除非真需)、iTunes Sharing
- 使用
sandbox-exec或 App Sandbox 限制第三方工具访问范围 - 对 AI Agent 类应用(如 OpenClaw、Claude Desktop)单独收紧
~/.openclaw权限:chmod 700 ~/.openclaw && chmod 600 ~/.openclaw/device.json
不复杂但容易忽略:真正的加固不是让系统更“难用”,而是让攻击面更窄、行为更可审计、异常更易察觉。系统卷只读是苹果为你铺好的第一道防线,站在它后面加固,才最省力也最有效。











