在下面的链接文章中,他们解释了如何创建“chroot”/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
目录可以通过/tmp
chroot 环境的目录进行访问。这样,您的 chroot 环境将使其/tmp
目录与系统的/tmp
.如果您跳过此步骤,则 chroot/tmp
目录将指向您的系统/tmp
目录。
chroot /root/chroot
在这里您进入您的 chroot 环境。
现在你的问题:
第一个安装命令会影响第二个安装命令吗?
是的。您需要先绑定挂载 chroot 环境的根目录 (
/root/chroot
),然后才能绑定它的/tmp
目录。在绑定到/root/chroot/tmp
之前不会存在。/
/root/chroot
第二步,他们将新目录绑定
/root/chroot
到根目录。这是否意味着第三步/root/tmp
实际上指向/root/chroot/root/tmp
?是的。上的所有内容
/
都可以通过 访问/root/chroot
。从哪里来
/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