刚刚安装火狱在 Ubuntu 16.04 上(版本0.9.38)并根据这个Linux 杂志 文章,默认情况下它应该回读整个文件系统:
沙箱中的程序仅有所有目录的读取权限,因此无法操作任何重要文件。
现在,我在我的电脑上尝试了以下操作:
touch /disk5/test.txt
firejail gvim /disk5/test.txt
- 修改文件并保存(
wq!
) cat /disk5/test.txt
- 显示所做的更改格维姆期间火狱会议!
这是预期的行为吗?不是火狱应该保护我免于覆盖原始文件吗?我做错了什么?请注意,它/disk5
安装在根文件系统中,在我的/home
.
提出了一个错误github
答案1
firejail
并不是一个让一切恢复正常的神奇工具。它是一种安全工具,你定义你自己的规则来处理事情。例如,这些论点:
firejail --noprofile
根本不会提供任何保护。因为你没有指定任何约束,而 firejail 默认是允许的。为了使某些目录为只读,你应该明确地写出来。类似于:
firejail --noprofile --read-only=/ --read-only=~ --read-only=/tmp
(我分别写了和/
,因为 firejail 有一种有点令人惊讶的行为,它会根据一些不那么简单的规则对你的指令进行排序,并在中间制作自己的坐骑。)~
/tmp
~
此外,如果没有任何--caps.drop=all
参数,--seccomp
您的程序无论如何都不会安全。因为该进程可以通过 unix 套接字、抽象套接字等与其他进程通信,从而利用它们的漏洞。如果您想要一个相对不错的“监狱”,请至少添加 seccomp、caps.drop=all 和 nonewprivs 指令。
编辑:您提到的引述可能是错误的。(或者我认为是错误的。)这比“一切都是只读的”更复杂。
答案2
为什么要将程序保存在非标准 Unix 目录(例如 /disk5)中?这绝对是自找麻烦。将可执行文件存储在常规位置,例如 /bin、/usr/bin、/usr/local/bin 甚至 /opt。确保所有可执行文件都归 root 所有,而普通用户没有对它们的写访问权限。Linux 是 Unix 系统,只要遵守 Unix 规则,您就会安全。