Zeitserver

Um die System-Uhr immer genau zu haben, braucht man jemanden, der sie immer im Auge hat und ggf. korrigiert. Dieser Jemand ist meistens das Programm NTP (Network Time Protocol).

RTC vs. Soft-Clock

Die RTC ist die Uhr auf der Hauptplatine, das Betriebssystem dagegen verwendet eine eigene Uhr, die nur als Programm (Bestandteil der Betriebssystemkern's) existiert.

Beide Uhren können auf eine unterschiedliche Zeit gestellt sein.

RTC

Die RTC (Hardware-Uhr) kann mit dem Befehl „hwclock“ abgefragt und gestellt werden.

Diese Kommandos wurden auf Linux Ubuntu 10.04 getestet.

RTC-Zeit anzeigen:

# hwclock -r

RTC auf die Zeit der Soft-Clock stellen (da die Soft-Clock ja vom NTP sehr genau gestellt werden kann):

# hwclock --systohc

oder

# hwclock -w

Soft-Clock auf die Zeit der RTC stellen (die RTC kann man ja im BIOS selbst stellen):

# hwclock -f

Soft-Clock

Die Soft-Clock (Betriebssystem-Uhr) kann mit dem Befehl „date“ abgefragt und gestellt werden.

Diese Kommandos wurden 2004 auf FreeBSD getestet.

Datum im Euro-Format (separate Angabe)

# date +%Y-%m-%d

oder

# date +%F
# 2004-05-10

Datum und Uhrzeit

# date '+%F um %T'
# 2004-05-10 um 15:41:28

Datum im Euro-Format (kompackter Parameter)

# date +%F
# 2004-05-10

Datum mit Monatsangabe als Wort

# date +%v
# 10-Mai-2004

Monat als Wort

# date +%h
# Mai

Wochentag

# date +%a
# Mo

Urzeit

# date +%H:%M:%S

oder

# date +%T
# 00:50:27

Zeitzonendifferenz zu Greamwitch

# date +%z
# +0200

Zeitzone

# date +%Z
# MEST

Datum+Uhrzeit aus einer Maschine auslesen (der 2004-05-10 um 01:02:33 Uhr)

# date "+%Y%m%d%H%M.%S"
# 200405100102.33

Datum+Uhrzeit auf einer anderen Maschine einstellen

# date 200405100102.33

Uhrzeit sekundengenau einstellen (01:02:33 Uhr)

# date 0102.33

Uhrzeit einstellen (01:02 Uhr)

# date 0102

NTP

installieren

In Ubuntu wird das dazugehörige Paket so installiert:

# aptitude install ntp

konfigurieren

Jetzt muss das Programm noch richtig konfiguriert werden.

Eigentlich soll es bei Ubuntu ja nicht nötig sein, da es schon vorkonfiguriert wurde, nur wird diese Standardkonfiguration für die ganze Welt vorgenommen und so ist es recht wahrscheinlich, dass man einen weit entfernten Zeitserver zugewiesen bekommt. Deshalb kann es nichts schaden, wenn man sich einen lokalen Pool einträgt um auch einen lokalen Zeitserver zugewiesen zu bekommen.

# vi /etc/ntp.conf
# FreeBSD
#driftfile /var/db/driftfile
#
# Ubuntu
driftfile /var/lib/ntp/ntp.drift
#
# Alle Betriebssysteme
server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
server 3.de.pool.ntp.org

Der Pool pool.ntp.org stellt die Zentrale dar, die *.de.pool.ntp.org stellen lokale (deutsche) Zeitserver dar.

# ntpq -np
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 91.189.94.4     .INIT.          16 u    -   64    0    0.000    0.000   0.000

Leider hat NTP eine große Schwäche! Ist der Zeitunterschied zwischen lokaler Uhr und Zeitserver zu groß (in der Größenordnung von mehr als 15 Sekunden), dann tut der NTPD nichts mehr!

Ausnahmeregelung

Es gibt bei neueren NTPD's weitere Möglichkeiten, die im folgenden gezeigt werden.

tinker muss die aller erste Option sein, die server-Optionen werden um „minpoll 4 maxpoll 4“ erweitert:

# vi /etc/ntp.conf
tinker panic 0
tinker step 0
server ptbtime1.ptb.de minpoll 4 maxpoll 4
server ptbtime2.ptb.de minpoll 4 maxpoll 4
server ptbtime3.ptb.de minpoll 4 maxpoll 4
server 0.de.pool.ntp.org minpoll 4 maxpoll 4
server 1.de.pool.ntp.org minpoll 4 maxpoll 4
server 2.de.pool.ntp.org minpoll 4 maxpoll 4
server 3.de.pool.ntp.org minpoll 4 maxpoll 4
# /etc/init.d/ntp stop
# ntpdate 0.de.pool.ntp.org
# hwclock --systohc
# /etc/init.d/ntp start

Sollte das nicht helfen, dann kann man sich noch die Optionen -g, -q und -x für den ntpd ansehen (man ntpd).

In dem Fall müsste man, bei Ubuntu zum Beispiel, in der datei /etc/init.d/ntp die Variable NTPD_OPTS um die drei oben genannten Parameter ergänzen. Das könnte man zum Beispiel wie folgt machen:

Man öffnet die Datei /etc/init.d/ntp

# vi /etc/init.d/ntp

Dann geht man mit dem Cursor an die Stelle, an der die Variablen definiert werden:

NAME=ntp
DAEMON=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid

Dann wird der Variablenbereich um die Variable NTPD_OPTS erweitert:

NAME=ntp
DAEMON=/usr/sbin/ntpd
PIDFILE=/var/run/ntpd.pid
NTPD_OPTS="$NTPD_OPTS -g -q -x"

Zum Schluss muss der Dienst noch neu gestartet werden:

# /etc/init.d/ntp stop
# ntpdate 0.de.pool.ntp.org
# hwclock --systohc
# /etc/init.d/ntp start

andere

Das obige Beispiel wurde auf einem Ubuntu-Linux durchgeführt, bei anderen Distributionen können die Start-Stop-Scripte einen anderen Namen haben. Bei SUSE zum Beispiel heißt es nicht ntp sondern xntpd und bei FreeBSD liegt es in einem anderen Pfad und heißt ntpd.

FreeBSD:

# /etc/rc.d/ntpd restart

SUSE:

# /etc/init.d/xntpd restart

OpenNTPD

Der OpenNTPD ist in sicherheitsrelevanten Linux-Umgebungen dem klassischen NTP vorzuziehen, da nur hier der NTP-Server abgeschaltet werden kann!

Wenn es um Sicherheit geht, dann ist es man über jeden Port, der nicht offen sein muss froh!

In dieser Hinsicht ist der klassische NTPD aber sehr unflexibel.

Nur der openNTPD bietet die Möglichkeit, alle Ports zu schließen oder nur auf ausgewählten IP's zu lauschen.

Installation/Konfiguration NTP-Server

Zur Zeit gibt es noch einen Bug, deshalb sind diese beiden Befehle vor der Installation nötig:

# dpkg --purge ntp
# invoke-rc.d apparmor restart

Jetzt geht es los:

# aptitude update && aptitude install openntpd
# /etc/init.d/openntpd stop
# vi /etc/openntpd/ntpd.conf

braucht man eigentlich nichts zu ändern:

server 0.debian.pool.ntp.org
server 1.debian.pool.ntp.org
server 2.debian.pool.ntp.org
server 3.debian.pool.ntp.org

An sonsten reicht hier ein einziger Eintrag:

server pool.ntp.org

Kontrolle

Allerdings gibt es beim OpenNTPD keine weiteren Werkzeuge, wie zum Beispiel den ntpq!

Von älteren NTP-Versionen hat der ntpq noch beim openntpd funktioniert, der ntpq von neueren Versionen funktioniert nicht mehr.

So kann man nur noch die Meldungen im syslog und die Ausgaben von ntpdate als Informationsquellen zum Status von openntpd verwenden.

Man kann hier nur die lokale Uhrzeit mit der Zeit auf einem Zeitserver vergleichen:

# ntpdate -q pool.ntp.org

oder

# ntpdate -q ntp.ubuntu.com

oder

# ntpdate -q 0.debian.pool.ntp.org

NTP-Server

Will man auch einen Server betreiben, kann man ihn hier wie folgt aktivieren, dazu braucht man nur diese Zeile einzutragen:

listen on *

Es ist aber hier auch möglich (das kann der Standard-NTP auch nicht), dass man den OpenNTPD nur auf einer bestimmten IP lauschen lässt, wie zum Beispiel „localhost“ (127.0.0.1):

listen on 127.0.0.1
listen on ::1

zyklischer NTP-Restart

das NTP - Problem

Der NTPD kann die Zeit nur in recht kleinen Schritten korrigieren. Diese Schritte sind so klein, dass eine Differenz von 300 Sekunden erst nach mehr als einer Woche korrigiert wäre!

Da manche RTCs eine so starke Ungenauigkeit haben, dass der NTPD diese nicht korrigieren kann und deshalb die Systemzeit immer wieder aus der Synkronität läuft, wird der NTPD immer sterben, wenn eine Zeitdifferenz von 15 Sekunden erreicht wurde.

Bei VMWare ist noch zu beachten, dass die Einstellung „Uhrzeit zwischen Host- und Gast-System syncronisieren“ (oder so ähnlich) gesetzt ist und das im Gast-System die „VMWare-Tools“ installiert sind. Sonst laufen NTP und RTC schon nach weniger als 30 Minuten so stark auseinander, das der NTP die Syncronisation nicht mehr aufrecht erhalten kann!

Holzhammermethode

Um die Zeit in regelmäßigen Abständen (z.B. immer um 00:00 Uhr) auf die harte Tour zu syncronisieren, kann man folgendes tun:

/etc/crontab

Hier stellen wir die täglichen Aufgaben von 6:25 auf 0:00 Uhr:

...
00 0     * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
...

/etc/cron.daily/uhr

Und hier legen wir eine weitere tägliche Aufgabe an:

#!/bin/bash
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
if [ -e /etc/init.d/ntp ] ; then
      /etc/init.d/ntp stop
elif [ -e /etc/init.d/ntpd ] ; then
        /etc/init.d/ntpd stop
elif [ -e /etc/init.d/openntpd ] ; then
      /etc/init.d/openntpd stop
fi
cat /etc/openntpd/ntpd.conf /etc/ntp.conf 2>/dev/null | awk '/^server/ {print $NF}' | while read NTPSERVER
do
        ntpdate ${NTPSERVER}
done
hwclock --systohc
if [ -e /etc/init.d/ntp ] ; then
      /etc/init.d/ntp start
elif [ -e /etc/init.d/ntpd ] ; then
        /etc/init.d/ntpd start
elif [ -e /etc/init.d/openntpd ] ; then
      /etc/init.d/openntpd start
fi
# chmod 0755 /etc/cron.daily/uhr
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:GNU Free Documentation License 1.2
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki