我用 chroot 进入我的测试系统
mount /dev/vg0/vm01.buster-test-disk /media/vm01.buster-test-disk/
mount -t proc none /media/vm01.buster-test-disk/proc
mount --bind /dev /media/vm01.buster-test-disk/dev
mount -t sysfs sysfs /media/vm01.buster-test-disk/sys
chroot /media/vm01.buster-test-disk/ /bin/bash
Run Code Online (Sandbox Code Playgroud)
hostname buster-test
echo buster-test > /etc/hostname
echo "127.0.0.1 buster-test" >> /etc/hosts
exit
Run Code Online (Sandbox Code Playgroud)
umount /media/vm01.buster-test-disk/proc
umount /media/vm01.buster-test-disk/dev
umount /media/vm01.buster-test-disk/sys
umount -l /media/vm01.buster-test-disk
Run Code Online (Sandbox Code Playgroud)
现在,buster-test
即使我在另一个 shell 中登录,主机也将其主机名设置为
为什么主机名变了?当在 chroot 内部进行操作时,是否还有其他可能在 chroot 之外发生变化的事情?
Runninghostname buster-test
更改了正在运行的内核中的主机名(在 Linux 上,在当前的UTS 命名空间中)。chroot
本身根本无法控制它,因此主机名更改在外部也是可见的。
当您使用 时chroot
,您只是限制对文件系统的一部分的访问;任何不在文件系统中管理的东西都不会受限于由chroot
. 这包括网络设置、日期和时间、用户权限等。要限制此类更改,您需要使用命名空间(或非 Linux 系统上的类似技术);在 Linux 上,您可以通过使用unshare
.