Chrony

De Wiki doc

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