Chrony
EN CHANTIER
Article en cours d'écriture et/ou de test. Certains éléments peuvent être incomplets et mener à un résultat non fonctionnel.Merci de ne pas rager.
Chrony est, comme sont homologue éponyme, une implémentation libre du protocole NTP (Network Time Protocol). Il peut synchroniser l'horloge système avec d'autres serveurs NTP, des horloges de référence matériel comme des récepteurs GPS ainsi que manuellement. L'outil embarque un client permettant la synchronisation avec des sources externes ainsi qu'un serveur pouvant accepter les requêtes de temps de clients autorisés.
Chrony supporte, depuis la version 4.0, le protocole NTS (Network Time Security) permettant d'authentifier les serveurs via une couche de sécurité TLS (Transport Layer Security).
INFORMATION
La présente documentation est réalisée sous GNU/Linux Debian 12 et chrony 4.3-2.Serveur
Installation
Installation du service
apt install --no-install-recommends chrony
Configuration de base
L'outil se base sur un unique fichier /etc/chrony/chrony.conf
(changeable via un -f
) pouvant être atomisé dans /etc/chrony/conf.d/
. Les directives des serveurs peuvent quand à elle (et elles seules) être atomisées dans /etc/chrony/sources.d/
. Il n'est cependant généralement intéressant d'utiliser cette atomicité que dans des configurations complexes.
Voici le contenu de ce fichier pour une configuration simple en mode serveur pour deux réseaux clients
# Bienvenu dans le fichier de configuration de chrony. Veuillez voir la page de
# manuel chrony.conf(5) pour plus d'informations sur les directives utilisables.
# Inclure les fichiers de configurations trouvés dans /etc/chrony/conf.d.
confdir /etc/chrony/conf.d
# Utiliser les serveurs de temps de Debian.
# Use Debian vendor zone.
pool 2.debian.pool.ntp.org iburst
# Utiliser les serveurs de temps fournis par les baux DHCP.
# sourcedir /run/chrony-dhcp
# Utiliser les serveurs NTP trouvés dans /etc/chrony/sources.d.
sourcedir /etc/chrony/sources.d
# Cette directive spécifie la localisation du fichier contenant le couple ID/clé
# pour l'authentification NTP.
keyfile /etc/chrony/chrony.keys
# Cette directive spécifie le fichier dans lequel chrony va stocker les
# informations de ratios.
driftfile /var/lib/chrony/chrony.drift
# Sauvegarder les les clés et cookies du protocole NTS dans /var/lib/chrony.
ntsdumpdir /var/lib/chrony
# Dé-commenter la ligne suivant pour activer la journalisation.
#log tracking measurements statistics
# Localisation des fichiers de journaux
logdir /var/log/chrony
# Arrêter de considérer la source RTC matériel comme fiable au bout du seuil définit.
maxupdateskew 100.0
# Cette directive active la synchronisation RTC du noyau (toute les 11 minutes).
# Notez l'incompatibilité de cette option avec la directive 'rtcfile'.
rtcsync
# Ajuster d'une traite l'horloge au lieu de modifier la vitesse du temps pour
# ajuster le décalage lorsque celui-ci est supérieur à 1 seconde mais
# seulement pour les 3 premières synchronisations.
makestep 1 3
# Obtenir le décalage TAI-UTC et les secondes intercalaires à partir de la
# base de données tz du système. Cette directive doit être commentée lors de
# l'utilisation de sources de temps qui utilisent des secondes intercalaires.
leapsectz right/UTC
# Désactiver l'usage de chronyc via IP (port par défaut : UDP/323)
cmdport 0
# Autoriser les clients NTP des réseaux suivants à se synchroniser au serveur
allow 192.168.1.0/24
allow 10.0.2.0/23
Les directives allow
sont responsables du comportement en mode serveur de Chrony. En l'absence de paramètre, tous les clients sont autorisés à requêter le serveur (NTP publique).
Authentification
Deux modes d'authentification sont pris en charge :
- authentification NTP
- NTS
Authentification NTP
NTS
NTS est un mécanisme normalisé en septembre 2020 (RFC 8915) permettant d’utiliser TLS pour assurer l'authentification cryptographique du mode client-serveur du NTP.
Génération des clés du serveur
mkdir /etc/chrony/nts openssl req -x509 -nodes -days 5000 -newkey rsa:4096 -out /etc/chrony/nts/chrony.crt -keyout /etc/chrony/nts/chrony.key -subj "/CN=nts1.exemple.fr/"
Le service s'exécutant avec des privilèges restreints, il est important que l'utilisateur l'exécutant est la propriété sur les éléments générés
chown _chrony:_chrony /etc/chrony/nts/chrony.*
Il convient enfin d'ajouter les directive demandant au serveur de les utiliser dans la configuration du service
cat > /etc/chrony/chrony.conf << _EOF_
# Configuration du NTS
ntsservercert /etc/chrony/nts/chrony.crt
ntsserverkey /etc/chrony/nts/chrony.key
_EOF_
Client
Sources
- Pages de manuelles https://chrony-project.org/documentation.html :
- https://ubuntu.com/server/docs/how-to-serve-the-network-time-protocol-with-chrony
- https://mpolinowski.github.io/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29/
- https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/using-chrony-to-configure-ntp_configuring-basic-system-settings
- https://www.it-connect.fr/ntp-la-synchronisation-temporelle-avec-chrony/#V_Securisation_de_chrony