Linux: Hostid auf einem System einstellen?

7

Ich habe einen Lizenzserver. Die Hardware fällt aus.

Die Lizenzsoftware hängt von der 'Host-ID' eines Systems ab, das von zurückgegeben wird /usr/bin/hostid. hostid ist eine eindeutige "numerische Kennung für den aktuellen Host".

Wenn ich die Software auf einen anderen Host migriere, scheint sich die 'Host-ID' zu ändern und die Lizenzsoftware schlägt fehl. Beachten Sie, dass der Hostname und die IP-Adresse dieses Systems gleich bleiben.

Zwei Fragen:

  1. Wie wird die Hostid bestimmt? Ist es zufällig, hängt es vom Hostnamen oder der MAC-Adresse usw. ab?

  2. Kann ich die Host-ID auf einem neuen System so einstellen, dass sie mit der Host-ID des alten Systems übereinstimmt?

Stefan Lasiewski
quelle

Antworten:

8

Angenommen, Sie beziehen sich hier auf die traditionelle Unix-Hostid. Wenn ich Software an ein System binden wollte, würde ich einen Dongle oder ein stärkeres Mittel verwenden, um ein System zu identifizieren, das als Hostid angesehen wird. Dies ist sehr willkürlich, aber dennoch.

Die Host-ID wird mit dem Bibliotheksaufruf "gethostid" abgerufen. Es ist lediglich ein generischer Wert, der, wenn er nicht festgelegt ist, auf der IPv4-Adresse des Hostsystems basiert.

Siehe "Mann 2 Gethostid"

Wenn in der glibc-Implementierung gethostid () die Datei mit der Host-ID nicht öffnen kann, erhält es den Hostnamen mit gethostname (2), übergibt diesen Hostnamen an gethostbyname_r (3), um die IPv4-Adresse des Hosts abzurufen, und gibt einen Wert zurück erhalten durch Bit-Twiddling der IPv4-Adresse. (Dieser Wert ist möglicherweise nicht eindeutig.)

Sie können es selbst auf alles einstellen, was Sie möchten, indem Sie die Datei / etc / hostid mit dem gewünschten Wert einrichten (vermutlich entspricht dies dem, was aus dem Programm 'hostid' auf Ihrer Spendenbox hervorgeht).

Das Einstellen ist allerdings ein kleiner Trick. Die Datei benötigte eine gepackte binäre Darstellung der Host-ID.

Ich habe Python verwendet, aber Sie können alles tun. (Ziemlich sicher, dass jemand ein einfacheres Mittel zum Drucken gepackter Bytes kennt.)

from struct import pack
f = open('/etc/hostid', 'w')
f.write(pack('i', 12345))
f.close()

Dadurch wird die Host-ID so festgelegt, dass gethostid denselben Wert wie die Spendenbox wie die Migrationsbox zurückgibt.

Matthew Ife
quelle
1

Afaik die Host-ID ist entweder die MAC-Adresse der (primären?) Netzwerkkarte oder eine Art gemischte Bezeichner mit anderen Werten wie IP-Adressen (dies hängt stark von der Art von * nix ab, die Sie ausführen).

Ich denke, es sollte möglich sein, diesen Wert auf jedem System zu "fälschen" (zumindest die Mac-Adresse kann überschrieben werden). Am besten bitten Sie jedoch den Softwareanbieter, die Lizenz auf das neue System zu übertragen. Ich sehe keinen guten Grund, warum dies nicht möglich sein sollte.

ercpe
quelle
Ich habe mein Beispiel zu stark vereinfacht. Auf diesem Server werden mehrere Lizenzserver ausgeführt, und das Ändern jeder Lizenz ist sehr zeitaufwändig.
Stefan Lasiewski
1
Vielleicht zeitaufwändig, aber der bessere Weg als mit seltsamen Fehlern umzugehen, die Hardware-IDs ändern, wird eingeführt.
Ercpe
Musste abstimmen, sorry. Manpages erklären klar, wie eine Host-ID festgelegt wird.
Matthew Ife
1
Bei meiner Arbeit haben wir viele Lizenzserver. Immer wenn sie über die Hostid sprechen, meinen sie die Mac-Adresse. Einige Lizenzserver mögen keine Linux-Systeme, die em # anstelle von eth # verwenden (falls Sie eine Migration auf Fedora planen). Wenn Sie den Mac des alten Servers klonen, müssen Sie ihn in eine andere L2-Domäne stellen, normalerweise über ein anderes Subnetz. Das würde bedeuten, dass Sie eine andere IP-Adresse haben, sodass Ihre Clients, die diese verwenden, auf den neuen Lizenzserver umgeleitet werden müssten.
becomingwisest
und ein Computer mit vielen Netzwerkkarten scheint die Host-ID bei jedem Neustart zu ändern ... Eine
Fälschung