Dans ce chapitre, vous allez apprendre à garder votre serveur à l’heure.
Mais pourquoi est-ce si important de garder un serveur à l’heure ?
Sur un serveur, beaucoup de programmes utilisent l’heure système : des logs qui sont tous horodatés, aux bases de données qui enregistrent l’heure de certains changements, les applications sont nombreuses. La précision de l’heure devient particulièrement critique dès lors que plusieurs machines travaillent ensemble, car elles utilisent souvent l’heure pour synchroniser leurs actions. Vous aurez vous-même certainement besoin de vous appuyer sur l’heure si vous devez faire le lien entre plusieurs fichiers de logs répartis sur plusieurs machines.
Dans un premier temps, je vais vous montrer comment configurer manuellement l’heure de votre système. C’est toujours utile, mais pour être sûr de garder votre serveur à l’heure à tout moment, ce ne sera pas suffisant. Je vous montrerai donc ensuite comment utiliser le protocole NTP, pour Network Time Protocol, pour synchroniser en continu l’heure de tous les ordinateurs de votre réseau avec des horloges de référence en ligne.
Régler l’heure de votre système avec timedatectl
Dans le chapitre précédent, je vous disais que systemd est utilisé pour gérer de plus en plus de fonctions système. En voilà un nouvel exemple, puisqu’il permet même de configurer l’heure de votre serveur. Pour cela, vous utiliserez la commande timedatectl
.
Utilisée seule, la commande timedatectl
affichera les informations sur l’heure de votre système :
$ timedatectl Local time: Wed 2021-11-23 18:49:37 UTC Universal time: Wed 2021-11-23 18:49:37 UTC RTC time: Wed 2021-11-23 18:49:38 Time zone: Etc/UTC (UTC, +0000) System clock synchronized: yes systemd-timesyncd.service active: yes RTC in local TZ: no
Si votre horloge n’est pas synchronisée automatiquement en ligne, vous pouvez configurer l’heure de votre serveur en utilisant set-time
:
$ sudo timedatectl set-time “2021-11-23 18:32:53”
Vous pouvez également lister les différents fuseaux horaires par list-timezones
mais attention, il y en a beaucoup...
$ timedatectl list-timezones | grep Paris Europe/Paris
Vous pouvez ensuite configurer votre fuseau horaire grâce à set-timezone
:
$ sudo timedatectl set-timezone Europe/Paris
Passez maintenant au niveau supérieur et partez à la découverte de NTP.
Gérez l’heure de votre réseau avec NTP
NTP est donc un protocole qui permet de synchroniser l’heure de différents systèmes à travers un réseau IP. Des clients synchronisent leur horloge avec des serveurs. Ces serveurs se synchronisent eux-même avec d’autres serveurs, et ainsi de suite. Ce réseau est organisé en couches qu’on appelle des strata (un stratum, des strata, vive le latin !).
Le plus haut niveau est le stratum 0 qui est composé de matériels spécialisés généralement couplés avec des horloges atomiques. Les serveurs synchronisés directement avec des serveurs de stratum 0 sont appelés stratum 1, puis les serveurs synchronisés avec les serveurs de stratum 1 sont des stratum 2, et ainsi de suite.
Beaucoup d’organisations gèrent leurs propres serveurs de temps. Certaines organisations ne permettent qu’une utilisation en interne de leur serveur NTP, tandis que d’autres permettent une utilisation publique de leur serveur. Un des plus grands clusters de serveurs NTP publics est appelé pool.ntp.org. C’est celui qui est configuré par défaut dans la plupart des distributions Linux.
Sous les dernières versions d’Ubuntu, l’horloge système est automatiquement synchronisée en réseau. Cette synchronisation est gérée par le service systemd systemd-timesyncd.service
. Vous pouvez accéder à plus d’informations sur ce service par la commande :
$ systemctl status systemd-timesyncd
Il est donc possible de synchroniser l’horloge de tous les serveurs de son réseau en synchronisant chacun d’entre eux avec le réseau mondial NTP ; mais dès que votre réseau grossit, il devient avantageux d’avoir son propre serveur NTP. En effet, avoir son propre serveur NTP permet :
d’améliorer la synchronisation entre les serveurs de votre réseau ;
de réduire le trafic dû aux synchronisations de temps sur votre liaison Internet ;
de garder vos serveurs synchronisés même en cas de coupure d’Internet ;
d’éviter de solliciter inutilement le réseau mondial NTP.
Voyons donc comment installer votre propre serveur NTP.
Gérez votre propre serveur NTP avec Chrony
À partir de la version 18.04, Ubuntu utilise le logiciel Chrony comme serveur NTP par défaut. Vous pouvez installer ce programme par la commande :
$ sudo apt-get install chrony
Vous devez ensuite configurer Chrony en éditant le fichier /etc/chrony/chrony.conf. Voici quelques explications sur les informations que vous trouvez dans ce fichier de configuration :
pool ntp.ubuntu.com iburst maxsources 4 pool 0.ubuntu.pool.ntp.org iburst maxsources 1 pool 1.ubuntu.pool.ntp.org iburst maxsources 1 pool 2.ubuntu.pool.ntp.org iburst maxsources 2
Les lignes commençant par pool
indiquent l’adresse des serveurs NTP (ou des groupes de serveurs, plus exactement) à utiliser, et le nombre de ressources maximum à utiliser pour chacun d’entre eux. À priori, vous pouvez continuer à utiliser la sélection par défaut.
driftfile /var/lib/chrony/chrony.drift
driftfile
indique le fichier à utiliser pour enregistrer la dérive de temps de votre serveur par rapport au pool. Ça permet de resynchroniser plus vite votre horloge.
Par défaut, Chrony ne permet pas à des clients de se synchroniser avec ce service de temps. Vous devez explicitement autoriser le réseau de vos clients par la directive allow
. Rajoutez donc en fin de fichier la ligne suivante, et enregistrez votre fichier :
allow 192.168.29/24
Vous pouvez alors lancer Chrony et l’activer au démarrage du serveur :
$ sudo systemctl enable chrony $ sudo systemctl start chrony
Comme Chrony s’occupe maintenant de synchroniser votre horloge système, vous pouvez désactiver systemd-timesyncd
par :
$ sudo timedatectl set-ntp false
Chrony fournit une interface en ligne de commande pour interroger et gérer Chrony : chronyc
. Vous pouvez par exemple afficher les serveurs avec lesquels vous êtes synchronisé par la commande :
$ chronyc sources 210 Number of sources = 8 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ golem.canonical.com 2 6 377 22 -86ms[ -86ms] +/- 138ms ^- pugot.canonical.com 2 6 377 24 -27ms[ -27ms] +/- 69ms ^- chilipepper.canonical.com 2 6 377 87 +1290us[+2012us] +/- 65ms ^- alphyn.canonical.com 2 6 377 20 -123ms[ -123ms] +/- 217ms ^- ks3301805.kimsufi.com 3 6 77 23 -27ms[ -27ms] +/- 96ms ^* ntp-sop.inria.fr 1 6 377 86 +300us[+1022us] +/- 15ms ^- kiwi.bitschine.fr 2 6 377 22 -2061us[-2061us] +/- 35ms ^+ mail.fangfufu.co.uk 2 6 377 23 -143us[ -143us] +/- 27m
Le serveur qui commence par ^*
est la source de temps actuelle. Ceux qui commencent par ^+
sont utilisés pour calculer une moyenne de temps, et ceux qui commencent par ^-
ne sont pas utilisés actuellement.
Il est maintenant temps de configurer votre client pour utiliser votre serveur NTP local.
Configurez votre client pour utiliser votre propre serveur NTP
La manière d’indiquer l’adresse de votre serveur NTP à votre client dépendra évidemment du système sur lequel il est installé. Si vous avez repris le client configuré dans le cours “Montez un serveur de fichiers sous Linux”, votre client est sous Ubuntu et est déjà synchronisé par le service systemd-timesyncd
. Il ne vous reste alors qu’à lui indiquer l’adresse de votre serveur en éditant le fichier /etc/systemd/timesyncd.conf
:
[Time] NTP=vm-server
Vous pouvez ensuite redémarrer votre service pour prendre en compte la nouvelle configuration :
$ sudo systemctl restart systemd-timesyncd
Enfin, vous pouvez vérifier que la synchronisation se fait bien par la commande :
$ sudo systemctl status systemd-timesyncd ● systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-11-23 18:06:29 CEST; 1h 10min ago Docs: man:systemd-timesyncd.service(8) Main PID: 3229 (systemd-timesyn) Status: "Synchronized to time server 192.168.29.1:123 (vm-server)
Pour résumer
Vous pouvez configurer l’heure de votre système avec
timedatectl
.NTP est un protocole de synchronisation de temps entre différentes machines à travers le réseau.
Le serveur NTP par défaut sous Ubuntu s’appelle Chrony.
Il est possible de synchroniser vos clients sur votre propre serveur NTP.
Vous savez maintenant comment fournir un service de temps à votre réseau. Dans le prochain chapitre, vous apprendrez à gérer un autre service très courant : un annuaire LDAP.