Zeitdienst
Gerade für Serverdienste und Logfiles ist eine korrekt laufende Uhr wichtig. Mittels NTP holt sich der PC immer die exakte Zeit aus dem Internet. Und mit wenig Mehraufwand teilt er dieses Wissen sogar mit dem lokalen Netzwerk.
- Johannes Endres
Für alle Unix-artigen Betriebssysteme wie Linux oder FreeBSD wickelt das Paket ntp das gleichnamige Protokoll ab. Lediglich (open)SUSE benutzt aus historischen Gründen den alten Namen xntp für dieselbe Software. Aktuell ist Version 4.2.4.
Zum ntp-Paket gehören zwei Programme, die die Rechneruhr stellen: Der Daemon ntpd und das Kommandozeilenprogramm ntpdate. Ntpdate arbeitet nach dem Prinzip "Zeitserver fragen, Uhr stellen, Schluss" und ist daher in der Regel nach wenigen Sekunden fertig. Ganz anders funktioniert der Daemon ntpd, der mehrere Server befragt, die Plausibilität der Antworten prüft und ihre Qualität vergleicht, die Genauigkeit der Rechneruhr bewertet und erst dann beginnt, sie zu stellen. Bis zum ersten Stellen dauert das mindestens einige Minuten; für die Bewertung der PC-Uhr nimmt sich das Programm eine Stunde Zeit. Außerdem stellt der ntpd, solange er läuft, den NTP-Service im Netzwerk zur Verfügung. Wenn man nur die Systemuhr stellen möchte, ist das ein unnötiger Ressourcenaufwand und eine potenzielle Sicherheitslücke. Ntpd sollte also nur einsetzen, wer wirklich einen Zeitserver anbieten möchte. Sonst ist ntpdate das Mittel der Wahl, besonders für Router und alle anderen Rechner, die direkt am Internet hängen.
Je nach Abweichung von der Referenzzeit stellen die Programme die Rechneruhr mit zwei verschiedenen Methoden. Bei einem geringen Unterschied passen sie die Systemuhr über einen längeren Zeitraum in winzigen Schritten an, damit die anderen laufenden Prozesse keine Änderung der Zeit bemerken (Slew). Ist der Unterschied zur Referenzzeit größer, stellen sie die Uhr auf einen Schlag nach (Step).
NTP-Client einrichten
NTP-Client einrichten
Viele Distributionen starten grundsätzlich ntpd, um die Uhr zu stellen. Dies sollte man zunächst unterbinden, bei RedHat beispielsweise mit dem Befehl chkconfig ntpd off und sonst, indem man die rc-Skripte entsprechend bearbeitet. Wo dann der Aufruf von ntpdate hingehört, hängt von der Art der Internetverbindung ab. Wer über eine Standleitung oder Flatrate angebunden ist, stellt die Uhr stündlich per cron-Job. Dazu legt man bei aktuellen Linux-Distributionen im Verzeichnis /etc/cron.hourly ein Skript mit dem folgenden Inhalt an und macht es per chmod ausführbar.
#!/bin/sh
ntpdate -s mehrere NTP-Servernamen
Bei Systemen, bei denen dieses Verzeichnis nicht existiert, trägt man den ntpdate-Aufruf in die passende crontab ein.
Die Option -s veranlasst ntpdate, Meldungen nicht auf den Bildschirm, sondern per syslog in die Log-Dateien zu schreiben. Um die Uhr zusätzlich bei jedem Booten zu stellen, trägt man dieselbe Zeile in ein passendes rc-Skript ein und gibt dabei zusätzlich den Parameter -b an. Ntpdate passt die Uhr dann nicht langsam an, sondern stellt sie grundsätzlich auf einen Schlag, sodass das Skript schneller beendet ist.
Bei einem Rechner mit Wählverbindung zum Internet trägt man ntpdate stattdessen mit den Optionen -b und -s ins Skript ip-up ein, damit die Uhr bei jeder Einwahl synchronisiert wird.
NTP-Server aufsetzen
NTP-Server aufsetzen
Wer seinen eigenen Zeitserver aufsetzen möchte, sollte einige Zeit einplanen und sich mit Geduld wappnen, denn jede Änderung an der Konfiguration erfordert einen Neustart des Serverprozesses. Danach nimmt sich ntpd einige Minuten, bevor er Clients bedient oder auch nur den Debugging-Tools sinnvolle Angaben macht. Der Hardware-Uhr des Rechners vertraut er anfangs gar erst nach einer Stunde.
Bei ersten Aufrufen beendet sich ntpd oft gleich wieder, weil er nur laufen mag, wenn die Uhr nicht mehr als 1000 Sekunden von der Referenzzeit abweicht. Dann gibt man dem Programm entweder die Option -g mit, oder stellt die Uhr vorher mit ntpdate.
# Datei /etc/ntp.confSeine Einstellungen liest ntpd aus der Datei /etc/ntp.conf. Mit der Option driftfile gibt man eine Datei an, in der ntpd nach jeweils einer Stunde Laufzeit einen Wert zur Korrektur der Systemuhr ablegt. So kann das Programm seinen internen Regelkreis beim nächsten Aufruf sofort initialisieren, ohne die Rechneruhr erst lange zu beobachten.
driftfile /etc/ntp/drift
# Zeit-Quellen
server 127.127.1.0
fudge 127.127.1.0 stratum 10
server ntp1.t-online.de iburst
server ntp1.ptb.de iburst prefer
# Schluessel für ntpdc
keys /etc/ntp/keys
trustedkey 1
requestkey 1
Jede Quelle für die Zeitsynchronisation steht in einer eigenen server-Zeile in ntp.conf. Neben NTP-Servern können dies auch lokal angeschlossene Uhren sein. Zum ntp-Paket gehört eine Auswahl an Treibern für verschiedene Uhrmodule, die über Pseudo-IP-Adressen angesprochen werden. So trägt der Treiber für den RTC-Baustein auf dem Mainboard die Adresse 127.127.1.0. Eine Zeile, die mit fudge beginnt, setzt zusätzliche Optionen für eine Zeitquelle, im Beispiel ein sehr hohes Stratum für die RTC, so dass ntpd nur darauf zurückgreift, wenn kein NTP-Server erreichbar ist.
Ein hinter die Serveradresse gestelltes iburst beschleunigt die anfängliche Synchronisation, da ntpd so gekennzeichnete Server anfangs mit mehr NTP-Paketen abfragt als üblich und so schneller die zur Bewertung erforderlichen Daten sammelt. Die Option prefer auf einer Serverzeile veranlasst ntpd, diesen Server zu bevorzugen, wenn mehrere Server als gleich gute Quellen zur Synchronisation bewertet werden.
Bei dieser Bewertung sortiert ntpd die erreichbaren Quellen nach dem Stratum, der Paketlaufzeit im Netzwerk (Delay), der Abweichung von der eigenen Uhr (Offset) und der Streuung der letzten Offset-Angaben (Jitter). Die nach diesen Kriterien beste Zeitquelle benutzt der Server dann als Referenz. Daher kommt der Auswahl geeigneter NTP-Server einige Bedeutung für den stabilen Betrieb eines eigenen Servers zu.
Serverauswahl
Serverauswahl
Anfangs kann der Verwalter einige der im Artikel Zeit-Abgleich genannten öffentlichen Server eintragen. Dabei muss er sich jedoch strikt an die Zugangsregeln halten, also nur solche Server nutzen, in deren "Service Area" der eigene Rechner steht, und sich per E-Mail , sofern die Server-Betreiber dies wünschen.
Nachdem man den Serverprozess gestartet und eine ausgiebige Kaffeepause eingelegt hat, wird es Zeit, die Bewertungen der NTP-Server anzusehen. Dazu dient das Kommando ntpq -p, dessen Ausgabe unten in Auszügen zu sehen ist. Die Server, bei denen in der Spalte "reach" eine Null steht, konnte ntpd nicht erreichen. Sofern kein grundsätzliches Netzwerkproblem vorliegt, löscht man diese Server aus der Konfiguration.
[root@timeserver]# ntpq -p
remote refid st t when poll reach delay offset jitter
============================================================================
LOCAL(0) LOCAL(0) 10 l 3 64 3 0.000 0.000 0.008
ntp0.freenet.de 0.0.0.0 16 u - 64 0 0.000 0.000 4000.00
#ntp1.t-online.d .DCFa. 1 u 22 64 1 27.712 -4.146 1.272
*ntp1.ptb.de .PTB. 1 u 31 64 1 44.181 -0.802 2.043
-chronos.cru.fr .GPS. 1 u 17 64 1 52.320 -4.261 0.759
+ntp-p1.obspm.fr .1PPS. 1 u 15 64 1 49.748 -1.492 2.842
time.heise.de ntp1.ptb.de 2 u 50 64 7 0.502 -1.334 0.185
Die Spalte "refid" gibt einen Hinweis, welche Art von Zeitquelle der Server selbst benutzt. Stratum-1-Server geben hier beispielsweise .GPS. für einen GPS-Empfänger an, .DCF. deutet auf eine DCF77-Funkuhr hin, .PPS. auf eine Uhr, die einen Puls pro Sekunde erzeugt. Server höherer Strata geben als refid ihren Referenzserver an.
Im ersten Zeichen der ersten Spalte, vor dem Servernamen, kodiert ntpq den Vertrauensstatus: ein Stern kennzeichnet den aktuellen Referenzserver, ein Plus diejenigen, die in die Mittelwertsberechnung der Uhrzeit eingehen. Mit # markiert ntpd einen Server, der zwar ebenfalls geeignet wäre, aber weiter hinten in der Bewertungsreihenfolge steht. Ein x kennzeichnet Rechner, die über längere Zeit keine verlässlichen Werte lieferten (False Ticker). Mit einem Minuszeichen versieht ntpq schließlich die Server, die bei der letzten Abfrage eine zu weit abweichende Zeit lieferten. Falls das für einen weiter entfernt stehenden Server häufig auftritt, sollte man ihn auch aus der Liste löschen, denn eventuell handelt es sich ebenfalls um einen False Ticker, den ntpd nicht selbstständig erkennen kann.
Die Kontrolle mit ntpq nimmt man nochmals vor, nachdem ntpd mehrere Stunden Zeit hatte, die Bewertungen zu wiederholen. Falls die Liste jetzt noch nicht auf sechs bis zehn Server geschrumpft ist, sollte man noch einige nach der Internet-Topologie weiter entfernte Server streichen, denn jede Abfrage erzeugt Netzwerkverkehr. Dauernd Rechner zu befragen, die es ohnehin nie in die mit Plus gekennzeichneten Top-Ten schaffen, verschwendet Ressourcen im Netzwerk und auf dem eigenen Rechner. Drei Server sollten jedoch mindestens übrig bleiben, damit der lokale Server sich nicht beim Ausfall eines einzelnen auf die ungenaue interne Uhr verlassen muss, und damit ntpd eine ausreichende Basis für die Bewertung behält.
Daytime, time und Zugriffskontrolle
Zugriffskontrolle
Die aktuelle Version 4 des NTP-Protokolls definiert zwar auch einen Schlüsselmechanismus zur Zugriffskontrolle, doch beim Kontakt mit der öffentlichen Servern spielt er keine Rolle. Um jedoch mit Hilfe des Programms ntpdc Einstellungen des Servers zu ändern, muss man ihn dennoch einrichten. Die Schlüssel liest ntpd aus der Datei, die mit dem Schlüsselwort key in ntp.conf angibt. In der Datei steht pro Zeile ein Schlüssel:
1 M Passwort
Am Anfang steht eine Schlüsselnummer, dann der Typ (hier M für MD5) und dahinter der Schlüssel im Klartext. Damit ntpd diesen Schlüssel auch nutzt, muss man ihn in ntp.conf mit der Anweisung trustedkey 1 für vertrauenswürdig erklären. Für Anfragen über das Programm ntpdc ist dann der Key gültig, der in ntp.conf mit requestkey 1 eingestellt ist.
Über das interaktive Programm ntpdc kann man dann beispielsweise Zeitserver in die Liste aufnehmen, ohne ntpd neu zu starten (Befehl unconfig) oder neue hinzufügen (Befehl addserver). Einen kurzen Überblick über die möglichen Befehle gibt die Eingabe help. Genaue Informationen zu weiteren ntpdc-Kommandos, den anderen Programmen im Paket und NTP im Allgemeinen gibt die ausführliche englische HTML-Dokumentation, die zum Software-Paket gehört und die üblichen man-Pages ersetzen soll.
Fremddienst
NTP-Clients existieren zwar für die meisten verbreiteten Betriebssysteme, doch manche exotischeren lassen sich nur mittels der älteren Protokolle daytime und time synchronisieren. Beide Protokolle bedient unter Linux der Prozess inetd. Um die Dienste zu aktivieren, müssen in der Datei /etc/services die Zeilen
daytime 13/tcp
daytime 13/udp
time 37/tcp
time 37/udp
stehen, in /etc/inetd.conf die Zeilen
daytime stream tcp nowait root internal
daytime dgram udp wait root internal
time stream tcp nowait root internal
time dgram udp wait root internal
Diese Einträge sind in der Regel schon vorhanden und müssen nur durch Entfernen des # am Zeilenanfang aktiviert werden. Anschließend veranlasst der Befehl killall -HUP inetd den Daemon, seine Konfigurationsdatei neu einzulesen. (je)
(ea)