Existe uma maneira de fornecer um nome de host específico para um aplicativo que seja diferente do nome de host da máquina no Linux?

Existe uma maneira de fornecer um nome de host específico para um aplicativo que seja diferente do nome de host da máquina no Linux?

Existe uma maneira de fornecer um nome de host específico para um aplicativo que seja diferente do nome de host da máquina no Linux? Basicamente, tenho um software que espera que a máquina local tenha um determinado nome de host diferente do nome de host da minha máquina. Em vez de alterar o nome do host da máquina globalmente, gostaria de um mecanismo onde pudesse executar o programa em um ambiente com o nome do host especificado ou executar o programa diretamente com o nome do host especificado.

Responder1

É possível com privilégios de root. Usarunshare --utspara criar um novo namespace UTS 1 , defina o nome do host desejado nele, suvolte para sua conta e execute o aplicativo. Por exemplo:

ongun@foo$ sudo -s
~ create a new namespace ~
root@foo# unshare --uts /bin/sh
~ this terminal now has its own namespace – change the hostname ~
root@foo# hostname quux
~ switch back ~
root@quux# sudo -s -u ongun
ongun@quux$ /usr/bin/game

Os namespaces são limitados ao processo de criação por padrão, portanto, o novo nome do host ficará visível apenas para os programas que você executadentroa janela "cancelar compartilhamento".

Observação:Não se esqueça de adicionar o novo nome de host /etc/hostscomo 127.0.0.1, pois muitos programas esperam/dependem dele para serem resolvidos.


1 Não pergunte o que significa "UTS". O melhor que sei é que é uma sobra do antigo Unix.

Responder2

Se o seu aplicativo não lê diretamente a saída hostnameou /etc/hostnameo arquivo, você sempre pode criar um alias para sua máquina como abaixo.

#
# /etc/hosts: static lookup table for host names
#

#<ip-address>   <hostname.domain.org>   <hostname>
127.0.0.1       localhost.localdomain   localhost MYHOSTNAME   OTHER_ALIAS
::1             localhost.localdomain   localhost MYHOSTNAMEv6 OTHER_ALIASv6

ou você pode tentar criar um chroot com um nome de host diferente, comoaqui

Responder3

Presumo que você não tenha o código-fonte do programa em questão. A leitura do nome do host de uma máquina é feita através de uma chamada sys,getnomedohost(), que seria difícil de contornar sem acesso ao código-fonte do programa.

Você deve então usar uma solução virtual para executar o programa. Contêineres, dockers e VMs têm grau de isolamento suficiente para permitir que você os renomeie com o valor necessário, sem comprometer sua máquina host.Um containeré uma solução muito leve que consumirá muito pouco dos recursos do host.

informação relacionada