← 专题目录

第 6 章 账户、加密与隐私

2026-10-07 约 11 分钟

macOS 的安全模型是一层一层叠起来的:账户权限、磁盘加密、系统完整性保护、 应用沙盒、隐私授权。每一层负责不同的事,也各自有绕不过去的限制。 这一章讲每层在做什么,以及哪些设置真的值得改。

一、账户:管理员不是「超级用户」

macOS 的 root 默认是禁用的,管理员账户通过 sudo 临时获取 root 权限。 这跟 Linux 的习惯一致,跟 Windows 的「管理员 = 什么都能做」不太一样。

# 看自己是否在 admin 组
groups

# 看系统里所有用户
dscl . -list /Users | grep -v "^_"

# 看当前登录会话
who

值得做的事情是把日常使用降到标准账户。 实际体验上,标准账户几乎不影响正常使用——装 App 时系统会让你输管理员密码,就这一步。

添加方式:系统设置 → 用户与群组 → 添加账户 → 新账户类型选「标准」。

「自动登录」是个陷阱

系统设置 → 用户与群组 → 自动以此身份登录。开了这个,开机直接进桌面,不用输密码。 代价是任何拿到你机器的人,开机就是你的桌面。

如果你开了 FileVault,这个选项会自动消失——因为卷必须先用密码解开。这是好事。

二、FileVault:开了之后密钥在哪

FileVault 是全盘加密,基于卷级加密。关机状态下硬盘内容是密文, 没有密码或者恢复密钥就无法读取,即使把盘拆下来接到别的机器上。

# 状态
fdesetup status

# 看哪些用户能解锁
sudo fdesetup list

# 新增一个能解锁的用户
sudo fdesetup add -usertoadd 用户名

# 导出恢复密钥(重要:导出后立刻存到别处)
sudo fdesetup changerecovery -personal

恢复密钥丢了 = 数据永久丢失。 这不是吓唬人,Apple 支持也没法帮你解。开了 FileVault 那天, 就把那串密钥抄在纸上放进抽屉,或者存进另一台设备的密码管理器。 不要只存在这台 Mac 里——它加密的正是这台 Mac。

开了 FileVault 之后的几个正常现象

  • 开机会先出现一个只有密码框的界面(解锁磁盘),然后才是登录界面。要输两次密码,这一点让很多人以为坏了。
  • 触控 ID 在开机解锁时不能用,只能输密码。
  • 「查找」功能仍然可用(Apple 芯片机型的「激活锁」跟 FileVault 是两套机制)。

三、SIP:系统完整性保护

SIP 保护 /System、/usr、/bin 等系统目录, 即使 root 也不能修改。这是 macOS 防止恶意软件(也包括防止你自己手滑)的核心机制。

# 查看状态
csrutil status

# 正常输出:
# System Integrity Protection status: enabled.

关闭 SIP 需要在恢复模式里执行 csrutil disable。 除非你在做明确的系统级开发(比如写内核扩展、调试系统组件),否则不要关。 关了之后很多安全性依赖于它的机制会一起失效。

Apple 芯片机型还有一层「启动安全性」,在恢复模式里设置。 降低安全性才能加载第三方内核扩展,代价是该卷失去「完整安全性」保护。

四、防火墙

系统设置 → 网络 → 防火墙。默认是关的。

要不要开?建议开。macOS 的防火墙只管「入站连接」, 不影响你上网、不影响程序主动连出去。开了之后,外面的机器扫不到你开放的服务端口—— 如果你在本地跑开发服务器、数据库,这一层能避免很多意外暴露。

# 命令行查看/开关
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate on

# 查看哪些程序被允许
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --listapps

# 开启「阻止所有传入连接」(严格模式,会挡掉局域网共享等)
sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockall on

「防火墙选项」里的「启用隐身模式」值得开——它让机器不响应 ping 和端口探测。

五、隐私权限:那十几个开关到底在管什么

系统设置 → 隐私与安全性。这一页是 macOS 最有价值的一页,也是最容易被乱点的一页。

权限 给了之后能做什么 什么时候才该给
完全磁盘访问权限 读所有文件,包括其他 App 的数据 备份、杀毒、文件搜索类工具
辅助功能 控制鼠标键盘、读取其他窗口内容 窗口管理、快捷键工具、自动化
屏幕录制 截取其他窗口的画面内容 截图录屏、视频会议共享
输入监控 记录你所有的按键 只有输入法、密码管理器需要
照片 / 麦克风 / 摄像头 访问对应硬件或数据 用到时才给,按程序判断
定位服务 获取地理位置 地图、天气;其余一律不给

「输入监控」是最敏感的一个——它等于键盘记录器权限。 除了输入法和密码管理器,任何程序要这个都值得怀疑。

重置某个程序的权限

有时候授权状态会卡住(点了允许但程序还是说没权限)。可以把该程序的授权记录清掉重新弹:

# 重置某个服务的全部授权
tccutil reset All

# 只重置某个程序
tccutil reset All com.example.app

# 只重置某一类权限
tccutil reset ScreenCapture
tccutil reset Accessibility
tccutil reset Microphone

六、钥匙串:密码到底存在哪

「钥匙串访问」(/Applications/Utilities/)是 macOS 的密码库。 Wi-Fi 密码、网站登录、证书、加密密钥都在里面,用登录密码保护。

  • 登录钥匙串——跟着你的账户,登录时自动解锁。
  • iCloud 钥匙串——开了之后在多台设备间同步,端到端加密。
  • 系统钥匙串——系统和部分服务用,一般不用管。
# 命令行访问钥匙串
security list-keychains
security find-generic-password -s "服务名" -w    # 导出某个密码(会要授权)
security find-internet-password -s "example.com" -w

一个实用场景:忘了 Wi-Fi 密码。钥匙串访问里搜网络名,双击, 勾「显示密码」,输一次系统密码就能看到。不用去找路由器。

七、隔离属性:那个「从互联网下载」的标记

从浏览器、邮件、AirDrop 收到的文件会被打上一个扩展属性 com.apple.quarantine。 程序第一次运行时,系统看到这个标记,就会走 Gatekeeper 检查流程。

# 查看某文件的所有扩展属性
xattr -l 文件

# 只删隔离标记
xattr -d com.apple.quarantine 文件

# 递归清除(对 .app 包用)
xattr -cr /Applications/某程序.app

# 列出一个目录里所有带隔离标记的文件
find . -exec sh -c 'xattr "$1" | grep -q quarantine && echo "$1"' _ {} \;

这个机制的价值在于:「用户主动下载的东西」和「程序自己生成的东西」被区分开了。 前者要过检查,后者不用。所以你写的脚本跑起来不会弹窗,但从网上下载的脚本第一次跑就会被拦。

八、几件容易被忽略的事

  • 屏幕锁定时间设短一点。系统设置 → 锁定屏幕 → 「无操作后关闭显示器」和「要求输入密码」。 设成 5 分钟关屏、立即要求密码。
  • 开启「查找」。丢了能定位、能远程锁定、能远程抹掉。这项免费且只在需要时才有用。
  • 不要把管理员密码设成跟 Apple 账户一样。两者泄露途径不同,混用等于扩大攻击面。
  • 定期看一眼「登录项与扩展 → 后台项目」。有陌生的东西,说明某个程序偷偷装了常驻组件。
  • 系统更新别长期拖。安全更新是唯一持续修复已知漏洞的渠道,尤其是 Safari 和系统组件的补丁。

下一章:备份、迁移与重装 →