Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


简介

在看了《对「自愿」上传隐私数据说不,这些是我们可以做的》之后,有感于评论区里不少人对必要隐私的需求。但原文的作者并没有提到能够更多详尽的保护隐私的方法。因而,即便是想要采取一些行动,也难以入手。这让我感到颇为遗憾。因此,该文章诞生了 —— 它将致力于介绍一些在国内能够切实保护隐私的办法。

这里的大部分内容主要以实操为主,尽力面向新手友好。将会有详尽的操作步骤说明。

由于内容较多,这篇文章将从 Android 手机着手,着重介绍其中两个保护隐私的方式:

  • 拦截不正常的权限请求
  • 隔离手机存储空间

更多内容,将在后面的文章中逐步展开。敬请期待。

开始之前...

首先,这些方法会从不同程度上依赖于一台装上 Magisk 的手机。虽然部分可以用其它的方式(等效)替代,但总归不是最佳方案。如果可以的话,装上 Magisk 是最好的选择😄。

同时,考虑到每个人对软件的心理定价并不相近,如若相应板块主要介绍的是付费软件,文末将给出核心功能等价的免费软件(如可能),以便做出更好的选择。

另外,如你选择尊重自己的隐私权,还请注意:这将一定程度上侵犯相应服务商的权益,可能会致使你的服务提供商行使拒绝提供部分或全部服务的权利。因此,还请三思而行。为便于决断,本文将在每一章的开头简略附加已知会产生这种情况的例子。当然,隐私程度的提升,也会以牺牲部分便利性作为代价。你需要自行权衡利弊,并做出认为合适的决定。

隐私与便利是一门平衡的艺术,世上并不存在绝对的隐私。

相对的平衡,可以造就一副美景。过分的平衡,将破坏这种美感

感谢你花费许多精力读到这里。让我们正式进入这篇文章吧。

拦截权限 —— App Ops

⚠ 可能与定制系统的权限管理功能冲突。请二选一。

⚠ 部分软件可能会因拒绝权限请求而停止运行。

相信有很多人对于「不得不用的毒瘤软件」咬牙切齿:

  • 由于一些客观原因,不得不用
  • 但又会私下干点小动作...

毒瘤软件之所以毒瘤,很大程度上就在于兼有以上两点。其表现之一,就是权限的过度索取。

被工信部通报存在过度索取权限问题的部分应用

那么,要如何解决这个问题呢?直接用一些手段,拦截不正常权限请求未尝不是个好主意。

自 Android 4.3 开始,一个内置的核心组件被引入到系统内:AppOps。经过它拒绝的权限,应用会「允许使用该权限,但得到空白信息」,而不是「直接被拒绝了某项权限」。

一方面,空信息可以有效的保护隐私。另一方面,不是直接拒绝,而是给予空信息的方式也在一定程度上节制了部分应用「不给权限不给用」的情况。

同时,由于 AppOps 自高版本 Android 开始才在系统里内置不完整的管理前端,因此,如果想要用的舒心,则需要一个更好用的程序来接管 AppOps。理论上,你可以使用任意的前端来达到目的。我使用的是由独立开发者 Rikka 编写的应用:App Ops。

 

首先,这个软件的最佳实践需要你使用 Shizuku 或 Sui(它们都是同一个作者 Rikka 的作品。均免费且开源)。它们将作为 App Ops 操纵系统组件的后端。

 

Shizuku 与 Sui 在功能上是高度重合的。如果你的手机有 root 权限,特别是基于 Magisk的 root 权限,请优先考虑后者。

退而求其次,还可以使用 ADB 激活 Shizuku 或者授予 AppOps 设备管理员权限来达到相同的目的,在 Android 11 以及更高的 Android 版本,可以无需连接电脑,通过本机无线调试即可激活 Shizuku。

少数派曾经发了一篇很棒的 App Ops 使用指南:《在权限管理上跑过 iOS 14 和 Android 11:App Ops 4.0 上手指南》。点击上方链接即可直达。1

替代品

  • XPrivacyLua:一款通过 Hook 系统权限管理器来实现权限管理的程序。需要 Xposed 框架,或是使用 LSPosed 等工具。
  • AppOps Module For Invalid App:一款通过 Hook 系统核心框架来实现权限管理的应用,同上。
  • 权限狗:一款通过 ROOT / 设备管理员等方式控制 AppOps 的前端程序。
  • App Manager:一款通过 ROOT 来管理设备许多功能的瑞士军刀。其中包含 AppOps 权限管理功能。

存储空间隔离

⚠ 可能会破坏一些定制系统的功能(如 MIUI 的「主题管理」)。最坏的情况是:手机可能无法开机。建议在实操时谨慎隔离系统应用。

⚠ 对某大厂游戏(「某某精英」)启用隔离会导致封号。可通过禁用存储权限的方式缓解。

有些应用会在手机空间里随意安放和读取各种各样的文件。这会带来这些影响:

  • 手机内存变得凌乱不堪,以至于随便找个文件都是大工程;
  • 应用可能会意外上传一些重要的文件;
  • 应用可能会意外知道你喜欢的照片、音乐;
  • 应用可能会读取基于文件的唯一设备码,以实现跨应用跟踪能力;
  • ……

简而言之:由于低版本 Android 权限设计的局限性,任何一个拿到了完整存储权限的应用,都能读取手机里几乎所有的内容。与之同时,它们可以随意写入各种文件,以达到各种预期之外的目的。这往往不是我们想要的。

Android 内置存储现状

需要读取的东西可以读取,不需要读取的东西不要动,也动不了。这,或许才是我们想象中的样子。

不过,受制于各种因素,大多数软件开发商无暇顾及这一点。就连本将 Google,最有能力推动存储隔离的公司,也推迟了已经内置于 Android 中应用沙盒的全面推行。2

那么,自己动手,就成为了丰衣足食的必要条件。让我们开始吧。

安装

你可以点击下面的应用卡片,或从合适的渠道获得应用:

 

打开它,并点击「启动核心服务」。

描述很多很全面。主要是针对隔离的用途

其次,打开 Magisk。转到「仓库」页,并依次安装这两个模块(已经安装的模块无需重复)。

  • Riru
  • Riru – Enhanced mode for Storage Isolation
两个模块的示意图。不要纠结顺序为什么是反的(

安装完成之后,请重启手机。

之后,打开「存储空间隔离」,开始设置隔离规则。

如果一切就绪,你应该看到这样的画面

这里要提一句的是:由于我已经设定好了,因此会在首页看到「已处理 X 次」「已为 XX 个应用启用隔离」的字样,但存储空间隔离默认不对任何应用启用隔离。每个应用都必须要手动干预,方可实现隔离效果。同时,已经在手机里产生的文件不会自动清理,需要手动删除。

开启隔离

点击「应用管理」,你就可以看到所有申请了存储权限的应用。

这些都是可以隔离的应用。未申请存储权限的不在上面

你也许会注意到,一些应用的右侧有一个「盾形对勾图标」。它表示在云端规则(公开托管在 GitHub 中。你可以 在这里 查看完整的列表)里,该应用虽然申请了存储权限,但是无滥用行为(在手机存储里随意存放文件)。

不过,未认证的应用未必一定会滥用存储空间。与之同时,认证的应用也有一小部分会滥用存储空间(例如未设定某个选项的 Minecraft)。是否真正隔离取决于你的个人意见。

如果决定对某个应用启用隔离,请点击对应应用的图标 / 名称,进入管理界面。

这里以 WPS Office 为例。

默认是不会给应用开启隔离的。如你所见

如果某个应用在云端规则里被标记为「会滥用」,且隔离后不会显著影响破坏应用的行为,那么你会在这里看到「推荐为此应用使用隔离」的字样。

打开隔离的方式很简单:打开「启用存储空间隔离」即可。

隔离了~

如果现在就打开被隔离的应用,并试着在应用内浏览手机里的文件,你会发现:手机里原有的各种文件都看不见了。

原有的东西不见了!

这代表隔离成功。

从今往后,该应用所有的写操作都会被隔离到一个单独的地方。而读操作除非主动设定,否则均无法进行。

设定读写规则

不过,基于每个应用的使用场景,我们需要对隔离的应用允许读写存储空间的某些位置(不然需要读取文件的应用就没得用了)。每个应用需要允许的内容不同,我会在文末稍微介绍一些实用的建议。

对于 WPS Office,需求无非就是:

  • 打开,并编辑手机里的文档。

那么,只需要允许 WPS Office 读取文档所在的目录就可以了。

设定也很简单。还是以 WPS Office 为例。我们再次回到「存储空间隔离」,并点击「可访问的文件夹」。

这里是设定各种访问权限的地方

你会在上面看到一些「模板」。

这些是总结出来的最常用的允许方案。通常,应用需要的合理文件操作,上面的模板都可以实现。这里的例子也不例外。我们只需要选择「模板:下载和文档(标准文件夹)即可」。

勾上了「模板:下载和文档(标准文件夹)」

这会允许 WPS Office 读取以下两个位于手机存储空间里的文件夹:

  • /sdcard/Download
  • /sdcard/Documents

通常,文档也只放在这两个位置,那么给予 WPS Office 这两个位置的读取权限就完全足够了。现在,再打开 WPS Office,你就会发现:程序可以拿到 Documents 和 Download 里面的文件了。

允许访问的目录出现了!

同理,你也可以对其它的应用进行这样的操作,以达到隔离和便利的最佳平衡点。

当然,你也许会问:如果我想要的文件路径不在模板里呢?也很简单:只需要使用「自定义(仅作用于此应用)」即可!

就是那个泛白的选项

点进去,你会进入一个类似于「文件管理器」的界面。在你需要允许应用访问的文件夹前面打上「对勾」,保存。

打勾即代表允许该文件夹被访问。记得点击右下角的「确定」以保存

设定导出规则

当然,还有另一个常用的场景。假定应用在被隔离的存储空间里放了个东西,要怎么把它取出来呢?

这就需要用到「存储空间隔离」里的另一个功能了:导出被隔离的文件。设定同样简单。这里将换成「哔哩哔哩概念」来演示。

点击「导出被隔离的文件」。

有点老的小蓝。但是刚好够用,不升级了

如果幸运的话,这里会有云端的导出规则。根据说明文字按需启用,通常就能解决大多数应用文件的导出问题。

不过,如果没有已知规则的话,就需要自行设定了。

转到「添加同步文件夹规则…」的选项,点击它。

添加规则的界面

这里的内容有点多,我们逐一介绍一下。

  • 描述:用于写给人看的标记,表示这条规则是用来干啥的。可以随意选择(不会影响到实际隔离效果)。
  • 来源路径:需要取出来的,位于隔离存储空间的文件路径。
  • 目的路径:取出来的文件,放置在实际手机存储空间的位置。

通常,我们只需要设定后两个选项即可。第一个是方便管理的标注,可以随意设定。

由于每个应用放置文件的路径是不统一的,因而设置「来源路径」需要你知道应用将文件放在何处。下文假定你已经知道了相应文件的位置。

点击「来源路径」,会看到一个对话框,请求选择路径:

这里是隔离空间一览

选择的方式如下:

  1. 点击列出的文件夹,直至对应应用存放相应文件的隔离路径。
  2. 确认无误后,点击「确定」。

听着很迷惑?为了方便理解,我们来假定这么一个隔离场景:

  • 「哔哩哔哩概念」原来将某个文件丢到 /sdcard/Documents 中
  • 为了方便管理,我希望将其内容放在 /sdcard/Documents/bilibili 中

基于这个场景,我们可以这么设定「来源路径」:

  • 点击对话框里的 Documents/sdcard 已经被默认加上)
  • 点击对话框右下方的「确定」

完整的操作录屏如下:

点击、再点击...

这样,我们就设定好了「来源路径」。接下来,是考虑这些文件放到哪里的问题,也就是程序里的「目的路径」。

还是上面那个场景,我们将这样设定「目的路径」:

  • 依次点击对话框里的「Documents」、「创建文件夹」、输入「bilibili」、点击「确定」
  • 点击对话框右下方的「确定」

文字太抽象,不好理解?这里是完整的操作录像:

略复杂... 不知道好不好理解

这样,设定就完成了。以后,「哔哩哔哩概念」在 /sdcard/Documents 下存放的文件,都会被「镜像」到 /sdcard/Documents/bilibili 中。3

同理,也可以对其它应用进行设定。如果设定得当,那么就可以实现:

  • 应用只会在自己的位置放置文件。除非你要求将其拿出来,放在别的位置。
  • 应用只能读取到自己的文件,以及提前设定为可以读取的文件。

既限定了合理的边界,又不会过分影响到手机的日常使用。4

如何确定导出规则

那么,该如何确定应用的导出规则呢?以下是一些建议:

  • 以需求作为出发点。需要什么文件,就导出什么;
  • 根据应用分类存放文件。例如:你也许希望微信和 QQ 下载下来的文件不要都混在 /sdcard/Download 中。取而代之,将其放在两个子文件夹内;
  • 若不进行导出,将会损坏某个应用的功能,且没有其它方法可以解决这个问题时。那就没办法了。给个例外吧……

替代品

当然,如果你希望以更加经济的方式体验到隔离存储空间的好处,你可以选择:

  • LT-No Litter:一个通过 Hook 系统框架来重定向应用读写请求的 Xposed 模块。

结语

以上就是两个保护隐私的方案介绍的全部内容了。

如你所见。隐私保护并没有想象中的那么困难。只是,它需要你的一点动手能力和时间。即将到来的联网控制、应用列表读取控制等内容,也将和这里的内容一样易于操作。

由于我是第一次在少数派上面写文章,可能会存在各种疏漏和不完善之处,欢迎批评指正 😊。

衷心希望这篇文章对你有帮助。也衷心感谢 Unsplash 提供的无版权精致图片,本文许多图片都来自于此。那么,下期见。

> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃

> 想申请成为少数派作者?冲!