O que determina o nome do host do Linux?

13

Nos poucos anos em que uso o Linux como meu sistema principal, especificamente o Fedora, sempre vi meu nome de host definido como "localhost", com exceção de quando me conecto a algumas redes e ele se torna meu IP. Hoje, experimentei o seguinte comportamento, que estou tendo problemas para entender.

Eu configurei uma instalação do Ubuntu em outra partição do meu laptop, definindo um nome de computador / nome de host durante a instalação do Ubuntu. Quando eu reiniciei o Fedora, o Fedora havia atualizado meu nome de host para o nome que eu defini na instalação do Ubuntu.

Eu sempre pensei que o nome do host estava configurado e armazenado na partição da instalação da distribuição, e de fato o conteúdo do / etc / hostname no Fedora ainda lia "localhost.localdomain", mas executar o hostnamecomando mostra o novo nome do host. Ambas as instalações compartilham uma partição efi boot, mas são discretas. Gostaria de saber de onde e por que a instalação do Fedora está lendo o novo nome de host?

fedora
fonte
Qual é a sua entrada hosts:no /etc/nsswitch.conf?
Cutrightjm 18/05
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Duplicação entre sites: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

Respostas:

12

O hostnameprograma executa um syscall uname, como pode ser visto na execução:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

Na página do manual uname syscall , ele diz que o syscall recupera a seguinte estrutura do kernel:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Portanto, o nome do domínio vem do sistema NIS / YP, se acreditarmos no comentário. Portanto, mais do que provável, pode haver um serviço NIS / YP em sua rede que trote de volta o nome definido para você pelo sistema operacional ubuntu.

einonm
fonte
5
Isso não é verdade, consulte a hostname(1)página de manual que explica como o nome do host é definido e retornado. Apesar da semelhança no nome, o nome de domínio NIS / YP não tem nada a ver com o nome de domínio FQDN / DNS que é retornado pelo resolvedor. Se você não configurou o NIS / YP, o nome de domínio do NIS / YP será desativado.
bodgit
"Nodename" é o campo que mais lhe interessa? Estaria em consonância com unix nostalgy para ainda consideram redes IP uma coisa definida opcional e implementação :)
rackandboneman
5

Existem dois conceitos independentes (!) De um nome de host em um sistema Linux.

Existe o que o kernel considera o nome do host local (conforme tratado pelas chamadas do sistema gethostname / uname e sethostname) independente de qualquer conectividade de rede - essa mecânica ainda existiria se você construísse um kernel sem capacidade para rede TCP / IP.

Há um ou mais nomes de host que estão realmente conectados aos endereços TCP / IP (ou outra pilha de rede - nem todas as redes do mundo são IP!) Que o host possui e são tratados no espaço do usuário pelas funções da biblioteca do resolvedor (parte de libc), que determinará esse nome interpretando fontes (arquivo local / etc / hosts, DNS, NIS ....) de acordo com as regras que você fornece nos arquivos de configuração apropriados (/etc/nsswitch.conf, / etc /host.conf etc ...).

rackandboneman
fonte
3

Provavelmente o Ubuntu conectado à Internet através do seu roteador doméstico durante a instalação. Para isso, relatou seu nome de host ao roteador e obteve um IP local temporário.

Quando você agora reinicia o Fedora, ele se conecta ao mesmo roteador para obter seu endereço IP, mas a concessão antiga criada para o Ubuntu ainda é válida. Como é a mesma máquina com a mesma placa de rede e o mesmo endereço MAC de hardware, a mesma concessão será reutilizada.

Meu palpite é que o roteador envia o nome do host no qual a concessão de IP foi registrada e o Fedora escolhe isso.

Infelizmente não tenho evidências ou citação para apoiar minha resposta, posso apenas falar com a experiência pessoal de instalar o Ubuntu em inicialização dupla com o Windows. Naquela época, o Ubuntu se recusava a definir o mesmo nome de host durante a instalação que eu usei no Windows, porque alegava que o nome já estava presente na rede. Provavelmente temos algo semelhante acontecendo aqui.

Para verificar se o que eu acho que também se aplica à sua situação, tente revogar sua concessão de IP na interface de configuração do seu roteador e reinicie o Fedora. Se ele não for mais o nome de host do Ubuntu, eu devo estar certo.

Byte Commander
fonte
É realmente possível que um cliente DHCP envie um nome de host para o servidor ou leia um nome de host no servidor. Quase tudo faz o primeiro (embora quando o nome do host esteja definido como "localhost", é improvável que tenha muito efeito :). A leitura de um nome de host do servidor DHCP é possível com clientes DHCP do Linux, mas meu entendimento era que esse suporte nem sempre era ativado ( por exemplo ). Interessante saber que um Fedora mais recente parece fazer isso.
sourcejedi