Использование 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
Так же следует дать вот эту ссылку, где есть детальное сравнение 3-х реализаций демонов синхронизации времени.

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

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

apt-get remove ntp ntpstat --purge
apt autoremove

Удалить ntpd или например chronyd нужно потом, что иначе systemd-timesyncd не будет синхронизировать время. За такую проверку отвечает файл /lib/systemd/system/systemd-timesyncd.service.d/disable-with-time-daemon.conf в котором прописан список бинарников, при наличии которых в системе демон systemd-timesyncd не будет работать.

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

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

Таким образом мы добавили в файл настройку NTP= определяющую список основных серверов времени, можно добавить настройку FallbackNTP= которая определит список резервных серверов времени:

echo 'FallbackNTP=ntp.ubuntu.com' >> /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.

Детальную информацию о состоянии синхронизации времени можно посмотреть командой:

timedatectl timesync-status

Результат:

       Server: 103.134.252.11 (0.debian.pool.ntp.org)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: 68D34CE2
    Precision: 1us (-24)
Root distance: 65.284ms (max: 5s)
       Offset: +10.793ms
        Delay: 149.152ms
       Jitter: 6.030ms
 Packet count: 8
    Frequency: +47.109ppm

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)

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


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

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

5 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Владимир
Владимир
3 лет назад

Спасибо, дружище. Сохранил мне пару часов времени)

Владимир
Владимир
3 лет назад

Статья толковая. Сайт в закладки)

Mitai
Mitai
1 год назад

Блин а почему терминал выводит номальное время локальное а программа выводит в UTC?

BoBaH
BoBaH
1 год назад

У меня вывод немного другой:
Local time: Чт 2023-04-20 10:58:03 MSK
Universal time: Чт 2023-04-20 07:58:03 UTC
RTC time: Чт 2023-04-20 07:58:03
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

5
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x