您能解释一下这个“chroot”/tmp 目录的创建吗?

您能解释一下这个“chroot”/tmp 目录的创建吗?

在下面的链接文章中,他们解释了如何创建“chroot”/tmp 目录。我对他们的所作所为有点困惑。有人能解释一下以下命令的作用吗?

Noexec 和 /tmp 故障排除

1. # mkdir -p /root/chroot /root/tmp 
2. # mount --bind / /root/chroot 
3. # mount --bind /root/tmp /root/chroot/tmp
4. # chroot /root/chroot

第一步,他们为什么要创建/根目录/tmp并不是/根/chroot/tmp

第一个安装命令会影响第二个安装命令吗?第二步,他们绑定新目录/根目录/chroot到根目录。这是否意味着在第三步/根目录/tmp实际上指向/根/chroot/根/tmp?哪里有/根/chroot/tmp来自?这就是我感到困惑的部分。

这背后的逻辑是什么?

答案1

mkdir -p /root/chroot /root/tmp

创建用于 chroot 环境的目录。/root/chroot将是您的 chroot 环境的根目录。/root/tmp将充当/tmp您的 chroot 环境的目录。

mount --bind / /root/chroot

这将使您的/目录可以通过/root/chroot.将其视为/上的镜像目录/root/chroot(即使它不是真正的镜像,它是指向 的指针/)。

mount --bind /root/tmp /root/chroot/tmp

这将使您的自定义/root/tmp目录可以通过/tmpchroot 环境的目录进行访问。这样,您的 chroot 环境将使其/tmp目录与系统的/tmp.如果您跳过此步骤,则 chroot/tmp目录将指向您的系统/tmp目录。

chroot /root/chroot

在这里您进入您的 chroot 环境。

现在你的问题:

  1. 第一个安装命令会影响第二个安装命令吗?

    是的。您需要先绑定挂载 chroot 环境的根目录 ( /root/chroot),然后才能绑定它的/tmp目录。在绑定到/root/chroot/tmp之前不会存在。//root/chroot

  2. 第二步,他们将新目录绑定/root/chroot到根目录。这是否意味着第三步/root/tmp实际上指向/root/chroot/root/tmp

    是的。上的所有内容/都可以通过 访问/root/chroot

  3. 从哪里来/root/chroot/tmp

    /root/chroot/tmp在步骤 2 中绑定/到后就会存在。/root/chroot

答案2

在步骤 2 中,您将绑定安装//root/chroot.

如果你创建步骤2.5,ls /root/chroot你会发现列出的所有目录/;包括系统的/tmp目录。

如果您touch /root/chroot/test会看到这test也在 的输出中ls /。如果您rm /test会注意到它也从/root/chroot/.所以//root/chroot/是完全相同的地方。

如果您想更详细地查看,请运行stat /,然后stat /root/chroot您会发现两者都返回相同的Inode. AnInode是一种数据结构,引用磁盘上的特定文件/目录。由于它们都返回相同的内容Inode,因此两个路径都指向完全相同的目录。

因此,第 3 步将目录挂载到已绑定挂载的/root/tmp系统目录上。/tmp/root/chroot

当您chroot执行步骤 4 时,您将/使用in 目录而不是系统范围的/tmp目录进入 chroot 状态。这样,chroot 就不会与系统上的每个其他用户共享 a。/root/tmp/tmp

相关内容