Inhaltsverzeichnis
chrony CentOS 7
Das NTP (Network Time Protocol) ist ein Protokoll, entwickelt um die einzelnen Uhren jedes an ein Netzwerk angeschlossenen Computers, synchron zu halten. Alle in diesem Netzwerk befindlichen Computer, haben dann eine einheitliche Zeit, wenn diese an der Verteilung der Zeitinformationen eines sogenannten „Zeitservers“, teilnehmen.
Es kann unter Umständen sehr wichtig sein, das alle Computer in einem Netzwerk die selbe Zeit zur Verfügung haben, da sonst z.B. der Austausch von DNS Informationen, bei einer zu hoher Zeitabweichung der einzelnen am DNS beteiligten Computer, nicht durchgeführt werden kann.
HINWEIS - Nachfolgend soll die Installation eines „Zeitservers“ für eine privates Netzwerk beschrieben werden!
HINWEIS - IPv6 soll NICHT genutzt werden!!!
Beschreibung | Externer Link |
---|---|
Homepage | Chrony Home |
Dokumentation | User guide for the chrony suite |
RedHat Dokumentation | Chapter 13. Configuring NTP Using the chrony Suite |
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Installation
Zur Installation eines „Zeitservers“ wird nachfolgendes Paket benötigt:
Mit nachfolgendem Befehl, werden die benötigten Pakete installiert:
# yum install chrony Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Resolving Dependencies --> Running transaction check ---> Package chrony.x86_64 0:1.29.1-1.el7.centos will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: chrony x86_64 1.29.1-1.el7.centos base 253 k Transaction Summary ================================================================================ Install 1 Package Total download size: 253 k Installed size: 554 k Is this ok [y/d/N]: y Downloading packages: chrony-1.29.1-1.el7.centos.x86_64.rpm | 253 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction Installing : chrony-1.29.1-1.el7.centos.x86_64 1/1 Verifying : chrony-1.29.1-1.el7.centos.x86_64 1/1 Installed: chrony.x86_64 0:1.29.1-1.el7.centos Complete!
Mit nachfolgendem Befehl kann überprüft werden, welcher Inhalt mit dem Paket installiert wurde.
Paket chrony:
# rpm -qil chrony Name : chrony Version : 1.29.1 Release : 1.el7.centos Architecture: x86_64 Install Date: Thu 11 Sep 2014 10:28:36 AM CEST Group : System Environment/Daemons Size : 567017 License : GPLv2 Signature : RSA/SHA256, Fri 04 Jul 2014 02:57:41 AM CEST, Key ID 24c6a8a7f4a80eb5 Source RPM : chrony-1.29.1-1.el7.centos.src.rpm Build Date : Wed 18 Jun 2014 11:18:41 PM CEST Build Host : worker1.bsys.centos.org Relocations : (not relocatable) Packager : CentOS BuildSystem <http://bugs.centos.org> Vendor : CentOS URL : http://chrony.tuxfamily.org Summary : An NTP client/server Description : A client/server for the Network Time Protocol, this program keeps your computer's clock accurate. It was specially designed to support systems with intermittent internet connections, but it also works well in permanently connected environments. It can use also hardware reference clocks, system real-time clock or manual input as time references. /etc/NetworkManager/dispatcher.d/20-chrony /etc/chrony.conf /etc/chrony.keys /etc/dhcp/dhclient.d/chrony.sh /etc/logrotate.d/chrony /usr/bin/chronyc /usr/lib/systemd/ntp-units.d/50-chronyd.list /usr/lib/systemd/system/chrony-wait.service /usr/lib/systemd/system/chronyd.service /usr/libexec/chrony-helper /usr/sbin/chronyd /usr/share/doc/chrony-1.29.1 /usr/share/doc/chrony-1.29.1/COPYING /usr/share/doc/chrony-1.29.1/NEWS /usr/share/doc/chrony-1.29.1/README /usr/share/doc/chrony-1.29.1/chrony.conf.example /usr/share/doc/chrony-1.29.1/chrony.conf.example2 /usr/share/doc/chrony-1.29.1/chrony.keys.example /usr/share/doc/chrony-1.29.1/chrony.txt /usr/share/doc/chrony-1.29.1/faq.txt /usr/share/info/chrony.info.gz /usr/share/man/man1/chrony.1.gz /usr/share/man/man1/chronyc.1.gz /usr/share/man/man5/chrony.conf.5.gz /usr/share/man/man8/chronyd.8.gz /var/lib/chrony /var/lib/chrony/drift /var/lib/chrony/rtc /var/log/chrony
Konfiguration
Um einen „Zeitserver“, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl überprüft werden kann:
# systemctl is-enabled chronyd enabled
* Die Antwort sollte, wie dargestellt, enabled
/ eingeschaltet sein!
HINWEIS - Falls die Antwort disabled
sein sollte, kann nachfolgender Befehl dies beheben.
# systemctl enable chronyd ln -s '/usr/lib/systemd/system/chronyd.service' '/etc/systemd/system/multi-user.target.wants/chronyd.service'
Der Dienst/Deamon chronyd.service
sollte aktuelle nicht gestartet sein, was mit nachfolgendem Befehl überprüft werden kann:
# systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: inactive (dead)
HINWEIS - Ein Start des Dienstes/Deamons chronyd.service
, sollte erst nach nachfolgender Konfiguration erfolgen!
/etc/chrony.conf - Server
In der Konfigurationsdatei
/etc/chrony.conf
wird der chronyd
-Dienst/Daemon konfiguriert.
Änderungen und persönliche Anpassungen sind mit einem voranstehenden Kommentar, welche wie nachfolgend dargestellt aussieht
# Tachtler
gekennzeichnet.
Hier die komplette Konfigurationsdatei /etc/chrony.conf
:
# Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). # Tachtler # default: server 0.centos.pool.ntp.org iburst # default: server 1.centos.pool.ntp.org iburst # default: server 2.centos.pool.ntp.org iburst # default: server 3.centos.pool.ntp.org iburst server 0.de.pool.ntp.org iburst server 1.de.pool.ntp.org iburst server 2.de.pool.ntp.org iburst server 3.de.pool.ntp.org iburs # Ignore stratum in source selection. stratumweight 0 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. # Tachtler # default: #allow 192.168/16 allow 192.168.0.0/24 allow 192.168.1.0/24 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 # Tachtler # default: bindcmdaddress ::1 # bindcmdaddress ::1 # Tachtler - new - # Listen for request only on following adresses. bindaddress 0.0.0.0 # Tachtler - new - # Deny access to chronyc from other computers. cmddeny all # Tachtler - new - # Lock chronyd into RAM so that it will never be paged out. lock_all # Serve time even if not synchronized to any NTP server. # Tachtler # default: #local stratum 10 local stratum 8 keyfile /etc/chrony.keys # Specify the key used as password for chronyc. commandkey 1 # Generate command key if missing. generatecommandkey # Disable logging of client accesses. # Tachtler # default: noclientlog # noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. # Tachtler # default: logchange 0.5 logchange 1.0 #log measurements statistics tracking logdir /var/log/chrony # Tachtler - new - # User to which will chronyd switch on initialisation to drop root privileges. user chrony
Eine detaillierte Beschreibung der verwendeten Konfigurationseinträge und noch weitere, hier nicht verwendeter Konfigurationsmöglichkeiten, können unter nachfolgenden externen Links eingesehen werden:
/etc/chrony.conf - Client
In der Konfigurationsdatei
/etc/chrony.conf
wird der chronyd
-Dienst/Daemon konfiguriert.
Änderungen und persönliche Anpassungen sind mit einem voranstehenden Kommentar, welche wie nachfolgend dargestellt aussieht
# Tachtler
gekennzeichnet.
Hier die komplette Konfigurationsdatei /etc/chrony.conf
:
# Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). # Tachtler # default: server 0.centos.pool.ntp.org iburst # default: server 1.centos.pool.ntp.org iburst # default: server 2.centos.pool.ntp.org iburst # default: server 3.centos.pool.ntp.org iburst server 192.168.0.20 iburst # Ignore stratum in source selection. stratumweight 0 # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. makestep 10 3 # Allow NTP client access from local network. # Tachtler # default: #allow 192.168/16 allow 192.168.0.20 # Listen for commands only on localhost. bindcmdaddress 127.0.0.1 # Tachtler # default: bindcmdaddress ::1 # bindcmdaddress ::1 # Tachtler - new - # Listen for request only on following adresses. bindaddress 0.0.0.0 # Tachtler - new - # Deny access to chronyc from other computers. cmddeny all # Tachtler - new - # Lock chronyd into RAM so that it will never be paged out. lock_all # Serve time even if not synchronized to any NTP server. # Tachtler # default: #local stratum 10 local stratum 10 keyfile /etc/chrony.keys # Specify the key used as password for chronyc. commandkey 1 # Generate command key if missing. generatecommandkey # Disable logging of client accesses. noclientlog # Tachtler - new - # This option allows you to configure the port on which chronyd will listen for NTP requests. # The compiled in default is udp/123, the standard NTP port. If set to 0, chronyd will not open the server # socket and will operate strictly in a client-only mode. port 0 # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. # Tachtler # default: logchange 0.5 logchange 1.0 #log measurements statistics tracking logdir /var/log/chrony # Tachtler - new - # User to which will chronyd switch on initialisation to drop root privileges. user chrony
Eine detaillierte Beschreibung der verwendeten Konfigurationseinträge und noch weitere, hier nicht verwendeter Konfigurationsmöglichkeiten, können unter nachfolgenden externen Links eingesehen werden:
/etc/sysconfig/chronyd
Da der Einsatz von IPv6 nicht durchgeführt werden soll, kann durch die Neuerstellung einer Konfigurationsdatei in nachfolgendem Verzeichnis mit nachfolgendem Namen
/etc/sysconfig/chronyd
die Unterstützung für IPv6 deaktiviert werden und ein „lauschen“ auf ggf. definierten IPv6-Adressen findet nicht statt:
Mit nachfolgendem Befehl, kann die Konfigurationsdatei /etc/sysconfig/chronyd
erstellt werden:
# touch /etc/sysconfig/chronyd
Der Inhalt sollte dann wie nachfolgend dargestellt sein, damit der Dienst/Deamon chrony
, ohne IPv6-Unterstützung ausgeführt wird:
# Tachtler # Resolve hostnames only to IPv4 addresses and create only IPv4 sockets. OPTIONS="-4"
iptables Regel
WICHTIG - Nur relevant, beim Einsatz von iptables
als Firewall!
Damit der „Zeitserver“ auch erreichbar ist und nicht die Weitergab der Zeitinformationen via NTP vom Paketfilter iptables
blockiert wird, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 141 10524 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 1 32 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 79 packets, 9140 bytes) num pkts bytes target prot opt in out source destination
Nachfolgender Befehl, fügt folgende iptables
-Regel dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p udp --dport 123 -j ACCEPT
und hier der Befehl:
# iptables -I INPUT 5 -p udp --dport 123 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 435 32812 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:123 6 4 128 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 12 packets, 1320 bytes) num pkts bytes target prot opt in out source destination
Die neue Zeile ist an Position 5 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:123 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Zeitserver starten
Um einen „Zeitserver“ zu starten muss der chronyd
-Dienst/Deamon mit nachfolgendem Befehl gestartete werden:
# systemctl start chronyd
Ob der „Zeitserver“, sprich der chronyd
-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt, erfolgen - es kommt auf die zweite Zeile an!):
# ps auxwwwf | grep chronyd root 23918 0.0 0.0 112640 980 pts/0 S+ 13:44 0:00 \_ grep --color=auto chronyd chrony 23913 0.0 0.0 18444 4140 ? SL 13:43 0:00 /usr/sbin/chronyd -u chrony
bzw. nachfolgendem Befehl überprüft werden:
# systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled) Active: active (running) since Thu 2014-09-11 13:43:29 CEST; 1min 54s ago Process: 23914 ExecStartPost=/usr/libexec/chrony-helper add-dhclient-servers (code=exited, status=0/SUCCESS) Process: 23911 ExecStart=/usr/sbin/chronyd -u chrony $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 23913 (chronyd) CGroup: /system.slice/chronyd.service └─23913 /usr/sbin/chronyd -u chrony -4 Sep 11 13:43:29 centos7.localdomain systemd[1]: Starting NTP client/server... Sep 11 13:43:29 centos7.localdomain chronyd[23913]: chronyd version 1.29.1 starting Sep 11 13:43:29 centos7.localdomain chronyd[23913]: Linux kernel major=3 minor=10 patch=0 Sep 11 13:43:29 centos7.localdomain chronyd[23913]: hz=100 shift_hz=7 freq_scale=1.00000000 nominal_ti...t_pll=2 Sep 11 13:43:29 centos7.localdomain chronyd[23913]: Generated key 1 Sep 11 13:43:29 centos7.localdomain systemd[1]: Started NTP client/server. Sep 11 13:43:33 centos7.localdomain chronyd[23913]: Selected source 192.168.1.253 Sep 11 13:43:33 centos7.localdomain chronyd[23913]: System clock wrong by 3.285681 seconds, adjustment started Hint: Some lines were ellipsized, use -l to show in full.
Auf welchen Ports der chronyd
-Dienst/Deamon auch tatsächlich als Hintergrundprozess lauscht, kann mit nachfolgendem Befehl überprüft werden:
# netstat -tulpen | grep chronyd udp 0 0 192.168.0.20:123 0.0.0.0:* 0 1147396457 23936/chronyd udp 0 0 127.0.0.1:323 0.0.0.0:* 0 1147396458 23936/chronyd
HINWEIS - Falls der Befehl netstat
nicht zur Verfügung stehen sollte, muss das rpm
-Paket net-tools
installiert werden.
Zeitserver Status
Um zu überprüfen in wie weit der offset bzw. die Abweichung zur aktuell gültigen Zeit ist, kann nachfolgende Abfrage genutzt werden:
# chronyc -4 sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 192.168.0.253 2 6 17 44 +728ns[+6000ns] +/- 34ms
Um zu überprüfen welchen Status der angefragte Zeitserver (Zeitserverquelle) hat, kann nachfolgende Abfrage genutzt werden:
# chronyc -n -4 sourcestats 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ============================================================================== 192.168.0.253 10 6 582 -0.003 0.170 -14ns 20us
Um zu überprüfen wie die aktuelle Systemzeit aufgebaut wird, kann nachfolgende Abfrage genutzt werden:
# chronyc -4 tracking Reference ID : 192.168.0.253 (timeserver.localdomain) Stratum : 3 Ref time (UTC) : Thu Sep 11 13:35:29 2014 System time : 0.000000350 seconds fast of NTP time Last offset : 0.000002115 seconds RMS offset : 0.000014358 seconds Frequency : 0.415 ppm slow Residual freq : -0.015 ppm Skew : 0.492 ppm Root delay : 0.000626 seconds Root dispersion : 0.019811 seconds Update interval : 64.9 seconds Leap status : Normal
HINWEIS - Aufgrund der Beschränkung in der Konfigurationsdatei /etc/sysconfig/chronyd
:
# Tachtler # Resolve hostnames only to IPv4 addresses and create only IPv4 sockets. OPTIONS="-4"
können Befehle nur ausgeführt werden, wenn
IPv6
auf dem Server generell und komplett deaktiviert wurde, oder-4
als Parameter beim Befehlchronyc
mit angegeben wird