有没有办法将正在运行的程序与 Linux 系统的其余部分隔离?

有没有办法将正在运行的程序与 Linux 系统的其余部分隔离?

首先,我了解虚拟化和容器。我确信您脑海中浮现的就是“他想要容器”。 (别否认!)

然而,容器就像 chroot:如果你想在其中执行 bash,你需要在容器 FS 中的某个位置复制/镜像 bash 可执行文件以及所有必需的库。 (如果我误解了什么,请纠正我)。


我想知道的是我是否可以从当前命名空间启动像busybox这样的程序(使用原始FS,因此不需要复制)并且然后隔离它(例如使用 Linux FS 命名空间)以使其访问一个唯一的目录。

不知何故,ssh(实际上是 sftp)似乎能够执行类似的操作,而不需要 sshd 可执行文件位于 chrooted FS 中。但我仍然缺乏了解自己发生的事情的能力。

答案1

我想您可能正在寻找容器。

或者也许不是。毕竟,Linux 命名空间可以非常透明。我不相信有一种方法可以unshare为已经被调用的进程提供命名空间,但是您绝对可以unshare在调用时使用命名空间,几乎没有效果。

cd   /tmp
echo you >hey
sudo unshare -m busybox
echo hey >you; cat  hey

you

...以及从另一个终端...

cd   /tmp
cat  you

hey

...坐骑树是共享默认情况下,来自父命名空间,并且,尽管busybox的挂载传播标志全部设置为私人的默认情况下,直到挂载树的更改以某种方式在命名空间中生效之前,这没有什么区别。这不需要做通过busybox 也可以。

...在busybox的终端...

echo "#$$"

#8854

...现在从另一个...

sudo nsenter -t8854 -m mount -t tmpfs none /tmp
cd .; cat hey

you

...但是从busybox的终端,因此从命名空间我们刚刚实现了mount...

cd .;  cat hey

cat: hey: no such file or directory

/tmp...因为新的私有 tmpfs 已安装在命令中的共享上nsenter...

cd ..
umount tmp
cat tmp/hey

you

相关内容