Localisation géographique et synchronisation temporelle
La localisation géographique et la synchronisation des horloges est indispensable au bon fonctionnement des systèmes informatiques (logs, authentifications, chiffrement, forensic, …). Les logiciels Linux utiles sont date
, timedatectl
, ntpdate
, chronyc
. Le démon chronyd
permet d’assurer la synchronisation temporelle auprès de serveurs de temps (NTP).
1. Localisation
Sous Debian/Ubuntu :
sudo dpkg-reconfigure tzdata
Sous RHEL/Centos, le fichier /etc/localtime
est un lien symbolique vers un des fichiers situés dans /usr/share/zoneinfo/
:
ls -l /etc/localtime
2. Date courante : commande date
La commande date
permet d’afficher, initialiser et de convertir la date et l’heure du système alors que la commande hwclock
affiche la date et l’heure “matérielle”.
La commande date
prend des options et accepte un format d’affichage avec différents masques selon cette syntaxe :
date [OPTION]... [+FORMAT]
3. Options de la commande date
date
dim jun 6 11:25:06 CEST 2021
Afficher la date et l’heure au format ISO 8601 :
date -I
2021-06-06
Afficher la date et l’heure au format RFC 2822 :
date -R
Sun, 06 Jun 2021 11:25:15 +0200
Afficher la date en système de temps universel (UTC) :
date -u
dim jun 6 09:25:17 UTC 2021
4. Contrôler le format d’affichage de la commande date
On peut contrôler le format d’affichage de la date. Par exemple :
date ; date -u +%Y-%m-%d-%H%M%S
dim jun 6 11:47:48 CEST 2021
2021-06-06-094748
date ; date -u +%s
dim jun 6 11:48:12 CEST 2021
1622972892
+FORMAT
contrôle l’affichage où “FORMAT” les séquences suivantes :
Séquences | Affichage |
---|---|
%% | un caractère % |
%a | nom abrégé localisé du jour de la semaine (par exemple dim.) |
%A | nom complet localisé du jour de la semaine (par exemple dimanche) |
%b | nom abrégé localisé du mois (par exemple janv.) |
%B | nom complet localisé du mois (par exemple janvier) |
%c | date et heure localisées (par exemple jeu. 03 mars 2005 23:05:25 CET) |
%C | siècle, comme %Y , sans les deux derniers chiffres (par exemple 20) |
%d | jour du mois (par exemple 01) |
%D | date, identique à %m/%d/%y |
%e | jour du mois, éventuellement complété par une espace, identique à %_d |
%F | date complète, identique à %Y-%m-%d |
%g | deux derniers chiffres de l’année du numéro de semaine ISO (voir %G ) |
%G | année correspondant au numéro de semaine ISO (voir %V ) ; normalement seulement utile avec %V |
%h | identique à %b |
%H | heure (00..23) |
%I | heure (01..12) |
%j | jour de l’année (001..366) |
%k | heure avec espace ( 0..23), identique à %_H |
%l | heure avec espace ( 1..12), identique à %_I |
%m | mois (01..12) |
%M | minute (00..59) |
%n | un changement de ligne |
%N | nanosecondes (000000000..999999999) |
%p | indicateur localisé AM ou PM en majuscules (blanc si inconnu) |
%P | identique à %p mais en minuscules |
%r | heure locale au format 12 heures (par exemple 11:11:01 PM) |
%R | heure en format 24 heures identique à %H:%M |
%s | secondes depuis 1970-01-01 00:00:00 UTC |
%S | secondes (00..60) |
%t | une tabulation |
%T | l’heure, identique à %H:%M:%S |
%u | jour de la semaine (1..7) ; 1 représente le lundi |
%U | numéro de la semaine de l’année, avec dimanche en premier jour de la semaine (00..53) |
%V | numéro de la semaine ISO, avec lundi en premier jour de la semaine |
%w | jour de la semaine (0..6), 0 représente le dimanche |
%W | numéro de la semaine, avec lundi en premier jour de la semaine (00..53) |
%x | représentation localisée de la date (par exemple 12/31/99) |
%X | représentation localisée de l’heure (par exemple 23:13:48) |
%y | deux derniers chiffres de l’année (00..99) |
%Y | année |
%z | fuseau horaire numérique +hhmm (par exemple -0400) |
%:z | fuseau horaire numérique +hh:mm (par exemple -04:00) |
%::z | fuseau horaire numérique +hh:mm:ss (par exemple -04:00:00) |
%:::z | fuseau horaire numérique utilisant « : » pour la précision (par exemple -04, +05:30) |
%Z | abréviation alphabétique des fuseaux horaires (par exemple EDT) |
5. Network Time Protocol
Network Time Protocol ou NTP est un protocole qui permet de synchroniser l’horloge locale d’ordinateurs sur une référence d’heure via le réseau. Un service NTP utilise le port UDP (ou TCP) 123.
La version 3 de NTP est la plus répandue à ce jour. Elle est formalisée par la RFC 1305 qui spécifie plusieurs aspects :
- la description du protocole réseau (Architecture)
- les modes de fonctionnement (Messages)
- les algorithmes à mettre en place dans les machines.
La version 4 de NTP est une révision importante publiée dans la RFC 5905 en juin 2010.
Aussitôt après la parution de la version 3 de NTP, une version simplifiée est apparue, appelée « Simple Network Time Protocol » (SNTP) qui a également fait l’objet de plusieurs RFC. Par rapport à NTP, cette version est simplifiée dans le sens qu’elle ne spécifie pas les algorithmes à mettre en place dans les machines.
On ne manquera pas de visiter le site du projet NTP pool : http://www.pool.ntp.org/fr/.
6. Timedatectl
La commande timedatectl
permet d’interroger et de modifier les paramètres de temps et de date.
timedatectl --help
timedatectl [OPTIONS...] COMMAND ...
Query or change system time and date settings.
-h --help Show this help message
--version Show package version
--no-pager Do not pipe output into a pager
--no-ask-password Do not prompt for password
-H --host=[USER@]HOST Operate on remote host
-M --machine=CONTAINER Operate on local container
--adjust-system-clock Adjust system clock when changing local RTC mode
Commands:
status Show current time settings
set-time TIME Set system time
set-timezone ZONE Set system time zone
list-timezones Show known time zones
set-local-rtc BOOL Control whether RTC is in local time
set-ntp BOOL Control whether NTP is enabled
Par exemple :
timedatectl status
Local time: dim 2021-06-06 11:53:44 CEST
Universal time: dim 2021-06-06 09:53:44 UTC
RTC time: dim 2021-06-06 09:53:44
Time zone: Europe/Paris (CEST, +0200)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
dim 2021-03-28 01:59:59 CET
dim 2021-03-28 03:00:00 CEST
Next DST change: DST ends (the clock jumps one hour backwards) at
dim 2021-10-31 02:59:59 CEST
dim 2021-10-31 02:00:00 CET
Pour fixer la zone horaire :
timedatectl set-timezone Europe/Paris
7. client ntpdate
Pour se synchroniser dans le temps, on peut utiliser aussi le client ntpdate
:
sudo ntpdate fr.pool.ntp.org
6 Jun 11:55:10 ntpdate[400]: adjust time server 5.196.160.139 offset -0.000269 sec
8. Chrony
Chrony vise à remplacer le logiciel NTPd à des fins de performance. Il est l’outil de synchronisation temporelle par défaut à partir de Centos 7. Il offre un logiciel serveur chronyd
et dispose d’un logiciel client chronyc
.
S’il fallait installer et activer le service chronyd
.
sudo yum -y install chrony
sudo systemctl enable chronyd
sudo systemctl start chronyd
On peut aussi vérifier la bonne activation du service chronyd
.
sudo systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since sam 2021-06-05 12:32:43 CEST; 23h ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Process: 686 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)
Process: 653 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 675 (chronyd)
Tasks: 1
CGroup: /system.slice/chronyd.service
└─675 /usr/sbin/chronyd
jun 05 12:32:42 monlinux systemd[1]: Starting NTP client/server...
jun 05 12:32:43 monlinux chronyd[675]: chronyd version 3.4 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +S...DEBUG)
jun 05 12:32:43 monlinux chronyd[675]: Frequency -8.398 +/- 0.111 ppm read from /var/lib/chrony/drift
jun 05 12:32:43 monlinux systemd[1]: Started NTP client/server.
jun 05 12:32:49 monlinux chronyd[675]: Selected source 144.76.100.49
Hint: Some lines were ellipsized, use -l to show in full.
On trouvera les serveurs de synchronisation et d’autres paramètres utilisés par Chrony dans le fichier de configuration /etc/chrony.conf
.
cat /etc/chrony.conf
9. Client chronyc
Le client chronyc tracking
offre un diagnostic précis : le numéro de strate et les différentiels de synchronisation.
chronyc tracking
Reference ID : 904C6431 (wtfstfu.org)
Stratum : 3
Ref time (UTC) : Sun Jun 06 10:08:25 2021
System time : 0.000782300 seconds slow of NTP time
Last offset : -0.000317792 seconds
RMS offset : 0.000188593 seconds
Frequency : 7.999 ppm slow
Residual freq : -0.063 ppm
Skew : 0.105 ppm
Root delay : 0.018359069 seconds
Root dispersion : 0.006287391 seconds
Update interval : 515.1 seconds
Leap status : Normal
10. Afficher les sources de synchronisation avec chronyc
Le client chronyc sources -v
affiche les sources de synchronisation.
chronyc sources -v
210 Number of sources = 4
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^+ mtw.ig-haase.de 2 10 377 533 +938us[ +624us] +/- 35ms
^+ ntp2.hosteurope.de 2 10 377 626 +599us[ +287us] +/- 28ms
^* wtfstfu.org 2 9 377 369 -1952us[-2270us] +/- 15ms
^+ littlericket.me 2 10 377 33 +1590us[+1590us] +/- 26ms