使用 chroot 监狱来更改 uname -n 的结果

使用 chroot 监狱来更改 uname -n 的结果

我刚刚了解了 chroot 监狱是什么,所以如果这个问题没有多大意义,请原谅。

基本上我有两个进程在我的机器上本地运行,并且希望“uname -n”的结果对于每个进程(及其所有子进程)都不同。我如何使用 chroot 监狱来为我做到这一点?

答案1

你不能用 chroot 来做到这一点。但你可以通过改变来做到这一点悉尼科技大学命名空间,例如使用取消共享

mysystem# unshare --uts sh -c 'hostname test; uname -n'; uname -n
test
mysystem

同样,交互式:

第一个航站楼:

mysystem# unshare --uts bash
mysystem# hostname test
mysystem# exec bash # to refresh prompt
test# uname -n
test
test# strace uname -n 2>&1|tail
brk(NULL)                               = 0x5592a93f6000
brk(0x5592a9417000)                     = 0x5592a9417000
uname({sysname="Linux", nodename="test", ...}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
write(1, "test\n", 5test
)                   = 5
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++
test# 

第二个航站楼,不受影响:

mysystem# uname -n
mysystem
mysystem# 

只需退出第一个终端上的 shell,返回到从未更改名称空间的调用终端:

test# exit
mysystem# 

注意仅有的主机名发生变化。还有类似的命名空间用于各种功能(网络、安装点...)。这是容器的基石:所有容器都将被使用(容器的另一个主要基石是cgroups)。

相关内容