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 serveurNTP
. Par défaut, les connexions ne sont pas autorisées.Exemples :
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.allow 192.0.2.0/24
Veuillez utiliser ce format pour spécifier un réseau particulier afin d'être autorisé à y accéder.allow 2001:db8::/32
Veuillez utiliser ce format pour spécifier une adresseIPv6
afin d'être autorisé à y accéder.
- cmdallow
- Similaire à la directive
allow
(veuillez consulter la sectionallow
), sauf que l'accès de contrôle est autorisé (plutôt que l'accès clientNTP
) 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 directivecmddeny all
avec un comportement similaire à la directivecmdallow 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 commandedumponexit
dans le fichier de configuration, ou la commandedump
dans chronyc), la commandedumpdir
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 commandedumpdir
ci-dessus). - local
- Le mot-clé
local
est utilisé pour quechronyd
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 commandelocal
, 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 :Les fichiers journaux sont écrits sur le répertoire spécifié par la commande- 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
.
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 forcechronyd
à 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 quechronyd
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 directiveinitstepslew
fonctionne uniquement avec des sourcesNTP
.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ètremaxupdateskew
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. sichronyd
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'optionreselectdist
. 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 lorsquechronyd
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éfinirstratumweight
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 lequelchronyd
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 commandewritertc
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:A6CFC50C9C93AB6E5A19754C246242FC5471BCDFOù
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 foobarOù
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
.