在 chroot 环境中更改主机名也会更改外部的主机名

rub*_*o77 1 chroot

我用 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 之外发生变化的事情?

Ste*_*itt 6

Runninghostname buster-test更改了正在运行的内核中的主机名(在 Linux 上,在当前的UTS 命名空间中)。chroot本身根本无法控制它,因此主机名更改在外部也是可见的。

当您使用 时chroot,您只是限制对文件系统的一部分的访问;任何不在文件系统中管理的东西都不会受限于由chroot. 这包括网络设置、日期和时间、用户权限等。要限制此类更改,您需要使用命名空间(或非 Linux 系统上的类似技术);在 Linux 上,您可以通过使用unshare.

  • 哦,对了,您*现在*不需要使用它,您正在尝试将其存储在目标磁盘中,以便在您的测试系统中使用它,对吗?那么是的,它将在测试系统启动期间被读取,因此在 chroot 中写入 `/etc/hostname` 就足够了。事实上,这里甚至不需要 chroot,您可以将这两个文件写入已安装的文件系统中的“etc”中。 (2认同)
  • `unshare --uts chroot /media/vm01.buster-test-disk/` 阻止对“主机名”和“域名”的更改影响系统的其余部分。 (2认同)