Linux 的沙盒方式

Linux 的沙盒方式

我想知道是否存在一种适用于 Linux 的沙盒解决方案:当我想在不安装的情况下尝试软件时,我会获取所有 .deb 文件并将其提取到某处,然后我做两件事:

export PATH="$PATH:/home/user/testing_app/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/user/testing_app/lib"

大多数时候它运行良好,但有时应用程序需要/etc配置或其他资源(如共享文件夹上的图像),而我无法解决。

我知道chrootwithmount -o bind会为我提供一个独立的环境,但我仍然需要绑定/bin/etc目录来使用其他依赖项。

好吧,我想知道您是否知道任何解决方案,例如绑定两个目录并混合它们的内容并仅在其中一个目录中记录新的/编辑的内容。

编辑:
来自维基百科:“在计算机安全中,沙箱是一种分离正在运行的程序的安全机制。它通常用于执行未经测试的代码,或来自未经验证的第三方、供应商、不受信任的用户和不受信任的网站的不受信任的程序。

有时候有多个应用程序可以解决我的问题,在这种情况下,我想获得更适合我需求的应用程序,所以我安装了所有应用程序,但我只是想尝试一下,我想“恢复”我的机器状态,就像安装之前一样,包括软件所做的所有更改。仅仅删除它们是不够的,因为它们会在我的主页上生成点文件,或生成日志文件,或更改其他软件的设置,我希望记录应用程序运行时所做的所有更改,并撤消它们。

是的,虚拟机可以解决我的问题,但除了占用大量空间来容纳两个或更多 Linux 安装之外,它还会降低性能。

在我的磁盘上进行 chroot 的独立 Linux 安装比 VM 的性能更好,但由于重复的文件,它仍然占用了一些不需要的空间,几乎所有文件都与我原来的发行版相同。

这就是促使我打开这个话题的原因,如果我能以某种方式返回到我的整个磁盘的先前状态,就像版本控制系统一样,或者像 qemu-img 的备份文件一样“如果使用 -o backing_file=filename 指定了基础映像,则该映像将仅记录其自身与基础映像之间的差异”。当然,这仍然不是最好的解决方案,因为我希望仅撤消特定应用程序的更改。

理想的解决方案是这样的:

$ mkdir dir1 dir2
$ echo "Lipsum" > dir1/file1
$ echo "Original" > dir1/file2
$ sudo mount -o bind -some-magic-flag dir1 dir2
$ echo "Changed" > dir2/file2
$ touch dir2/file3
$ ls -1 dir2
file1
file2
file3
# it's ok
$ ls -1 dir1
file1
file2
# file3 sould not be here!
$ sudo umount dir2
$ ls -1 dir2
file2
file3
# file1 was not changed, but file2 was
$ cat dir1/file2
Original
$ cat dir2/file2
Changed

这就是我需要的!

答案1

创建虚拟机,启动它,然后在那里应用您的安装。如果可以,则将其安装在您的物理机上;如果不可以,则删除虚拟机。ubuntu 中的虚拟机可能对你有用。

在 Linux 中,沙箱就是一个 VM。

相关内容