sf467
(珂朵莉)
1
目前有没有让某个目录只能被特定的程序看到的方法,来防范可能存在的恶意程序对隐私文件的访问?
现在找到的思路要么是给不可信的程序加沙盒化,要么是使用强制访问控制。但是对于沙盒,它的思路是限制目前已知不可信的程序,并且需要进行调试。现在电脑上运行的程序太多了,都进行沙盒化太麻烦了,flatpak 又太大。强制访问控制的话,情况类似,都是只能去限制部分程序。
我想要的效果是,从文件这一方,限制所有程序对某些文件的访问,然后只给几个程序开白名单
比如浏览器的历史记录,本地的笔记,一些程序比如 rclone 的配置等等
强制访问控制的话,情况类似,都是只能去限制部分程序。
强制访问可不是只能限制部分程序,SELinux 是 Default-deny 的
sf467
(珂朵莉)
4
用过 apparmor ,问题是,只能用来限制特定的程序,而不是对所有的程序限制特定几个目录
如果是给所有程序分别写规则,那就太麻烦了。而且难以应对新的程序,就像是沙盒一样,需要不断的调试
如果你不要求阻止 root 看到那些文件,那方案其实挺多的(
sf467
(珂朵莉)
6
SELinux 太复杂了,就像是用 apparmor 给所有程序写规则一样,不想这么折腾。而且对于桌面用户,需要一直装新程序,换程序,这就需要不停的改动规则
sf467
(珂朵莉)
7
之前用过一个机制是给用 gocryptfs 给敏感目录加密,然后让特定的程序跑在 bwrap 沙盒里,在沙盒里给那几个目录解密挂载为明文
但是在 /proc 里会暴露明文,强迫症不是很满足
如果能仅仅被 root 查看的话,也可以
说到这个,我几年前第一次看 AppArmor 的时候就觉得它和我的期望是反过来的,它是对部分进程生效(opt-in),但规则是 default-deny 的。而我期望的是对全部进程生效,但 default-allow。但既然对部分进程生效那我为何不用 bwrap 呢(虽然那时候我还不知道 bwrap)
1 Like
sf467
(珂朵莉)
10
是这样,其实 apparmor 我也折腾过一些,它可以写全局规则,对可执行文件使用通配就可以了
但是我不知道为什么明明放行了所有操作并且处于 complain 模式,它仍然会导致一些程序运行异常
sf467
(珂朵莉)
11
是的,在沙盒内程序的 /proc/<pid>/root 中会给出这个程序所看到的明文视图
那有可能是 user namespace 的原因,如果用 root 创建 mount namespace 的话还能看得到吗(比如 sudo unshare 然后再切用户回来)
sf467
(珂朵莉)
14
今天试了这种方法,对于命令行程序是可以的,图形化程序就不行了,其它用户的程序不能连接当前用户的 wayland socket
wayland socket 倒是应该可以用 acl 解决,但麻烦的是应用程序产生的数据文件 uid 不一样比较麻烦
sf467
(珂朵莉)
17
那就看不到了,但是如果可以的话,我不想使用 root 来运行我的浏览器(
用 root 运行 bwrap 的话,要考虑的东西太多了
不是让你用 root 运行,是用 root unshare 之后再切回你的 uid 运行程序
sf467
(珂朵莉)
19
对于浏览器的话,使用另外的用户来运行,感觉会很麻烦,dbus、音频 socket 这些,还有下载文件的权限