我想要一些像 Windows 上的 Sandboxie 这样的功能。
也就是说,我想在沙箱中运行一个程序。该程序不会检测沙箱,通常可以从沙箱外部读取文件。但是当程序尝试写入文件时,文件只会写入沙箱中,而不会写入外部。然后,可能在沙箱之外,我希望以某种方式仅查看在沙箱内创建的文件。
我读在 ubuntu 上安装 Sandboxie但这似乎不是我想要的。
根据http://www.linux-magazine.com/Issues/2015/173/Firejail,Firejail 具有覆盖功能,但当创建这些文件的程序结束时,这些文件会被销毁。相反,我想检查这些文件。
看来这些覆盖内容自内核 3.18 以来就是 Linux 的一部分,不确定是否有办法使用它们来实现我想要的效果。
我有 Lubuntu 16.04.1 和 Linux 内核 4.4.0-53-generic。
答案1
Firejail 可以配置为使用允许保留的文件“白名单”,这样您就可以使用它而不会删除您想要保留的文件。如果您只是想看看会写入哪些文件,您也可以阅读日志。
https://firejail.wordpress.com/features-3/man-firejail/
--read-write=dirname_or_filename
Set directory or file read-write. Only files or directories
belonging to the current user are allowed for this operation.
Example:
$ mkdir ~/test
$ touch ~/test/a
$ firejail --read-only=~/test --read-write=~/test/a
在 Docker 中运行应用程序将是一个更复杂的情况,除非它们是命令行应用程序,否则它们将无法工作,因为没有额外的配置就没有图形服务器共享。此外,docker 的设计更有助于这些单独的容器相互通信,这是你没有说过你需要的东西(在这个沙盒模型中可能也不需要)
答案2
您可以为此使用 Docker 容器。Docker 容器是名牌旧 LXC 容器,很久以前被称为 BSD jails。使用 Docker 容器及其卷安装功能,以便您事后检查数据并保存。