Sincronización de hora automática con el protocolo NTP en GNU/Linux

Escrito por picodotdev el .
gnu-linux planeta-codigo
Enlace permanente Comentarios

Muchos dispositivos electrónicos entre ellos las computadoras tienen un reloj interno que continúa funcionando aún estando apagados y desconectados de la red electrica gracias a una batería en forma de pila de botón. La fecha y la hora permiten conocer cuando se modifica un documento pero también otros procesos más importantes que también dependen del tiempo como el segundo factor de autenticación y los códigos temporales basados en el tiempo. Los relojes internos usados en las computadoras son bastante imprecisos y se adelantan o retrasan con respecto a la hora oficial, algunos dispositivos electrónicos ni siquiera tienen el hardware de un reloj interno. El protocolo Network Time Protocol o NTP permite a las computadoras obtener la hora de un servidor que ofrezca este servicio de forma regular para evitar diferencias significativas, algunos de estos servidores están respaldados por una organización gubernamental que ofrecen la medida del tiempo oficial de un país y que poseen relojes atómicos mucho más precisos.

Conocer la hora y fecha actual es importante también en las computadoras y programas para algo tan simple como conocer cuál fue la fecha de creación o modificación de un archivo o algo más importante como conocer la fecha de una compra o transacción bancaria. Las computadoras son capaces de mantener la hora y fecha gracias a una pequeña batería como fuente de energía como una pila de botón habitualmente una CR2032 y un reloj que sigue funcionando cuando la computadora está apagada y desconectada de toda fuente de energía. La pila de botón es suficiente para mantener el reloj interno de la computadora y otros dispositivos electrónicos funcionando durante más de 10 años.

Otra funcionalidad importante que depende del tiempo es el segundo factor de autenticación o 2FA. Para mayor seguridad es muy recomendable configurar el segundo factor de autenticación en los principales servicios como correo electrónico junto a otros servicios que tratan con información personal o datos bancarios. El segundo factor de autenticación o TOTP es un código adicional a la contraseña a introducir al autenticarse en un servicio. El TOTP normalmente está formado por unos seis dígitos que solo es válido durante un pequeño espacio de tiempo de unos 30 segundos, pasado este tiempo deja de ser válido y otro código pasa a ser válido. En caso de que el dispositivo que genera el código no posea el tiempo actual genera códigos inválidos.

Sin embargo, algunos dispositivos como la Raspberry Pi no posee un reloj interno con lo que no son capaces de mantener la hora cuando están apagados. Por otro lado, los relojes de las computadoras no son totalmente precisos y durante periodos de tiempo prolongados cada uno mide el paso del tiempo de forma diferente, el tiempo proporcionado por cada uno varía en unos pocos milisegundos o segundos. Estas variaciones de tiempo aunque pequeñas son suficientes para no ser válidas en ciertos propósitos que necesitan marcas de tiempo totalmente precisas. Enviar un correo electrónico de respuesta con una fecha anterior al original es una paradoja temporal, posiblemente inocua en correo electrónico pero un problema en una transacción financiera. Los relojes más precisos son los atómicos que tardan en desfasarse un segundo al cabo de 52 millones de años. El motivo por el que se utilizan relojes de cuarzo en los ordenadores en vez de atómicos más precisos es que los primeros son más baratos, más pequeños y con menor consumo, los relojes de cuarzo ofrecen una precisión suficiente durante más o menos un pequeño periodo de tiempo.

Los dispositivos que no tienen un reloj interno mantiene la hora actual utilizando el protocolo Network Time Protocol o NTP, los dispositivos que tiene reloj interno pero se quieren mantener mayor precisión pueden utilizar este protocolo para mantener yna medida del tiempo más precisa. Hay servidores que ofrecen la hora a través del protocolo NTP tomando como fuente el tiempo proporcionado por un organismo gubernamental siendo la autoridad encargada de proporcionar esta medida considerada la oficial. En España es el Real Instituto y Observatorio de la Armada ubicado en Cádiz el que mantiene la hora oficial, este organismo posee un reloj atómico y ofrece el servicio de NTP, en su página web en la Sección de Hora proporciona más detalles.

Hace unos días intenté entrar en mi cuenta de PayPal en la que tengo configurada el segundo factor de autenticación, resulta que mi ordenador que no lo tenía configurado con NTP tenía una diferencia de tiempo de dos minutos con la real. Esta diferencia de tiempo era suficiente para que el código no fuera válido utilizando el cliente KeePassXC para guardar las contraseñas y que también utilizo para generar los códigos TOTP del segundo factor de autenticación. El resultado fué que la cuenta de PayPal se me bloqueó de forma temporal como medida de seguridad para evitar ataques de fuerza bruta después de varios intentos.

No tenía activado el servicio NTP proporcionado por el gestor de servicios systemd, lo activé de forma fácil en el panel de configuración de GNOME.

Sincronización de hora en GNOME

Para activar el servicio NTP en GNOME basta con acceder al panel de configuración en la sección de Fecha y hora y activar la opción Fecha y hora automáticas. Esta opción hace lo mismo que desde la línea de comandos.

Configuración de fecha y hora en GNOME

Sincronización de hora desde línea de comandos

El gestor de servicios systemd proporciona un servicio para mantener sincronizada la fecha y hora con el protocolo NTP. Los siguientes comandos permiten conocer el estado del servicio y la información de la fecha y hora del sistema.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ systemctl status systemd-timesyncd.service
$ systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-10-07 19:09:48 CEST; 51min ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 355 (systemd-timesyn)
     Status: "Initial synchronization to time server 193.182.111.142:123 (2.arch.pool.ntp.org)."
      Tasks: 2 (limit: 38345)
     Memory: 2.1M
        CPU: 65ms
     CGroup: /system.slice/systemd-timesyncd.service
             └─355 /usr/lib/systemd/systemd-timesyncd

oct 07 19:09:48 archlinux systemd[1]: Starting Network Time Synchronization...
oct 07 19:09:48 archlinux systemd[1]: Started Network Time Synchronization.
oct 07 19:10:18 archlinux systemd-timesyncd[355]: Initial synchronization to time server 193.182.111.142:123 (2.arch.pool.ntp.org).
systemctl-timesyncd-status.sh
1
2
3
4
5
6
7
8
$ timedatectl
               Local time: jue 2021-10-07 20:01:59 CEST
           Universal time: jue 2021-10-07 18:01:59 UTC
                 RTC time: jue 2021-10-07 18:01:59
                Time zone: Europe/Madrid (CEST, +0200)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no
timedatectl.sh

El siguiente comando ofrece información más detallada, incluye el servidor NTP utilizado y el intervalo de tiempo entre sincronizaciones.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ timedatectl timesync-status
       Server: 193.182.111.142 (2.arch.pool.ntp.org)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: C0248F96
    Precision: 1us (-20)
Root distance: 39.024ms (max: 5s)
       Offset: -1.968ms
        Delay: 76.516ms
       Jitter: 10.264ms
 Packet count: 7
    Frequency: +23,154ppm
timesyncd-timesync-status.sh

Habilitar el servicio indica que el servicio se inicie como parte del inicio del sistema, si el servicio está parado se puede iniciar de forma explícita.

1
2
$ systemctl enable systemd-timesyncd.service
$ systemctl start systemd-timesyncd.service
systemctl-timesyncd.sh

El servidor NTP utilizado para realizar la sincronización de la fecha y la hora usa la configuración personalizada del archivo /etc/systemd/timesyncd.conf en el que se incluye el dominio del servicio. Sin haber realizado cambios en el archivo todos los valores de está configuración están comentados. Los valores por defecto de esta configuración se definen en tiempo de compilación, en el caso de los paquetes de Arch Linux en el archivo PKGBUILD de systemd.

En este archivo se pone el servidor NTP deseado si es otro distinto del por defecto como el proporcionado por el Real Instituto y Observatorio de la Armada, hora.roa.es y minuto.roa.es, u otro de los proporcionados por la organización de voluntarios NTP Pool Project que utilizan muchas distribuciones incluida Arch Linux y dispositivos en internet como routers.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it under the
#  terms of the GNU Lesser General Public License as published by the Free
#  Software Foundation; either version 2.1 of the License, or (at your option)
#  any later version.
#
# Entries in this file show the compile time defaults. Local configuration
# should be created by either modifying this file, or by creating "drop-ins" in
# the timesyncd.conf.d/ subdirectory. The latter is generally recommended.
# Defaults can be restored by simply deleting this file and all drop-ins.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
timesyncd.conf


Comparte el artículo: