Skip to content
On this page

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

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

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

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

为什么 Documents Desktop Downloads 特殊?

那就要从 TCC 说起了。

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 的值判断是否运行在沙盒之中,

sh
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 年度最“不可赦”漏洞

fuck-pdd.png