Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Zeitserver NTP
openntpd
Ubuntu 18.04.5 LTS
[root@linux ~]# apt install ntpstat ntpdate openntpd [root@linux ~]# service openntpd start
- /etc/openntpd/ntpd.conf
server 0.de.pool.ntp.org server 1.de.pool.ntp.org server 2.de.pool.ntp.org
> apt update ; apt install ntpstat ntpdate openntpd ; echo 'server 192.168.77.5' > /etc/openntpd/ntpd.conf ; service openntpd stop ; ntpdate 192.168.77.5 ; service openntpd start
timesyncd
https://wiki.ubuntuusers.de/systemd/timesyncd/
wenn ntp installiert ist, dann ist timesyncd automatisch deaktiviert; deshalb muss sichergestellt werden, dass ntp deinstalliert ist:
> apt purge ntp openntpd
- /etc/systemd/timesyncd.conf
NTP=0.de.pool.ntp.org 1.de.pool.ntp.org 2.de.pool.ntp.org FallbackNTP=ntp.ubuntu.com RootDistanceMaxSec=5 PollIntervalMinSec=32 PollIntervalMaxSec=2048
Status:
> service systemd-timesyncd status ... Status: "Synchronized to time server ... ...
Über den folgenden Befehl kann der Status von timesyncd abgefragt werden:
> timedatectl status
Mit folgenden Befehlen kann der Dienst gestoppt und wieder gestartet werden:
> timedatectl set-ntp 0 #deaktivieren > timedatectl set-ntp 1 #aktivieren
Den gleichen Effekt erreicht man auch, wenn man über systemctl die Service-Unit systemd-timesyncd.service deaktiviert bzw. aktiviert.
ntpd
> vi /etc/ntp.conf
...
pool ptbtime1.ptb.de iburst
pool ptbtime2.ptb.de iburst
pool ptbtime3.ptb.de iburst
pool 0.de.pool.ntp.org iburst
pool 1.de.pool.ntp.org iburst
pool 2.de.pool.ntp.org iburst
pool 3.de.pool.ntp.org iburst
pool ntp1.t-online.de iburst
pool ntp0.freenet.de iburst
pool 0.europe.pool.ntp.org iburst
pool 1.europe.pool.ntp.org iburst
pool 2.europe.pool.ntp.org iburst
pool 3.europe.pool.ntp.org iburst
> service ntpd restart
> ntpq -pn
remote refid st t when poll reach delay offset jitter
==============================================================================
ptbtime1.ptb.de .POOL. 16 p - 64 0 0.000 0.000 0.001
ptbtime2.ptb.de .POOL. 16 p - 64 0 0.000 0.000 0.001
ptbtime3.ptb.de .POOL. 16 p - 64 0 0.000 0.000 0.001
0.de.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.001
1.de.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.001
2.de.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.001
3.de.pool.ntp.o .POOL. 16 p - 64 0 0.000 0.000 0.001
ntp1.t-online.d .POOL. 16 p - 64 0 0.000 0.000 0.001
ntp0.freenet.de .POOL. 16 p - 64 0 0.000 0.000 0.001
0.europe.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
1.europe.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
2.europe.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
3.europe.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.001
auf Ubuntu die Zeitzone einstellen:
dpkg-reconfigure tzdata
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).
detailierte Statusabfrage:
# echo sysinfo | ntpdc # ntpdc -4c sysinfo system peer: zeitserver.net system peer mode: client leap indicator: 00 stratum: 4 precision: -22 root distance: 0.02536 s root dispersion: 0.35634 s reference ID: [192.168.1.1] reference time: d44524b1.d0db5968 Wed, Nov 7 2012 19:19:29.815 system flags: auth monitor ntp stats jitter: 0.035782 s stability: 0.000 ppm broadcastdelay: 0.000000 s authdelay: 0.000000 s
locale Zeitzone einstellen (MET)
rm -f /etc/localtime ln -s /usr/share/zoneinfo/MET /etc/localtime
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 -w
Soft-Clock auf die Zeit der RTC stellen (die RTC kann man ja im BIOS selbst stellen):
> hwclock -f
Linux interpretiert die RTC-Zeit als "UTC":
> hwclock -u
Linux interpretiert die RTC-Zeit als "lokale Zeit" (z.B.: "/etc/localtime → /usr/share/zoneinfo/Europe/Berlin"):
> hwclock -l
Dual Boot: Windows 10 und Linux - falsche Uhrzeit
root@ubuntu2004:~# ls -lha /etc/localtime
lrwxrwxrwx 1 root root 33 Jul 28 20:25 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin
root@ubuntu2004:~# timedatectl
Local time: Mi 2021-07-28 20:42:25 CEST
Universal time: Mi 2021-07-28 18:42:25 UTC
RTC time: Mi 2021-07-28 18:42:25
Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
root@ubuntu2004:~# timedatectl set-local-rtc 1 --adjust-system-clock
root@ubuntu2004:~# timedatectl
Local time: Mi 2021-07-28 20:43:55 CEST
Universal time: Mi 2021-07-28 18:43:55 UTC
RTC time: Mi 2021-07-28 18:43:55
Time zone: Europe/Berlin (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
This mode cannot be fully supported. It will create various problems
with time zone changes and daylight saving time adjustments. The RTC
time is never updated, it relies on external facilities to maintain it.
If at all possible, use RTC in UTC by calling
'timedatectl set-local-rtc 0'.
Besser, man stellt Windows so um, dass es die RTC in gleicher Weise behandelt wie Linux - also das die RTC als UTC interpretiert wird.
Wenn man in Windows die folgende Datei runterlädt und mit einem Doppelklick (als Administrator) ausführt, dann behandelt Windows die RTC-Zeit als UTC-Zeit.
- RealTimeIsUniversal.reg
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation] "RealTimeIsUniversal"=dword:00000001
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
SystemD-TimeSyncD
> vi /etc/systemd/timesyncd.conf [Time] NTP=10.144.119.140 FallbackNTP=ntp.ubuntu.com RootDistanceMaxSec=5 PollIntervalMinSec=32 PollIntervalMaxSec=2048 > systemctl status systemd-timesyncd ... Status: "Synchronized to time server 10.144.119.140:123 (10.144.119.140)." ...
