MACHINE-ID(5) machine-id MACHINE-ID(5) BEZEICHNUNG machine-id - Lokale Konfigurationsdatei zur Maschinenkennung UBERSICHT /etc/machine-id BESCHREIBUNG Die Datei /etc/machine-id enthalt eine eindeutige Maschinenkennung des lokalen Systems, die wahrend 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 wahrend der Systeminstallation oder des ersten Systemstarts aus einer Zufallsquelle erstellt und bleibt fur alle nachfolgenden Systemstarts konstant. Fur zustandslose Systeme kann sie optional falls notwendig zur Laufzeit wahrend der fruhen Systemstartphase erstellt werden. Die Maschinenkennung kann beispielsweise beim Systemstart uber das Netz mit dem Kernelbefehlszeilenparameter systemd.machine_id= oder durch Ubergabe der Option --machine-id= an Systemd gesetzt werden. Eine in dieser Weise festgelegte Maschinenkennung hat eine hohere Prioritat und wird statt der in /etc/machine-id gespeicherten Kennung verwandt. Die Maschinenkennung andert sich nicht, wenn sich die lokale oder Netzkonfiguration andert oder die Hardware ausgetauscht wird. Daher und aufgrund ihrer grosseren Lange ist sie eine nutzlichere 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 unvertrauenswurdigen Umgebungen, insbesondere im Netz offengelegt werden. Falls fur einige Anwendungen eine stabile Kennung, die an eine Maschine gebunden ist, benotigt wird, darf die Maschinenkennung oder Teile davon nicht direkt verwandt werden. Stattdessen sollte die Maschinenkennung mit einer kryptographischen, mit einem Schlussel versehenen Funktion in einen Hash verwandelt werden, wobei ein fester, anwendungsbezogener Schlussel 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 Moglichkeit, die ursprungliche 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. Fur normale Betriebssysteminstallationen, bei denen ein angepasstes Abbild fur eine bestimmte Maschine erstellt wird, sollte /etc/machine-id wahrend der Installation befullt 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. Fur Betriebssystemabbilder, die einmal erzeugt und dann auf mehreren Maschinen verwandt werden, beispielsweise Container oder in der Cloud, sollte /etc/machine-id entweder fehlen oder in dem generischen Dateisystem leer sein (der Unterschied zwischen diesen zwei Optionen wird weiter unten unter >>Semantik beim ersten Systemstart<< beschrieben). Wahrend des Systemstarts wird eine Kennung erstellt und falls moglich in dieser Datei gespeichert. An der Stelle eine leere Datei zu haben ist nutzlich, da es erlaubt, eine temporare Datei mittels einer Bind-Einhangung uber die echte Datei zu legen, falls das Abbild nur lesend verwandt wird. Siehe auch Sicheres Bauen von Abbildern[1]. systemd-firstboot(1) kann zur Initialisierung von /etc/machine-id auf eingehangten (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) angegeben 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), die Xen-Hypervisor-UUID und schliesslich eine zufallig erstellte UUID zu verwenden. Nachdem die Maschinenkennung etabliert ist, wird systemd(1) versuchen, sie in /etc/machine-id zu speichern. Falls dies fehlschlagt, wird es versuchen, sie als temporare Datei mittels Bind-Einhangung uber /etc/machine-id zu legen. Es ist ein Fehler, falls das Dateisystem nur lesbar ist und keine (moglicherweise leere) Datei /etc/machine-id enthalt. systemd-machine-id-commit.service(8) wird versuchen, die Maschinenkennung in das Dateisystem zu schreiben, falls /etc/machine-id oder /etc/ wahrend der fruhen Systemstartphase schreibgeschutzt sind, aber spater schreibbar werden. SEMANTIK BEIM ERSTEN SYSTEMSTART /etc/machine-id wird fur die Entscheidung, ob ein Systemstart der erstmalige ist, verwandt. Die Regeln sind wie folgt: 1. Das Kernelbefehlsargument systemd.condition-first-boot= kann dazu verwandt werden, die automatische Erkennungslogik ausser Kraft zu setzen, siehe kernel-command-line(7). 2. Andernfalls, falls /etc/machine-id nicht existiert, ist dies ein erstmaliger Systemstart. Wahrend der fruhen Systemstartphase wird systemd >>uninitialized\n<< in diese Datei schreiben und eine temporare Datei daruber einhangen, die die eigentliche Maschinenkennung enthalt. Spater (nachdem first-boot-complete.target erreicht wurde) wird die echte Maschinenkennung auf Platte geschrieben. 3. Falls /etc/machine-id die Zeichenkette >>uninitialized<< enthalt, wird ein Systemstart auch als erstmaliger Systemstart betrachtet. Der gleiche Mechanismus wie oben beschrieben erfolgt. 4. Falls /etc/machine-id existiert und leer ist, dann wird ein Systemstart nicht als erstmaliger Systemstart betrachtet. systemd wird weiterhin eine Bind-Einhangung einer Datei, die die eigentliche Maschinenkennung enthalt, daruber ausfuhren und spater versuchen, diese auf Platte zu schreiben (falls /etc/ schreibbar ist). 5. Falls /etc/machine-id bereits eine gultige Maschinenkennung enthalt, ist dies keine erstmaliger Systemstart. Falls entsprechend der obigen Regeln ein erstmaliger Systemstart erkannt wurde, werden Units mit ConditionFirstBoot=yes ausgefuhrt und systemd wird zusatzliche Initialisierungsschritte durchlaufen, insbesondere das Voreinstellen von Units. BEZUG ZU OSF UUIDS Beachten Sie, dass die Maschinenkennung historisch gesehen weder eine OSF-UUID, wie sie durch RFC 4122[2] definiert wird, noch eine Microsoft GUID ist; beginnend mit Systemd v30 werden sich allerdings neu erstellte Maschinenkennungen als Variante 1 Version 4 UUIDs (gemass RFC 4122) eignen. Zur Wahrung der Kompatibilitat mit bestehenden Installationen sollte jede Anwendung, die eine streng RFC-4122-konforme UUID benotigt, die Maschinenkennung dekodieren und dann die nachfolgenden (nicht ruckgangig machbare) Aktionen anwenden, um sie in eine gultige RFC-4122-Variante-1-Version-4-UUID zu wandeln (hierbei ist >>id<< ein vorzeichenfreies Zeichenfeld): /* UUID auf Version 4 setzen --- wirklich zufallige 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 eingefuhrten Datei /var/lib/dbus/machine-id. Tatsachlich 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. Sicheres Bauen von Abbildern https://systemd.io/BUILDING_IMAGES 2. RFC 4122 https://tools.ietf.org/html/rfc4122 UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . systemd 255 MACHINE-ID(5)