usando uma cadeia chroot para alterar os resultados de uname -n

0

Acabei de saber o que é uma prisão chroot, então me desculpe se essas perguntas não fizerem muito sentido.

Basicamente eu tenho dois processos sendo executados localmente em minha máquina e gostaria que os resultados de "uname -n" fossem diferentes para cada um desses processos (e todos os seus filhos). Como posso usar uma cadeia chroot para fazer isso por mim?

    
por Iliketoproveit 14.05.2018 / 18:22

1 resposta

1

Você não pode fazer isso com o chroot. Mas você pode fazer isso alterando o namespace do UTS , por exemplo, usando cancelar o compartilhamento .

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

O mesmo, interativamente:

Primeiro terminal:

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# 

Segundo terminal, não afetado:

mysystem# uname -n
mysystem
mysystem# 

Simplesmente saindo do shell no primeiro terminal, retorna para o que nunca mudou o namespace:

test# exit
mysystem# 

Observe que somente o nome do host é alterado. Existem namespaces semelhantes para vários recursos (rede, pontos de montagem ...). Esse é o bloco fundador dos contêineres: todos eles estão em uso (o outro bloco principal para contêineres é cgroups ).

    
por 14.05.2018 / 19:04

Tags