15.2. Comprendre Chrony et sa configuration

15.2.1. Comprendre Chronyd

Le démon chrony, chronyd, exécuté dans l'espace utilisateur, ajuste l'horloge système exécutée dans le noyau. Ces ajustements sont effectués en consultant des sources de temps externes, en utilisant le protocole NTP, chaque fois que l'accès réseau le permet. Lorsqu'aucune référence externe n'est disponible, chronyd utilisera la dernière dérive stockée dans le fichier de dérive. On peut également lui demander de faire des corrections manuelles, via chronyc.

15.2.2. Comprendre Chronyc

Le démon chrony, chronyd, peut être contrôlé par un utilitaire de ligne de commande, chronyc. Cet utilitaire fournit une invite de commande qui permet de saisir un nombre de commandes pour effectuer des changements sur chronyd. La configuration par défaut fait que chronyd accepte les commandes d'une instance locale de chronyc, mais chronyc peut être utilisé pour altérer la configuration, ainsi chronyd autorisera un contrôle externe. chronyc peut être exécuté à distance après avoir configuré chronyd pour accepter les connexions à distance. Les adresses IP autorisées à se connecter à chronyd doivent être minutieusement contrôlées.

15.2.3. Comprendre les commandes de configuration Chrony

Le fichier de configuration par défaut de chronyd est /etc/chrony.conf. L'option -f peut être utilisée pour spécifier un autre chemin de fichier de configuration. Veuillez consulter la page man chronyd pour obtenir des options supplémentaires. Pour obtenir une liste complète des directives pouvant être utilisées, veuillez consulter http://chrony.tuxfamily.org/manual.html#Configuration-file. Voici une sélection des options de configuration :
Commentaires
Les commentaires doivent être précédés de #, %, ; ou de !
autoriser
Optionnellement, spécifiez un hôte, un sous-réseau, ou un réseau à partir duquel autoriser les connexions NTP à une machine qui puisse agir en tant que serveur NTP. Par défaut, les connexions ne sont pas autorisées.

Exemples :

  1. allow server1.example.com
    Veuillez utiliser ce format pour spécifier un hôte particulier, par son nom d'hôte, afin d'être autorisé à y accéder.
  2. allow 192.0.2.0/24
    Veuillez utiliser ce format pour spécifier un réseau particulier afin d'être autorisé à y accéder.
  3. allow 2001:db8::/32
    Veuillez utiliser ce format pour spécifier une adresse IPv6 afin d'être autorisé à y accéder.
cmdallow
Similaire à la directive allow (veuillez consulter la section allow), sauf que l'accès de contrôle est autorisé (plutôt que l'accès client NTP) sur un sous-réseau ou un hôte particulier. (« accès de contrôle » signifie que chronyc peut être exécuté sur ces hôtes et connecté avec succès à chronyd sur cet ordinateur.) La syntaxe est identique. Il existe également une directive cmddeny all avec un comportement similaire à la directive cmdallow all.
dumpdir
Chemin vers le répertoire pour enregistrer l'historique des mesures à travers les redémarrages de chronyd (en supposant qu'aucun changement n'ait été appliqué au comportement de l'horloge système pendant qu'elle n'était pas en cours d'exécution). Si cette capacité doit être utilisée (via la commande dumponexit dans le fichier de configuration, ou la commande dump dans chronyc), la commande dumpdir doit être utilisée pour définir le répertoire dans lequel les historiques des mesures sont enregistrés.
dumponexit
Si cette commande est présente, elle infique que chronyd devrait enregistrer l'historique des mesure de chacune de ses sources horaire lorsque le programme se ferme. (Veuillez consulter la commande dumpdir ci-dessus).
local
Le mot-clé local est utilisé pour que chronyd puisse apparaître synchronisé avec le temps réel du point de vue des interrogations des clients, même s'il ne possède pas de source de synchronisation actuellement. Cette option est normalement utilisée sur l'ordinateur « maître » dans un réseau isolé, où il est requis que plusieurs ordinateurs soient synchronisés les uns aux autres, et où le « maître » est aligné au temps réel par saisie manuelle.
Voici un exemple de la commande :
local stratum 10
Une valeur élevée de 10 indique que l'horloge se trouve si loin de l'horloge de référence que son heure n'est pas fiable. Si l'ordinateur a accès à un autre ordinateur qui lui est synchronisé à une horloge de référence, celui-ci se trouvera à un stratum de moins de 10. Ainsi, le choix d'une valeur élevée, comme 10 pour la commande local, empêche à l'heure de la machine d'être confondue avec le temps réel, si celle-ci devait un jour se propager aux clients qui peuvent voir des serveurs réels.
log
La commande log indique que certaines informations doivent être journalisées. La commande accepte les options suivantes :
measurements
Cette option journalise les mesures NTP brutes et les informations les concernants dans un fichier nommé measurements.log.
statistics
Cette option journalise les informations concernant le traitement de régression sur un fichier nommé statistics.log.
tracking
Cette option journalise les changements apportés à l'estimation des taux de gains ou pertes du système, sur un fichier nommé tracking.log.
rtc
Cette option journalise les informations sur l'horloge temps réel du système.
refclocks
Cette option journalise les mesures brutes et filtrées des horloges de référence sur un fichier nommé refclocks.log.
tempcomp
Cette option journalise les mesures de température et les compensations de vitesse du système sur un fichier nommé tempcomp.log.
Les fichiers journaux sont écrits sur le répertoire spécifié par la commande logdir. Ci-dessous figure un exemple de la commande :
log measurements statistics tracking
logdir
Cette directive permet de spécifier le répertoire où les fichiers journaux sont écrits. Ci-dessous figure un exemple d'utilisation de cette directive :
logdir /var/log/chrony
makestep
Normalement, chronyd fera que le système corrigera peu à peu tout décalage horaire, en ralentissant ou en accélérant l'horloge selon les besoins. Dans certaines situations, l'horloge système peut avoir dérivé au point où le processus de correction risque de prendre un long moment avant de corriger l'horloge système. Cette directive force chronyd à modifier l'horloge système si cet ajustement est supérieur à la valeur maximale, mais seulement s'il n'y a pas eu de mise à jour de l'horloge depuis que chronyd a été lancé dans la limite spécifiée (une valeur négative peut être utilisée pour désactiver la limite). Ceci est particulièrement utile lors de l'utilisation d'horloges de référence, car la directive initstepslew fonctionne uniquement avec des sources NTP.
Ci-dessous figure un exemple d'utilisation de la directive :
makestep 1000 10
Cette directive modifierait l'horloge système si l'ajustement était plus important que 1000 secondes, mais seulement lors des dix premières mises à jour horaires.
maxchange
Cette directive paramètre le décalage maximal autorisé corrigé sur une mise à jour de l'horloge. La vérification est effectuée uniquement après le nombre indiqué de mises à jour afin de permettre un ajustement initial important de l'horloge système. Lorsqu'un décalage supérieur au maximum spécifié se produit, il sera ignoré pour le nombre de fois indiqué, puis chronyd abandonnera et quittera (une valeur négative peut être utilisée afin de ne jamais quitter). Dans les deux cas, un message sera envoyé à syslog.
Ci-dessous figure un exemple d'utilisation de la directive :
maxchange 1000 1 2
Après la première mise à jour de l'horloge, chronyd vérifiera le décalage sur chaque mise à jour de l'horloge, ignorera deux ajustements de plus de 1000 secondes et quittera lors d'un ajustement ultérieur.
maxupdateskew
L'une des tâches de chronyd consiste à trouver à quelle vitesse l'horloge de l'ordinateur fonctionne comparé à ses sources de référence. En outre, une estimation des limites de l'erreur est calculée autour de l'estimation. Si la marge d'erreurs est trop importante, cela indique que les mesures n'ont pas encore été paramétrées et que la vitesse estimée de gain ou de perte n'est pas très fiable. Le paramètre maxupdateskew correspond à la limite pour déterminer si une estimation n'est pas assez fiable pour être utilisée. Par défaut, la limite est de 1000 ppm. Le format de la syntaxe est comme suit :
maxupdateskew skew-in-ppm
Des valeurs typiques de skew-in-ppm peuvent s'élever à 100 pour une connexion téléphonique de serveurs à travers une ligne téléphonique, et à 5 ou 10 pour un ordinateur sur un réseau LAN. Remarquez qu'il ne s'agit pas de l'unique moyen de protection contre l'utilisation d'estimations non fiables. À tout moment, chronyd conserve la trace des vitesses estimées de gain ou de perte, et de la limite d'erreur de l'estimation. Lorsqu'une nouvelle estimation est générée suivant une autre mesure de l'une des sources, un algorithme de combinaison pondéré est utilisé pour mettre à jour l'estimation maître. Ainsi. si chronyd possède une estimation maître très fiable et qu'une nouvelle estimation est générée avec une marge d'erreurs supérieure, l'esimation maître existante prévaudra sur la nouvelle estimation maître.
noclientlog
Cette directive, qui ne reçoit aucun argument, indique que les accès client ne doivent pas être journalisés. Ceux-ci sont normalement journalisés, permettant ainsi aux statistiques d'être rapportées en utilisant la commande client dans chronyc.
reselectdist
Lorsque chronyd sélectionne une source de synchronisation parmi les sources disponibles, une source avec une distance de synchronisation minimale est préférable. Cependant, pour éviter une resélection fréquente lorsqu'il se trouve plusieurs sources à une distance similaire, une distance fixe est ajoutée à la distance des sources qui ne sont pas sélectionnées. Cette distance peut être définie avec l'option reselectdist. Par défaut, la distance s'élève à 100 microsecondes.
Le format de la syntaxe est comme suit :
reselectdist dist-in-seconds
stratumweight
La directive stratumweight définit la distance devant être ajoutée par stratum à la distance de synchronisation lorsque chronyd sélectionne la source de synchronisation parmi les sources disponibles.
Le format de la syntaxe est comme suit :
stratumweight dist-in-seconds
Par défaut, la valeur de dist-in-seconds s'élève à 1 seconde. Cela signifie que les sources possédant un stratum plus bas sont normalement préférées aux sources avec un stratum plus élevé, même lorsque leur distance est significativement plus élevée. Définir stratumweight sur 0 cause à chronyd d'ignorer le stratum lors de la sélection de la source.
rtcfile
La directive rtcfile définit le nom du fichier dans lequel chronyd peut enregistrer les paramètres associés au suivi de la précision de l'horloge temps réel (RTC) du système. Le format de la syntaxe est comme suit :
rtcfile /var/lib/chrony/rtc
chronyd enregistre les informations dans ce fichier lorsqu'il se ferme et quand la commande writertc est exécutée dans chronyc. Les informations enregistrées contiennent l'erreur de l'horloge RTC à une certaine époque, cette époque (en secondes depuis le 1er janvier 1970), et la vitesse à laquelle l'horloge RTC gagne ou perd du temps. Toutes les horloges RTC ne sont pas prises en charge car leur code est spécifique au système. Remarquez que si cette directive est utilisée, alors l'horloge RTC ne devrait pas être ajustée manuellement car cela interfère avec le besoin de chrony de mesurer la vitesse à laquelle l'horloge dérive si elle est ajustée à des intervalles aléatoires.
rtcsync
La directive rtcsync est présente dans le fichier /etc/chrony.conf par défaut. Cela informera le noyau que l'horloge système est synchronisée et que le noyau mettra à jour l'horloge RTC toutes les 11 minutes.

15.2.4. Sécurité avec Chronyc

Comme l'accès à chronyc permet de modifier chronyd de la même manière qu'on puisse le faire par une modifcation des fichiers de configuration, l'accès à chronyc doit être limité. Des mots de passe écrits en ASCII ou HEX peuvent être spécifiés dans le fichier clé pour restreindre l'utilisation de chronyc. L'une des entrées est utilisée pour restreindre l'utilisation de commandes opérationnelles et est désignée comme étant la commande clé. Dans la configuration par défaut, une clé de commande aléatoire est générée automatiquement lors du démarrage. Il ne devrait pas être nécessaire de la spécifier ou de l'altérer manuellement.
D'autres entrées dans le fichier clé peuvent être utilisées comme clés NTP pour authentifier les paquets reçus de serveurs ou de pairs NTP distants. Les deux côtés doivent partager une clé avec un ID, un type de hachage et un mot de passe identiques dans leurs fichier clé. Cela nécessite la création manuelle des clés, ainsi que de les copier au moyen d'un support sécurisé, tel que SSH. Ainsi, si l'ID clé était de 10, alors les systèmes agissant en tant que clients doivent avoir une ligne dans leurs fichiers de configuration sous le format suivant :
server w.x.y.z key 10
peer w.x.y.z key 10
L'emplacement du fichier clé est spécifié dans le fichier /etc/chrony.conf. L'entrée par défaut dans le fichier de configuration est comme suit :
keyfile /etc/chrony.keys
Le numéro de la clé de commande est spécifié dans /etc/chrony.conf à l'aide de la directive commandkey, il s'agit de la clé que chronyd utilisera pour l'authentification des commandes utilisateurs. La directive du fichier de configuration prend le format suivant :
commandkey 1
Un exemple du format de l'entrée par défaut dans le fichier clé, /etc/chrony.keys, pour la clé de commande est comme suit :
1 SHA1 HEX:A6CFC50C9C93AB6E5A19754C246242FC5471BCDF
1 est l'ID clé, SHA1 est la fonction de hachage à utiliser, HEX est le format de la clé, et A6CFC50C9C93AB6E5A19754C246242FC5471BCDF est la clé générée de manière aléatoire lorsque chronyd a été lancé pour la première fois. La clé peut être donnée sous un format hexadécimal ou ASCII (par défaut).
Une entrée manuelle dans le fichier clé, utilisée pour authentifier les paquets de certains serveurs ou pairs NTP, peut être aussi simple que ce qui suit :
20 foobar
20 est l'ID clé et foobar est la clé d'authentification secrète, le hachage par défaut est MD5, et ASCII est le format par défaut de la clé.
Par défaut, chronyd est configuré pour écouter uniquement les commandes en provenance de localhost (127.0.0.1 et ::1) sur le port 323. Pour accéder à chronyd à distance avec chronyc, toutes les directives bindcmdaddress devront être supprimées du fichier /etc/chrony.conf afin de permettre l'écoute sur toutes les interfaces et la directive cmdallow devra être utilisée pour autoriser les commandes en provenance de l'adresse IP distante, ou du réseau ou sous-réseau distant. En outre, le port 323 doit être ouvert dans le pare-feu pour se connecter à partir un système distant. Remarquez que la directive allow est utilisée pour l'accès NTP tandis que la directive cmdallow sert à activer la réception de commandes distantes. Il est possible d'effectuer ces changements de manière temporaire en utilisant chronyc localement. Pour rendre les changements persistants, veuillez modifier le fichier de configuration.
Les communications entre chronyc et chronyd sont effectuées via UDP, qui doit donc être autorisé avant de pouvoir exécuter des commandes opérationnelles. Pour autoriser son utilisation, veuillez exécuter les commandes authhash et password comme suit :
chronyc> authhash SHA1
chronyc> password HEX:A6CFC50C9C93AB6E5A19754C246242FC5471BCDF
200 OK
Si chronyc est utilisé pour configurer le démon local chronyd, l'option -a exécutera les commandes authhash et password automatiquement.
Seules les commandes suivantes peuvent être utilisées sans mot de passe : activity, authhash, dns, exit, help, password, quit, rtcdata, sources, sourcestats, tracking, waitsync .