Использование systemd-timesyncd для синхронизации времени в Debian/Ubuntu

В Linux для синхронизации времени традиционно используется ntpd как стандарт де-факто, но есть другая и более простая альтернатива — это systemd-timesyncd.

Давайте настроим его для синхронизации времени, а про ntpd забудем и удалим его.

С ntpd все просто, ставится пакет ntp, настраивается файл конфигурации /etc/ntp.conf и включается служба ntp (systemctl start ntp), далее проверяем с помощью утилиты ntpstat факт синхронизации локальных часов с удаленным сервером и радуемся.
Все бы хорошо, но с помощью ntpd можно не только забирать время с удаленных сервером, но и выступать в качестве сервера времени для других, то есть ntpd принимает входящие соединения и его некорректная настройка может послужить причиной участия вашего сервера в DDoS-атаки (см. NTP amplification attack (CVE-2013-5211))
Конечно во многих дистрибутивах уже исправили дефолтный файл конфигурации ntp.conf и теперь сервер не может участвовать в этой атаке, но… береженого бог бережет.
Зачем использовать ntpd если ваш сервер не будет выступать в роли сервера, предоставляющего точное время для других серверов?
Достаточно установить клиента, который будет забирать время с удаленного сервера и синхронизировать ваши часы, что и делает systemd-timesyncd.

В дистрибутивах с системой инициализации systemd есть встроенная альтернатива ntpd — это systemd-timesyncd

Исходные данные: Ubuntu 16.04.6 (xenial)
Задача: Отказаться от ntpd и настроить systemd-timesyncd для синхронизации часов.

Удалим ntpd и утилиту ntpstat:

apt-get remove ntp ntpstat --purge
apt autoremove

Настроим systemd-timesyncd, для этого в файл конфигурации /etc/systemd/timesyncd.conf пропишем список серверов времени:

echo 'Servers=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org' >> /etc/systemd/timesyncd.conf

Смотрим текущий статус синхронизации часов:

timedatectl status

Результат:

      Local time: Вт 2020-02-04 13:13:04 +05
  Universal time: Вт 2020-02-04 08:13:04 UTC
        RTC time: Вт 2020-02-04 08:14:11
       Time zone: Asia/Yekaterinburg (+05, +0500)
 Network time on: yes
NTP synchronized: no
 RTC in local TZ: no

В строке «NTP synchronized» может стоять no если синхронизация часов по ntp до этого не была настроена вообще или yes, если до этого часы синхронизировались с помощью ntpd

Включаем использование systemd-timesyncd для синхронизации времени:

timedatectl set-ntp true

Включаем и перезапускаем службу systemd-timesyncd:

systemctl enable --now systemd-timesyncd.service
systemctl restart systemd-timesyncd.service

Проверяем статус:

systemctl status systemd-timesyncd.service

Результат:

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Вт 2020-02-04 13:14:22 +05; 16min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 11666 (systemd-timesyn)
   Status: "Synchronized to time server 91.206.16.3:123 (0.debian.pool.ntp.org)."
    Tasks: 2
   Memory: 388.0K
      CPU: 10ms
   CGroup: /system.slice/systemd-timesyncd.service
           └─11666 /lib/systemd/systemd-timesyncd

фев 04 13:14:22 myserver systemd[1]: Starting Network Time Synchronization...
фев 04 13:14:22 myserver systemd[1]: Started Network Time Synchronization.
фев 04 13:12:34 myserver systemd-timesyncd[11666]: Synchronized to time server 91.206.16.3:123 (0.debian.pool.n

Через несколько минут можно проверить с помощью timedatectl состояние синхронизации:

timedatectl status

Результат:

      Local time: Вт 2020-02-04 13:32:03 +05
  Universal time: Вт 2020-02-04 08:32:03 UTC
        RTC time: Вт 2020-02-04 08:32:03
       Time zone: Asia/Yekaterinburg (+05, +0500)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Значение в строке «NTP synchronized» должно измениться на yes

Если systemd-timesyncd не синхронизирует часы, то прежде всего проверьте настройки межсетевого экрана (iptables) на предмет разрешения исходящих подключений на 123 порт по протоколу UDP.

P.S. Утилиту timedatectl так же можно использовать для смены часового пояса, пример:

Выведем список временных зон:

timedatectl list-timezones

Установим временную зону Asia/Yekaterinburg:

timedatectl set-timezone Asia/Yekaterinburg

Проверим:

date

Результат:

Вт фев  4 13:37:07 +05 2020

+5 свидетельствует об установке нашей зоны (Asia/Yekaterinburg это UTC+5)

На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.


Оставить комментарий

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о