macOS 文件隐私

最近意识到 macOS 上最安全的文件夹是 Documents,其次是 Desktop 和 Downloads,不管是不是沙盒里面的软件,都需要用户明确授予权限才能读写! 而其他文件夹,对于沙盒外的软件,就是裸奔,包括存放着服务器信息和私钥的 ~/.ssh

也就是说,要是想搞点事的话,就写一个开发者用的小工具或者直接给破解软件夹点私货,后台偷偷就把 ~/.ssh 文件夹上传了。

这么便利,也难怪大部分国产软件都不上 mac app store。还好,一开始就拒绝所有不上 mas 的国产软件。 其实电脑上的软件,除了 voov(国际版腾讯会议,国内版没有上 mas),确实也没有必须用的国产软件。

没错,国产软件就是有原罪!(大环境因素加上自身节操碎了一地

# 为什么 Documents Desktop Downloads 特殊?

那就要从 TCC (opens new window) 说起了。

The Transparent Consent and Control(TCC) system maintains a database of each user's consent in macOS.

就是说 macOS 10.15 之后引入了一个提升安全性的功能,所有软件(包括沙盒之外的)访问用户数据的时候需要用户明确授权。

这几个特殊的文件夹需要用户明确授权才可访问: Desktop, Documents, Downloads, Network Volumes, Removable Volumes

并且可以在 System Preferences.appSecurity & Privacy > Privacy > Files and Folders 管理授权。

数据库文件路径如下,这些数据库受 SIP 保护,不可读写。但你可以把他们复制到其他目录下然后用 SQLite 浏览器打开。

For all users: /Library/Application Support/com.apple.TCC/TCC.db

For each user: ~/Library/Application Support/com.apple.TCC/TCC.db

# 沙盒

使用 Xcode 开发 macOS 的软件的时候,可以配置是否将软件运行在沙盒之中。访问 网络、硬件(摄像头、麦克风、USB 插口)、个人数据(日历、位置、联系人)、文件 将有更多的限制。

app-sandbox.png

想要上架 MAS(Mac App Store) 的软件必须要运行在沙盒之中,所以一般可以用是否上 mas 来判断是否沙盒。

或者可以用 codesign 来查看 com.apple.security.app-sandbox 的值判断是否运行在沙盒之中,

codesign -d -v --entitlements - "/Applications/VooV Meeting.app"
沙盒中 沙盒外
Documents 只能由用户选择 用户授权
Desktop 只能由用户选择 用户授权
Downloads 用户授权 用户授权
Pictures 列出权限即可 裸奔
Movies 列出权限即可 裸奔
Music 列出权限即可 裸奔
Network Volumes 只能由用户选择 用户授权
Removable Volumes 只能由用户选择 用户授权
其他目录 只能由用户选择 裸奔

用户授权就是软件在尝试读取文件的时候系统会跳出确认框:

want-to-access.png

# 折腾

既然发现了问题,就免不了又是一波折腾 🙈

  • 删不必要的软件
  • 清理文件夹权限
    Security & Privacy 里授权管理,没必要的就去掉。
    去掉所有软件访问 Documents 的权限,只留下 vscode
  • 把大部分文件从 home 目录移动到 Documents 下
  • 清理 vscode 插件
    vscode 几乎能访问所有的文件了,所以不可信的插件一定要清理掉
  • 换 ssh 私钥
    以前为了方便没加密码的要加上,搭配 ssh-agent 一样很方便
    检查现有服务器的登录情况,开启更详尽的日志

是被迫害妄想症晚期没错了 🙈

# 原罪 - 举个 🌰

国产软件的下限再次刷新

「 深蓝洞察 」2022 年度最“不可赦”漏洞 (opens new window)

fuck-pdd.png