修改主机名并退出

修改主机名并退出

我用 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

修改主机名并退出

hostname buster-test
echo buster-test > /etc/hostname
echo "127.0.0.1 buster-test" >> /etc/hosts
exit

卸载

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

问题

现在主机的主机名设置为buster-test即使我在另一个 shell 中登录

为什么主机名改变了?当在 chroot 内部执行操作时,是否还有其他事情可能会在 chroot 外部发生变化?

答案1

运行hostname buster-test更改了正在运行的内核中的主机名(在 Linux 上,在当前悉尼科技大学命名空间)。chroot其本身根本无法控制这一点,因此主机名更改在外部也是可见的。

当您使用 时chroot,您仅限制对文件系统的一部分的访问;任何不在文件系统中管理的内容都不会受到chroot.这包括网络设置、日期和时间、用户权限等。要限制此类更改,您需要使用命名空间(或非 Linux 系统上的类似技术);在 Linux 上,您可以通过运行以下命令来隔离进程unshare

答案2

主机名是系统调用nodename的一部分uname(2),相关数据驻留在内核中。

除非您有一个能够处理具有自己的内核数据结构的区域之类的内核,否则简单的方法chroot没有帮助。

答案3

systemd-nspawn可以用来代替chroot获取容器化的 chroot。与容器相比,容器在主机和来宾系统之间具有更好的隔离性chroot

systemd-nspawn可用于在轻量级命名空间容器中运行命令或操作系统。在许多方面它与 类似chroot(1),但更强大,因为它完全虚拟化文件系统层次结构、进程树、各种 IPC 子系统以及主机和域名。

相关内容