突发奇想的安全需求

目前有没有让某个目录只能被特定的程序看到的方法,来防范可能存在的恶意程序对隐私文件的访问?

现在找到的思路要么是给不可信的程序加沙盒化,要么是使用强制访问控制。但是对于沙盒,它的思路是限制目前已知不可信的程序,并且需要进行调试。现在电脑上运行的程序太多了,都进行沙盒化太麻烦了,flatpak 又太大。强制访问控制的话,情况类似,都是只能去限制部分程序。

我想要的效果是,从文件这一方,限制所有程序对某些文件的访问,然后只给几个程序开白名单
比如浏览器的历史记录,本地的笔记,一些程序比如 rclone 的配置等等

SELinux / AppArmor 了解一下?

强制访问控制的话,情况类似,都是只能去限制部分程序。

强制访问可不是只能限制部分程序,SELinux 是 Default-deny 的

用过 apparmor ,问题是,只能用来限制特定的程序,而不是对所有的程序限制特定几个目录
如果是给所有程序分别写规则,那就太麻烦了。而且难以应对新的程序,就像是沙盒一样,需要不断的调试

如果你不要求阻止 root 看到那些文件,那方案其实挺多的(

SELinux 太复杂了,就像是用 apparmor 给所有程序写规则一样,不想这么折腾。而且对于桌面用户,需要一直装新程序,换程序,这就需要不停的改动规则

之前用过一个机制是给用 gocryptfs 给敏感目录加密,然后让特定的程序跑在 bwrap 沙盒里,在沙盒里给那几个目录解密挂载为明文
但是在 /proc 里会暴露明文,强迫症不是很满足

如果能仅仅被 root 查看的话,也可以

说到这个,我几年前第一次看 AppArmor 的时候就觉得它和我的期望是反过来的,它是对部分进程生效(opt-in),但规则是 default-deny 的。而我期望的是对全部进程生效,但 default-allow。但既然对部分进程生效那我为何不用 bwrap 呢(虽然那时候我还不知道 bwrap)

1 Like

/proc 会暴露明文吗,我不是很了解

是这样,其实 apparmor 我也折腾过一些,它可以写全局规则,对可执行文件使用通配就可以了
但是我不知道为什么明明放行了所有操作并且处于 complain 模式,它仍然会导致一些程序运行异常

是的,在沙盒内程序的 /proc/<pid>/root 中会给出这个程序所看到的明文视图

那你用不同的用户运行吧。

那有可能是 user namespace 的原因,如果用 root 创建 mount namespace 的话还能看得到吗(比如 sudo unshare 然后再切用户回来)

今天试了这种方法,对于命令行程序是可以的,图形化程序就不行了,其它用户的程序不能连接当前用户的 wayland socket

给权限就行。或者你用特权进程proxy一下。

wayland socket 倒是应该可以用 acl 解决,但麻烦的是应用程序产生的数据文件 uid 不一样比较麻烦

那就看不到了,但是如果可以的话,我不想使用 root 来运行我的浏览器(
用 root 运行 bwrap 的话,要考虑的东西太多了

不是让你用 root 运行,是用 root unshare 之后再切回你的 uid 运行程序

对于浏览器的话,使用另外的用户来运行,感觉会很麻烦,dbus、音频 socket 这些,还有下载文件的权限

细说(
没理解这个过程