Was bestimmt den Linux-Hostnamen?

13

In den wenigen Jahren, in denen ich Linux als Hauptsystem verwendet habe, insbesondere Fedora, wurde mein Hostname immer auf "localhost" gesetzt, mit der Ausnahme, dass ich mich mit einigen Netzwerken verbinde und dies meine IP wird. Heute habe ich folgendes Verhalten erlebt, das ich allerdings nur schwer verstehe.

Ich habe eine Ubuntu-Installation auf einer anderen Partition meines Laptops eingerichtet und während der Ubuntu-Installation einen Computernamen / Hostnamen festgelegt. Als ich Fedora neu startete, hatte Fedora meinen Hostnamen auf den Namen aktualisiert, den ich in der Ubuntu-Installation festgelegt hatte.

Ich dachte immer, der Hostname sei auf der Partition der Distribution-Installation konfiguriert und gespeichert, und tatsächlich lautete der Inhalt von / etc / hostname auf Fedora immer noch "localhost.localdomain", aber wenn der hostnameBefehl ausgeführt wird, wird der neue Hostname angezeigt. Beide Installationen teilen sich eine EFI-Boot-Partition, sind aber ansonsten diskret. Ich frage mich, woher und warum die Fedora-Installation den neuen Hostnamen liest.

Fedora
quelle
Was ist dein Eintrag hosts:in /etc/nsswitch.conf?
Cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Cross-Site-Duplikat: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

Antworten:

12

Das hostnameProgramm führt einen Systemaufruf ohne Namen aus, wie aus dem Ausführen ersichtlich ist:

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

In der Manpage zu uname syscall heißt es, dass syscall die folgende Struktur aus dem Kernel abruft:

  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
           };

Der Domainname stammt also aus dem NIS / YP-System, wenn wir dem Kommentar glauben. Höchstwahrscheinlich gibt es einen NIS / YP-Dienst in Ihrem Netzwerk, der den vom Ubuntu-Betriebssystem festgelegten Namen an Sie zurückgibt.

einonm
quelle
5
Dies ist nicht wahr, siehe die hostname(1)Manpage, die erklärt, wie der Hostname gesetzt und zurückgegeben wird. Trotz der Namensähnlichkeit hat der NIS / YP-Domänenname nichts mit dem vom Resolver zurückgegebenen FQDN / DNS-Domänennamen zu tun. Wenn Sie NIS / YP nicht konfiguriert haben, wird der NIS / YP-Domänenname nicht festgelegt.
Bodgit
Ist "Knotenname" das Feld, das Sie interessiert? Wäre im Einklang mit Unix-Nostalgie, IP-Netzwerke immer noch als eine optionale und implementierungsdefinierte Sache zu betrachten :)
Rackandboneman
5

Es gibt zwei unabhängige (!) Konzepte für einen Hostnamen auf einem Linux-System.

Der Kernel betrachtet den lokalen Hostnamen (wie er von den Systemaufrufen gethostname / uname und sethostname behandelt wird) unabhängig von der Netzwerkkonnektivität. Diese Mechanismen wären weiterhin vorhanden, wenn Sie einen Kernel ohne TCP / IP-Netzwerkfähigkeit erstellen würden.

Es gibt einen oder mehrere Hostnamen, die tatsächlich mit TCP / IP-Adressen (oder einem anderen Netzwerkstapel - nicht alle Netzwerkadressen auf der Welt sind IP-Adressen!) Verbunden sind. Diese Adressen werden im Benutzerbereich von den Resolver-Bibliotheksfunktionen (Teil von) verwaltet libc), der einen solchen Namen ermittelt, indem er die Quellen (lokale Datei / etc / hosts, DNS, NIS ....) gemäß den Regeln interpretiert, die Sie in den entsprechenden Konfigurationsdateien (/etc/nsswitch.conf, / etc.) angegeben haben /host.conf etc ...).

Rackandboneman
quelle
3

Wahrscheinlich ist Ubuntu während der Installation über Ihren Heimrouter mit dem Internet verbunden. Dazu hat er seinen Hostnamen an den Router gemeldet und eine temporäre lokale IP erhalten.

Wenn Sie jetzt Fedora neu starten, wird eine Verbindung zum selben Router hergestellt, um dessen IP-Adresse zu erhalten. Die für Ubuntu erstellte alte Lizenz ist jedoch weiterhin gültig. Da es sich um denselben Computer mit derselben Netzwerkkarte und derselben Hardware-MAC-Adresse handelt, wird dieselbe Lease wiederverwendet.

Ich vermute, dass der Router den Hostnamen sendet, auf dem das IP-Lease registriert wurde, und Fedora das aufnimmt.

Leider habe ich keine Beweise oder Zitate, um meine Antwort zu stützen, ich kann nur mit der persönlichen Erfahrung sprechen, Ubuntu in Dual-Boot mit Windows zu installieren. Damals weigerte sich Ubuntu, während der Installation denselben Hostnamen wie unter Windows zu verwenden, da behauptet wurde, der Name sei bereits im Netzwerk vorhanden. Wahrscheinlich passiert hier etwas Ähnliches.

Um zu überprüfen, ob das, was ich vermute, auch auf Ihre Situation zutrifft, versuchen Sie, Ihre IP-Lease in der Konfigurationsoberfläche Ihres Routers zu widerrufen und dann Fedora neu zu starten. Wenn Ubuntus Hostname nicht mehr benötigt wird, sollte ich recht haben.

Byte Commander
quelle
Es ist in der Tat möglich, dass ein DHCP-Client einen Hostnamen an den Server sendet oder einen Hostnamen vom Server liest. Das meiste erledigt alles zuerst (wenn der Hostname auf "localhost" gesetzt ist, ist es unwahrscheinlich, dass dies viel bewirkt :). Lesen Sie einen Hostnamen aus dem DHCP - Server ist möglich mit Linux DHCP - Clients, aber mein Verständnis war diese Unterstützung nicht immer aktiviert wurde ( zB ). Interessant zu hören, dass ein neueres Fedora dies zu tun scheint.
Sourcejedi