BEZEICHNUNG
machine-id - Lokale Konfigurationsdatei zur Maschinenkennung
ÜBERSICHT
/etc/machine-id
BESCHREIBUNG
Die Datei /etc/machine-id enthält eine eindeutige Maschinenkennung des lokalen Systems, die während der Installation oder des Systemstarts gesetzt wird. Die Maschinenkennung ist eine einzelne, hexadezimale 32-Zeichen-Kennung (in Kleinbuchstaben), die mit einem Zeilenumbruch abgeschlossen wird. Nach der Dekodierung aus dem hexadezimalen entspricht sie einem 16-Byte/128-Bit-Wert. Diese Kennung darf nicht komplett nur aus Nullen bestehen.
Die Maschinenkennung wird normalerweise während der Systeminstallation oder des ersten Systemstarts aus einer Zufallsquelle erstellt und bleibt für alle nachfolgenden Systemstarts konstant. Für zustandslose Systeme kann sie optional falls notwendig zur Laufzeit während der frühen Systemstartphase erstellt werden.
Die Maschinenkennung kann beispielsweise beim Systemstart über das Netz mit dem Kernelbefehlszeilenparameter systemd.machine_id= oder durch Übergabe der Option --machine-id= an Systemd gesetzt werden. Eine in dieser Weise festgelegte Maschinenkennung hat eine höhere Priorität und wird statt der in /etc/machine-id gespeicherten Kennung verwandt.
Die Maschinenkennung ändert sich nicht, wenn sich die lokale oder Netzkonfiguration ändert oder die Hardware ausgetauscht wird. Daher und aufgrund ihrer größeren Länge ist sie eine nützlichere Ersetzung des von POSIX festgelegten Aufrufs gethostid(3).
Diese Maschinenkennung folgt dem gleichen Format und der gleichen Logik wie die Maschinenkennung von D-Bus.
Diese Kennung identifiziert den Rechner eindeutig. Sie sollte »vertraulich« behandelt und nicht in unvertrauenswürdigen Umgebungen, insbesondere im Netz offengelegt werden. Falls für einige Anwendungen eine stabile Kennung, die an eine Maschine gebunden ist, benötigt wird, darf die Maschinenkennung oder Teile davon nicht direkt verwandt werden. Stattdessen sollte die Maschinenkennung mit einer kryptographischen, mit einem Schlüssel versehenen Funktion in einen Hash verwandelt werden, wobei ein fester, anwendungsbezogener Schlüssel verwandt werden sollte. Damit ist die Kennung ausreichend eindeutig und in einer konstanten Art und Weise von der Maschinenkennung abgeleitet, aber es gibt dann keine Möglichkeit, die ursprüngliche Maschinenkennung aus der anwendungsspezifischen abzuleiten. Das API sd_id128_get_machine_app_specific(3) stellt eine Implementierung eines solchen Algorithmus bereit.
INITIALISIERUNG
Im normalen Betrieb sollte jede Maschine eine nicht leere Kennung haben. Die Kennung von jeder Maschine sollte eindeutig sein. Um diese Ziele zu erreichen, kann /etc/machine-id auf verschiedene Arten initialisiert werden.
Für normale Betriebssysteminstallationen, bei denen ein angepasstes Abbild für eine bestimmte Maschine erstellt wird, sollte /etc/machine-id während der Installation befüllt werden.
systemd-machine-id-setup(1) kann von Installationswerkzeugen verwandt werden, um die Maschinenkennung zum Installationszeitpunkt zu initialisieren, aber /etc/machine-id kann auch mit anderen Mitteln geschrieben werden.
Für Betriebssystemabbilder, die einmal erzeugt und dann auf mehreren Maschinen verwandt werden, beispielsweise Container oder in der Cloud, sollte /etc/machine-id in dem generischen Dateisystem leer sein. Während des Systemstarts wird eine Kennung erstellt und falls möglich in dieser Datei gespeichert. An der Stelle eine leere Datei zu haben ist nützlich, da es erlaubt, eine temporäre Datei mittels einer Bind-Einhängung über die echte Datei zu legen, falls das Abbild nur lesen verwandt wird.
systemd-firstboot(1) kann zur Initialisierung von /etc/machine-id auf eingehängten (aber nicht gestarteten) Systemabbildern verwandt werden.
Wenn eine Maschine mit systemd(1) gestartet wird, wird die Kennung der Maschine etabliert. Falls die Optionen systemd.machine_id= oder --machine-id= (siehe ersten Abschnitt) festgelegt werden, wird dieser Wert verwandt. Falls diese Datei leer ist oder fehlt, wird Systemd versuchen, die D-Bus-Maschinenkennung aus /var/lib/dbus/machine-id, den Wert der Kernelbefehlszeilenoption container_uuid, die KVM-DMI-product_uuid oder die Devicetree vm,uuid (auf KVM-Systemen) und schließlich eine zufällig erstellte UUID zu verwenden.
Nachdem die Maschinenkennung etabliert ist, wird systemd(1) versuchen, sie in /etc/machine-id zu speichern. Falls dies fehlschlägt, wird es versuchen, sie als temporäre Datei mittels Bind-Einhängung über /etc/machine-id zu legen. Es ist ein Fehler, falls das Dateisystem nur lesbar ist und keine (möglicherweise leere) Datei /etc/machine-id enthält.
systemd-machine-id-commit.service(8) wird versuchen, die Maschinenkennung in das Dateisystem zu schreiben, falls /etc/machine-id oder /etc während der frühen Systemstartphase schreibgeschützt sind, aber später schreibbar werden.
BEZUG ZU OSF UUIDS
Beachten Sie, dass die Maschinenkennung historisch gesehen weder eine OSF-UUID, wie sie durch RFC 4122 [1] definiert wird, noch eine Microsoft GUID ist; beginnend mit Systemd v30 werden sich allerdings neu erstellte Maschinenkennungen als v4 UUIDs eignen.
Zur Wahrung der Kompatibilität mit bestehenden Installationen sollte jede Anwendung, die eine UUID benötigt, die Maschinenkennung dekodieren und dann die nachfolgenden Aktionen anwenden, um sie in eine gültige OSF-v4-UUID zu wandeln (hierbei ist »id« ein vorzeichenfreies Zeichenfeld):
/*
UUID auf Version 4 setzen --- wirklich zufällige
Erzeugung */
id[6] = (id[6] & 0x0F) | 0x40;
/* Die UUID-Variante auf DCE setzen */
id[8] = (id[8] & 0x3F) | 0x80;
(Dieser Code ist von »generate_random_uuid()« von drivers/char/random.c aus den Linux-Kernelquellen inspiriert.)
GESCHICHTE
Das einfache Konfigurationsdateiformat von /etc/machine-id entspringt der durch D-Bus eingeführten Datei /var/lib/dbus/machine-id. Tatsächlich kann letztere Datei ein Symlink auf /etc/machine-id sein.
SIEHE AUCH
systemd(1), systemd-machine-id-setup(1), gethostid(3), hostname(5), machine-info(5), os-release(5), sd-id128(3), sd_id128_get_machine(3), systemd-firstboot(1)
ANMERKUNGEN
1. |
RFC 4122 |
https://tools.ietf.org/html/rfc4122
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian [AT] helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german [AT] lists.org>.