В 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)
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.
Спасибо, дружище. Сохранил мне пару часов времени)
Статья толковая. Сайт в закладки)
Блин а почему терминал выводит номальное время локальное а программа выводит в UTC?
timedatectl выводит 3 строки:
Local time — локальное время, то же что и команда date с учетом временной зоны
Universal time — время по UTC
RTC time — время Real Time Clock с часов сервера
У меня вывод немного другой:
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
Здравствуйте… Может вы мне подскажете в ситуации… Вопрос такой ;
почему нижняя часть сегмента «групп» отмечена как неактивная зона и как можно это решить?
https://ibb.co/YcQZhgP
Добрый вечер, а почему Вы решили что systemd-timesyncd неактивен?
Выполните
Должен быть выведен pid процесса systemd-timesyncd который должен совпадать с номером под выводом CGroup (см мой скрин)
Понял спасибо !