Как установить или изменить часовой пояс в linux

NTP[править]

Используется по-умолчанию в большинстве дистрибутивов ALT. Отличается высокой безопасностью и как следствие — некоторыми недостатками, самый неприятный из которых — это медленный старт, доходящий в некоторых случаях до суток. Сам демон имеет название ntpd, как и аналогичный из пакета ntp, однако не является совместимым с ним ни по параметрам запуска, ни по средствам контроля, ни по конфигурационному файлу.

пакет ntpправить

Пакет является эталонной реализацией протокола ntp и имеет долгую историю. Считается не очень безопасным ввиду лидерства по количеству закрытых за историю CVE. В ALT пакет состоит из нескольких подпакетов. Непосредственно к синхронизации имеют отношение два, а третий полезен для контроля состояния ntpd.

ntpdateправить

Утилита, позволяющая однократно посмотреть время на каком-либо NTP-сервере (не обязательно ntpd) и/или синхронизировать с ним системное время. Если запущен ntpd, требуется использовать ключ -u при запуске.

ntpqправить

Утилита, позволяющая посмотреть статус работающего ntpd, как локального, так и удалённого.

пакет chronyправить

Наименее проблемный сервер времени, умеющих синхронизировать время быстро по списку доверенных серверов.
В некоторых конфигурациях это единственный сервер времени, с которым что-то работает, например, кластеры файловой системы ceph.

apt-get install chrony
systemctl start chronyd
systemctl enable chronyd

Является клиентом SNTP, не может быть сервером NTP.

Время и дата в Ubuntu Server

Как я уже сказал во введении, следить за системным временем в ubuntu server нужно в обязательном порядке, как и в любом другом сервере. Начальные настройки вы делаете еще во время установки системы. Далее вам может понадобиться либо изменение часового пояса, либо более точная настройка и синхронизация часов.

Кстати, если вам интересно узнать, почему я лично использую именно ubuntu server, а не какой-то другой linux дистрибутив, то читайте мой обзор и сравнение ubuntu с другими системами.

Особенно актуальной тема системного времени становится, когда вы арендуете сервера где-то в другой стране с отличным от вашего часового пояса. По умолчанию, у хостера скорее всего будет установлен его часовой пояс. Иногда я забываю это проверить и замечаю только тогда, когда возникают какие-то проблемы. А вот список проблем, которые могут теоретически возникнуть, если на сервере будет неправильное время:

  1. При просмотре логов или разборе инцидентов придется сначала переводить время в свой часовой пояс или формат, чтобы адекватно разобраться в ситуации.
  2. Если у вас настроена какая-то интеграция с доменной структурой Windows, расхождение по времени может приводить к проблемам.
  3. При использовании cron и автоматических заданий для выполнения, неправильное время на сервере может удивить вас тем, что ваши задачи будут выполнены не тогда, когда вы этого ожидаете.
  4. Если на сервере работает web сайт или почтовый сервис, время публикации постов или отправления писем будет неправильным, что создаст неудобство пользователям.

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

Утилита date

Посмотреть время в командной строке Ubuntu можно с помощью команды date.

date

В данном случае вы видите следующую информацию:

Формат вывода времени утилитой date в Ubuntu
Fri День недели, пятница
26 Число месяца
Mar Месяц, март
2021 Год
02:01:59 Время в формате час:минута:секунда
PM Время суток в 12-ти часовом формате, PM — после полудня
UTC Часовой пояс

Для того, чтобы посмотреть время в 24-х часовом формате в консоли ubuntu, можно использовать дополнительный ключ к команде, добавив туда еще и саму дату:

date +"%H:%M %d/%m/%Y"
14:09 26/03/2021

Таким образом, с помощью параметров форматирования, вы можете выбирать любой формат времени для отображения. Традиционно, командная строка linux позволяет очень гибко выполнять различные действия с помощью своих утилит. Например, вы можете посмотреть не только время и дату, но и вывести в консоль номер дня недели, добавив дополнительный ключ %j:

date +"%H:%M %d/%m/%Y %j"
14:13 26/03/2021 085

Узнать время сервера в unix формате можно вот так:

date '+%s'
1616768183

Если у вас часовой пояс отличный от UTC, а вы хотите увидеть время именно в этом часовой поясе, то воспользуйтесь следующим ключом команды:

date --utc

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

date +%Y-%m-%d
2021-03-26
date +%H:%M:%S
14:36:35
date +%Y-%m-%d_%H:%M:%S
2021-03-26_14:36:42

Утилита timedatectl

В составе systemd есть своя утилита для просмотра и настройки времени через консоль — timedatectl. Далее пример с ее участием для просмотра системного времени сервера ubuntu.

timedatectl

Local time Локальное время данного сервера
Universal time Время в часовом поясе UTC
RTC time Время на аппаратных часах
Time zone Ваш часовой пояс

С просмотром в консоли текущего времени сервера разобрались, переходим к его настройке.

Некоторые ошибки

1. the NTP socket is in use, exiting

Как правило, данная ошибка возникает при попытке синхронизировать время с помощью ntpdate, когда в системе работает демон ntp.

Причина: NTP сокет в системе уже занят, как правило, ntpd.

Решение: либо не использовать ntpdate, так как ntp умеет сверять время, либо отключить сервис ntpd командой service ntp stop.

2. Connection refused

Возникает при попытке выполнить команду ntpq -p.

Причина: нет разрешения на обращение к серверу.

Решение: проверьте, удастся ли выполнить запрос командой ntpq -pn 127.0.0.1 или ntpq -pn ::1. Также убедитесь, что настройка restrict позволяет серверу подключаться к самому себе по нужному протоколу.

3. no server suitable for synchronization found

Ошибка появляется при попытке синхронизировать время с другим сервером синхронизации.

Причина: сервер синхронизации не доступен по одной из причин: 1) не работает или выключен, 2) установлен restrict, 3) на сервере не запущен ntpd, 4) нет сетевой доступности из-за проблем на сети или брандмауэра.

Решение:

  1. Убедиться, что сервер доступен по сети.
  2. Проверить настройки ntp.conf — наличие соответствующего restrict.
  3. Проверить состояние сервиса командой service ntp status.
  4. Проверить настройки брандмауэра — убедиться в наличие правила, которое разрешает UDP порт 123.

Настройка клиента Linux

Для клиентов можно выбрать 2 стратегии настройки — с помощью ntp или утилиты ntpdate.

NTP

Устанавливаем ntp:

Ubuntu / Debian:

apt-get install ntp

CentOS / Red Hat:

yum install ntp

В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:

server 192.168.0.15

Остальные pool и server удаляем или комментируем.

Перезапускаем NTP:

systemctl restart ntp || service restart ntp

ntpdate

Утилита командной строки выполняет разовую синхронизацию. Чтобы автоматизировать процесс, добавляем задание в cron:

crontab -e

0 0 * * * /usr/sbin/ntpdate 192.168.0.15

* в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.

Настройка клиента Linux

Для клиентов можно выбрать несколько стратегий настройки — мы рассмотрим 3:

  1. С помощью Chrony.
  2. Сервис ntpd.
  3. Утилиты ntpdate.

Начнем с Chrony.

Chrony

Команда для установки зависит от типа дистрибутива Linux.

а) Ubuntu / Debian:

apt-get install chrony

б) CentOS 7,8

yum install chrony

После установки открываем /etc/chrony.conf:

vi /etc/chrony.conf

… и в качестве сервера оставляем только наш локальный сервер, например:

server 192.168.156.215 iburst

Разрешаем автозапуск сервиса:

systemctl enable chronyd || systemctl enable chrony

Перезапускаем сервис:

systemctl restart chronyd || systemctl restart chrony

Проверить состояние работы можно командой:

chronyc sources

NTP

Устанавливаем ntp:

а) Ubuntu / Debian:

apt-get install ntp

б) CentOS 7:

yum install ntp

В настройка /etc/ntp.conf в качестве сервера оставляем только наш локальный сервер, например:

server 192.168.0.15

Остальные pool и server удаляем или комментируем.

Перезапускаем NTP:

systemctl restart ntp || systemctl restart ntpd

Проверить состояние можно командой:

ntpq -p

ntpdate

Утилита командной строки выполняет разовую синхронизацию. Ее можно установить из репозитория.

а) Ubuntu / Debian:

apt-get install ntpdate

б) CentOS 7:

yum install ntpdate

Чтобы автоматизировать процесс, добавляем задание в cron:

crontab -e

0 0 * * * /usr/sbin/ntpdate 192.168.0.15

* в данном примере задание будет выполняться раз в день в 00:00. /usr/sbin/ntpdate — полный путь расположения утилиты, в разных системах может быть разным — проверить стоит командой which ntpdate.

Настройка netfilter (iptables) для NTP сервера

Настроив работу сервера, неплохо было бы его защитить. Мы знаем, что сервер работает на 123/udp порту, при этом запросы так же отправляются с порта 123/udp. Ознакомившись со статьей, что такое netfilter и правила iptables и ознакомившись с практическими примерами iptables, можно создать правила фильтрации сетевого трафика:

ntp ~ # iptables-save
# типовые правила iptables для DNS
*filter
:INPUT DROP 
:FORWARD DROP 
:OUTPUT DROP 
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
# разрешить доступ локальной сети к NTP серверу:
-A INPUT -s 192.168.1.1/24 -d 192.168.1.1/32 -p udp -m udp --dport 123 -m conntrack --ctstate NEW -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -p udp -m udp --sport 32768:61000 -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 32768:61000 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# разрешить доступ NTP серверу совершать исходящие запросы
-A OUTPUT -p udp -m udp --sport 123 --dport 123 -m conntrack --ctstate NEW -j ACCEPT
COMMIT

Это типовой пример! Для задания правил iptables под Ваши задачи и конфигурацию сети, необходимо понимать принцип работы netfilter в Linux, почитав вышеуказанные статьи.

Установка часового пояса

Обычно вы указываете часовой пояс во время процедуры установки, и у вас нет задачи менять его в дальнейшем. Однако бывают случаи, когда необходимо изменить часовой пояс. Есть несколько инструментов, которые могут помочь. Для определения местного часового пояса хоста Linux использует файлы часовых поясов. Эти файлы находятся в каталоге /usr/share/zoneinfo. По умолчанию для моего часового пояса система прописывает вот это: /etc/ localtime -> ../usr/share/zoneinfo/America/New_York. Но вам не нужно знать такие тонкости, чтобы изменить часовой пояс.

Главное — знать официальное название часового пояса для вашего местоположения и соответствующую команду. Скажем, вы хотите изменить часовой пояс на Лос-Анджелес:

Теперь вы можете установить часовой пояс. Я использовал команду date для проверки изменений, но вы также можете использовать timedatectl:

Теперь вновь можете изменить часовой пояс своего хоста на местное время.

Тестирование

Проверить состояние получения эталонного времени можно командой:

ntpq -p

Мы должны увидеть, примерно, следующее:

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ru.pool.ntp.org .POOL.          16 p    —   64    0    0.000    0.000   0.000
 ntp.ubuntu.com  .POOL.          16 p    —   64    0    0.000    0.000   0.000
*91.189.94.4     17.253.34.253    2 u   58   64  377   55.802    3.790   0.412
-91.189.91.157   132.246.11.231   2 u   56   64  377  113.456   -1.746   0.334
+91.189.89.198   192.53.103.108   2 u    1   64  377   54.595    4.229   0.608
+91.189.89.199   17.253.34.253    2 u   61   64  377   54.061    2.637   0.557

* где:

  • remote — адрес сервера времени, с которым синхронизируется наш сервер;
  • refid — вышестоящий сервер (с которым сервер из графы выше получает время);
  • st — уровень сервера (stratum);
  • t — пир (unicast или multicast);
  • when — когда последний раз сверялось время;
  • poll — периодичность синхронизации с этим сервером;
  • reach — состояние работоспособности. Если удалось произвести синхронизации восемь раз в подряд становится равным 377;
  • delay — время задержки;
  • offset — разница между нашим временем и временем на сервере; положительное — наши часы спешат, отрицательное — отстают;
  • jitter — смещение времени на удаленном сервере;
  • * — с этим сервером синхронизирует время наш ntpd;
  • + — сервер можно использовать для сверки часов;
  • — — не рекомендован для синхронизации;
  • x — не доступен.

Проверить отдачу времени сервером можно введя команду на другом Linux:

ntpdate 192.168.0.15

Правильный ответ имеет следующий вид:

ntpdate: adjust time server 192.168.0.15 offset 0.017657 sec

* время было рассинхронизировано на 0.017657 секунд.

Отобразить текущее время можно командой:

date

Если после синхронизации время некорректно, настраиваем правильный часовой пояс:

cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* московское время (GMT+3).

Настройка часового пояса в CentOS

Чтобы время на сервере CentOS Linux соответствовало вашему часовому поясу, его можно изменить вручную. Для этого есть две утилиты:

  • timedatectl
  • tzdata

Чтобы изменить часовой пояс через утилиту timedatectl, выполните команду:

# timedatectl set-timezone Europe/Moscow

Или же можно использовать tzdata. Чтобы воспользоваться данным методом, нужно заменить файл /etc/localtime на нужный вам. Весь список часовых поясов, расположен в директории /usr/share/zoneinfo/. Заменим часовой пояс на Asia/Almaty. Делаем бэкап файла locatime:

# mv /etc/localtime /etc/localtime.bak

Создаем симлинк на нужный часовой пояс:

# ln -s /usr/share/zoneinfo/Asia/Almaty /etc/localtime

NTPSec

Эрик Стивен РеймондСобор и Базаробосновался

  • Недокументированные, устаревшие, устаревшие или сломанные refclock.
  • Неиспользуемая библиотека ICS.
  • libopts/autogen.
  • Старый код для Windows.
  • ntpdc.
  • Autokey.
  • C код ntpq переписан на Python.
  • C код sntp/ntpdig переписан на Python.
  • Значительно усилена защита кода от переполнения буфера. Чтобы предотвратить переполнение буфера, все небезопасные строковые функции (strcpy / strcat / strtok / sprintf / vsprintf / gets) заменили безопасными версиями, которые реализуют ограничение размера буфера.
  • Добавлена поддержка NTS.
  • Десятикратно повысили точность временного шага с помощью привязки физического оборудования. Это связано с тем, что современные компьютерные часы стали гораздо точнее тех, что были в момент зарождения NTP. Больше всех от этого выиграли GPSDO и выделенные радиостанции времени.
  • Количество языков программирования сократилось до двух. Вместо скриптов Perl, awk и даже S, теперь сплошной Python. За счет этого больше возможностей повторного использования кода.
  • Вместо лапши скриптов autotools проект стал использовать систему сборки программного обеспечения waf.
  • Обновили и реорганизовали документацию проекта. Из противоречивой, и местами архаичной коллекции документов создали вполне сносную документацию. Каждый ключ командной строки и каждая сущность конфигурации теперь имеют единую версию правды. Кроме того, страницы руководства и веб документация теперь создаются из одних и тех же основных файлов.

Изменение часового пояса в CentOS

Текущее значение временной зоны аппаратных часов (BIOS) находится в файле /etc/sysconfig/clock:

Для изменения программного (в операционной системе) часового пояса надо сделать следующее.

Сначала сделаем копию файла зоны. Это символьная ссылка.

mv /etc/localtime /etc/localtime.bak

В директории /usr/share/zoneinfo/ находятся файлы доступных к использованию временных зон. В нашем случае это /usr/share/zoneinfo/Europe/Moscow. В вашем случае может быть /usr/share/zoneinfo/Europe/Paris, да что угодно.

Создадим символьную ссылку /etc/localtime на нужную нам зону:

ln -s /usr/share/zoneinfo/Europe/Paris /etc/localtime

Все. Мы с вами сменили часовой пояс системных часов.

Режимы работы NTP сервера/клиента

Клиент/сервер

Этот режим на сегодняшний день наиболее часто используется в сети Интернет. Схема работы – классическая. Клиент посылает запрос, на который в течение некоторого времени сервер присылает ответ. Настройка клиента производится с помощью директивы server в конфигурационном файле, где указывается DNS имя сервера времени.

Симметричный активный/пассивный режим

Этот режим используется в том случае, если производится синхронизация времени между большим количеством равноправных машин. Помимо того, что каждая машина синхронизируется с внешним источником, она также осуществляет синхронизацию со своими соседями (peer), выступая для них в качестве клиента и сервера времени. Поэтому даже если машина «потеряет» внешний источник, она все еще сможет получить точное время от своих соседей. Соседи могут работать в двух режимах – активном и пассивном. Работая в активном режиме, машина сама передает свое время всем машинам-соседям, перечисленным в секции peers конфигурационного файла ntp.conf. Если же в этой секции соседи не указаны, то считается, что машина работает в пассивном режиме. Для того чтобы злоумышленник не смог скомпрометировать другие машины, представившись в качестве активного источника, необходимо использовать аутентификацию.

Режим Broadcast

Этот режим рекомендуется использовать в тех случаях, когда малое количество серверов обслуживает большое количество клиентов. Работая в этом режиме, сервер периодически рассылает пакеты, используя широковещательный адрес подсети. Клиент, настроенный на синхронизацию таким способом, получает широковещательный пакет сервера и производит синхронизацию с сервером. Особенностью этого режима является то, что время доставляется в рамках одной подсети (ограничение broadcast-пакетов). Кроме того, для защиты от злоумышленников необходимо использовать аутентификацию.

Режим Multicast

Данный режим во многом похож на broadcast. Отличие заключается в том, что для доставки пакетов используются multicast-адреса сетей класса D адресного пространства IP-адресов. Для клиентов и серверов задается адрес multicast-группы, которую они используют для синхронизации времени. Это делает возможным синхронизацию групп машин, расположенных в различных подсетях, при условии, что соединяющие их маршрутизаторы поддерживают протокол IGMP и настроены на передачу группового трафика.

Режим Manycast

Этот режим является нововведением четвертой версии протокола NTP. Он подразумевает поиск клиентом среди своих сетевых соседей manycast-серверов, получение от каждого из них образцов времени (с использованием криптографии) и выбор на основании этих данных трех «лучших» manycast-серверов, с которыми клиент будет производить синхронизацию. В случае выхода из строя одного из серверов клиент автоматически обновляет свой список.

Для передачи образцов времени клиенты и серверы, работающие в manycast-режиме, используют адреса multicast-групп (сети класса D). Клиенты и серверы, использующие один и тот же адрес, формируют одну ассоциацию. Количество ассоциаций определяется количеством используемых multicast-адресов.

Протокол NTP

Network Time Protocol (NTP) — сетевой протокол для синхронизации внутренних часов компьютера с использованием сетей с переменной латентностью (читай «шириной»/качеством канала).

NTP использует для своей работы протокол UDP и порт 123.

Текущая версия протокола — NTP 4. NTP использует иерархическую систему «часовых уровней» (их так же называют Stratum). Уровень 0 (или Stratum 0) — это, обычно, устройства представляющие собой атомные часы (молекулярные, квантовые), GPS часы или радиочасы. Данные устройства обычно не публикуются во всемирную сеть, а подключаются напрямую к серверам времени уровня 1 посредством протокола RS-232 (на иллюстрации обозначены желтыми стрелками). Уровень 1 синхронизирован с высокоточными часами уровня 0, обычно работают в качестве источников для серверов уровня 2. Уровень 2 синхронизируется с одной из машин уровня 1, а так же возможна синхронизация с серверами своего уровня. Уровень 3 работает аналогично второму. Обычно в сеть публикуются сервера уровней от второго и ниже. Протокол NTP поддерживает до 256 уровней. Так же хочется отметить, что сервера уровней 1 и2, а иногда и 3 не всегда открыты для всеобщего доступа. Иногда, чтобы синхронизироваться с ними, необходимо послать запрос по почте — администраторам домена.

Для чего делается ограничение на доступ к серверам? С переходом на каждый уровень немного возрастает погрешность относительно первичного сервера, но зато увеличивается общее число серверов и, следовательно, уменьшается их загрузка.

Синтаксис и настройка времени в CentOS 7

Первый раз попав на сервер, я вам советую выработать привычку вводить команду timedatectl

Обратите внимание, что тут есть все данные о времени, дате с учетом часового пояса и без него, сам часовой пояс, в моем примере это GMT, показан NTP сервер, статус синхронизации

Теперь у вас на выбор два метода, утилитой date или timedatectl.

Установка даты с помощью date

Посмотрим команду date.

  • Sat — это день недели, в моем случае суббота
  • Nov — месяц ноябрь
  • 11 — число
  • 22:06:25 — часы, минуты и секунды
  • GMT 2017 — год

Теперь предположим, что вам нужно быстро все исправить и задать правильную дату и время, формат команды date будет иметь вот такой вид:

Я например, хочу дату 04 июня 10:00 2017

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

Установка даты с помощью timedatectl

Тут все так же просто, есть синтаксис timedatectl set-time ‘YYYY-MM-DD HH:MM:SS’

  • YYYY — год
  • MM — месяц
  • DD — число
  • HH:MM:SS — часы, минуты, секунды.

Все дату и время мы настроили, давайте зададим правильный часовой пояс.

Время на сервере CentOS

Во время установки CentOS вам обязательно предлагается настроить текущее время, указать временную зону, в которой находится машина. По-умолчанию инсталлятор берет время из bios и предлагает его откорректировать. Кто-то во время установки не придал этому значение и не откорректировал часы, кто-то ошибся в выборе часового пояса. Так же популярна ситуация, когда сервер арендуется за границей, там уже предустановлена система и ее настройки времени и часового пояса не соответствуют необходимым. Все это можно исправить после установки, я подробно обо всем расскажу. Но начнем с самого простого.

Почему важно, чтобы в системе было правильное время? Причин может быть несколько:

  • Для корректного логирования событий той или иной службы. Например, у вас в сети случился какой-то инцидент и вы его расследуете. Удобно, когда время на всех машинах сети одинаковое, это упрощает проверку и сопоставление различных действий.
  • Могут возникнуть проблемы с работой в доменной среде windows, если у вас существенно различаются данные системных часов. Это актуально, если у вас файловый сервер centos интегрирован в доменную сеть windows. Пользователь в определенный момент не сможет получить доступ к файлам, если время сервера превысит допустимое отклонение от контроллера домена (более 5 минут). Это связано с особенностью работы протокола аутентификации Kerberos.
  • На вашем сервере может располагаться web хостинг с сайтами, в которых указано время публикации материала. Если часы сервера не будут совпадать с временной зоной основной аудитории, то могут возникать курьезные моменты, когда посетители увидят статьи, опубликованные в будущем. Так же некорректно будет работать статистика, основанная на анализе логов apache или nginx.
  • Вы используете планировщик cron в своей работе. Для корректной и предсказуемой работы запланированных событий дата и часовой пояс на сервере должны быть настроены правильно.

Чтобы избежать проблем в подобных ситуациях, займемся настройкой времени, даты и часового пояса. Кратко этот вопрос я разбирал в отдельном материале по базовой настройке centos после установки. Рекомендую с ним ознакомиться, там много полезного.

Второй этап — NTP под защитой NTS

  • Unique Identifier Extension содержит случайный nonce для предотвращения атак путем повтора.
  • NTS Cookie Extension содержит один из имеющихся в наличие у клиента NTP куки. Поскольку только клиент располагает симметричными AAED ключами C2S и S2C, сервер NTP должен извлечь их из материала куки.
  • NTS Cookie Placeholder Extension способ для клиента запросить дополнительные куки с сервера. Это расширение необходимо, чтобы ответ сервера NTP не был намного длиннее, чем запрос. Это позволяет предотвратить атаки усиления.
  • NTS Authenticator and Encrypted Extension Fields Extension содержит шифр алгоритма AAED с C2S ключем, заголовком NTP, временными отметками, и упомянутыми выше EF в качестве сопутствующих данных. Без этого расширения возможно подделать временные отметки.
  • Unique Identifier Extension зеркальная копия клиентского запроса, мера против атак путем повтора.
  • NTS Cookie Extension больше куки для продолжения сеанса.
  • NTS Authenticator and Encrypted Extension Fields Extension содержит шифр AEAD с S2C ключем.

Время на сервере CentOS

Во время установки CentOS вам обязательно предлагается настроить текущее время, указать временную зону, в которой находится машина. По-умолчанию инсталлятор берет время из bios и предлагает его откорректировать. Кто-то во время установки не придал этому значение и не откорректировал часы, кто-то ошибся в выборе часового пояса. Так же популярна ситуация, когда сервер арендуется за границей, там уже предустановлена система и ее настройки времени и часового пояса не соответствуют необходимым. Все это можно исправить после установки, я подробно обо всем расскажу. Но начнем с самого простого.

Почему важно, чтобы в системе было правильное время? Причин может быть несколько:

  • Для корректного логирования событий той или иной службы. Например, у вас в сети случился какой-то инцидент и вы его расследуете. Удобно, когда время на всех машинах сети одинаковое, это упрощает проверку и сопоставление различных действий.
  • Могут возникнуть проблемы с работой в доменной среде windows, если у вас существенно различаются данные системных часов. Это актуально, если у вас файловый сервер centos интегрирован в доменную сеть windows. Пользователь в определенный момент не сможет получить доступ к файлам, если время сервера превысит допустимое отклонение от контроллера домена (более 5 минут). Это связано с особенностью работы протокола аутентификации Kerberos.
  • На вашем сервере может располагаться web хостинг с сайтами, в которых указано время публикации материала. Если часы сервера не будут совпадать с временной зоной основной аудитории, то могут возникать курьезные моменты, когда посетители увидят статьи, опубликованные в будущем. Так же некорректно будет работать статистика, основанная на анализе логов apache или nginx.
  • Вы используете планировщик cron в своей работе. Для корректной и предсказуемой работы запланированных событий дата и часовой пояс на сервере должны быть настроены правильно.

Чтобы избежать проблем в подобных ситуациях, займемся настройкой времени, даты и часового пояса. Кратко этот вопрос я разбирал в отдельном материале по базовой настройке centos после установки. Рекомендую с ним ознакомиться, там много полезного.

Настройка NTP на CentOS 7

Для начала устанавливаем NTP:

Устанавливаем часовой пояс (временную зону), которая соответсвует вашей. Например у меня это Москва, создаем символическую ссылку:

Далее необходимо указать сервера, с которыми мы будем синхронизировать время. По умолчанию 3 сервера уже есть, можно оставить их, можно добавить свои. Мы добавим свой: Открываем файл ntp.conf для редактирования:

Находим в нем строчки:

Перед ними пишем наш ntp сервер:

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

Теперь давайте вручную синхронизируем время с нашим сервером:

Получаем ответ типа: 15 Sep 10:03:56 ntpdate: step time server 192.168.0.68 offset -0.012084 sec — значит синхронизация прошла успешно и время было поправлено на данный период.

Если вы получите ошибку вида: the NTP socket is in use, exiting, значит у вас чем то уже используется порт 123. Попробуйте остановить ntpd следующей командой:

и еще раз запустите синхронизацию:

Теперь добавляем в автозапуск и запускаем нашу службу автоматической синхронизации времени:

Проверить работу ntp можно командой ntpq -p

Устранение проблем

Двойная загрузка с Windows

Системы с возможностью загрузки другой операционной системы, например Windows, обычно будут испытывать проблемы с переназначением аппаратных часов. Чтобы сделать так, чтобы Windows не меняла аппаратные часы назад в локальное время, добавьте в реестр следующую запись.

В 64-битной версии Windows откройте regedit и перейдите в раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation. Создайте запись RealTimeIsUniversal с типом QWORD и установить её значение в . После этого перезагрузите систему. Теперь системные часы будут в формате UTC.

Установка и настройка времени в Debian

Для того, чтобы вручную установить дату, используем упомянутую выше команду date, только уже с дополнительными параметрами.

# date 08211555

Здесь 08 — месяц, 21 — число, 15 — час, 55 — минуты. Таким образом, формат команды получился вот такой — date MMDDhhmm.

То же самое, только через timedatectl.

# timedatectl set-time "2019-08-21 15:55:00"

Если вы получили ошибку — Failed to set time: Automatic time synchronization is enabled, значит у вас уже настроено автоматическое обновление времени. Об этом подробнее мы поговорим ниже. В таком случае timedatectl, в отличие от date, время менять не будет.

С помощью команды date так же можно посмотреть текущее время системы без учета часового пояса, то есть время по UTC.

# date --utc
Wed 21 Aug 2019 12:56:57 PM UTC

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

Настройка сервера chrony в CentOS 8

С сервером времени chrony все будет практически идентично ntpd. Принцип работы и формат конфигов у них примерно одинаковый. Если вы еще не установили chrony, то сделайте это и добавьте его в автозагрузку.

# yum install chrony # systemctl start chronyd  # systemctl enable chronyd

Конфигурация сервера времени chrony располагается в файле /etc/chrony.conf. Ниже представлен минимум настроек, необходимых, чтобы он работал в качестве локального сервера времени для клиентов.

pool 2.centos.pool.ntp.org iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync allow 10.20.1.0/24 local stratum 10 logdir /var/log/chrony

Параметр rtcsync задает возможность периодически записывать системное время в RTC (Real Time Clock) — аппаратные часы компьютера. Описание всех параметров файла конфигурации можно посмотреть тут — https://chrony.tuxfamily.org/doc/3.4/chrony.conf.html.

Не забываем настраивать firewalld, если отдельно не настраивали iptables, для доступа клиентов к серверу.

# firewall-cmd --add-service=ntp --permanent # firewall-cmd --reload

Теперь можно перезапустить chrony и проверить синхронизацию времени с какого-нибудь клиента в сети.

# systemctl restart chronyd

Идем на другой компьютер и там проверяем работу нашего сервера времени.

# ntpdate pool.ntp.org 21 Oct 11:50:37 ntpdate: adjust time server 85.21.78.8 offset -0.001664 sec

Ручная настройка времени в CentOS

В Linux за программное время отвечает утилита date или timedatectl. Если вызывать утилиту date без параметров, она покажет текущее время на сервере:

# date

Если вы хотите выставить время вручную, можно воспользоваться утилитой date с дополнительными ключами:

Где MM – месяц, DD — день, hh – час, mm – минуты.

Для получения расширенной информации о дате, времени, поясе, синхронизации, настройках перехода на сезонное (летнее/зимнее) время (DST), используется утилита timedatectl. Она дает более подробную информацию о настройках времени на сервере.

Timedatectl также позволяет изменить время:

# timedatectl set-time ‘2019-11-27 17:51:00’

Установка аппаратных часов

Вот как выглядит ситуация после запуска timesyncd:

Изначально разница между RTC и местным временем (EDT) не превышает секунды, и расхождение возрастает ещё на пару секунд в течение следующих нескольких дней. Поскольку в RTC нет понятия часовых поясов, команда timedatectl должна выполнить сравнение, чтобы определить нужный часовой пояс. Если время RTC точно не соответствует местному времени, то значит, оно не соответствует и местному часовому поясу.

В поисках дополнительной информации я проверил состояние systemd-timesync и обнаружил вот что:

Обратите внимание на сообщение журнала, в котором говорится, что системное время не установлено или сброшено назад. Служба Timesync устанавливает системное время на основе временной метки

Метки времени поддерживаются демоном timesync и создаются при каждой успешной синхронизации.

Команда timedatectl не имеет возможности взять значение аппаратных часов из системных часов. Она может установить время и дату только из значения, введённого в командной строке. Вы можете установить RTC на то же значение, что и системное время, используя команду hwclock:

Опция —localtime говорит о том, что аппаратные часы показывают местное время, а не UTC.

Настройка NTP

Открываем файл с настройками:

vi /etc/chrony.conf

Настраиваем серверы, с которых наш NTP будет брать эталонное время. Например:

#pool 2.centos.pool.ntp.org iburst
server 192.168.0.100 iburst prefer
server 192.168.0.110 iburst
server 127.127.1.0

* где:

  • pool — указывает на выполнение синхронизации с пулом серверов.
  • server — указывает на выполнение синхронизации с сервером.
  • iburst — отправлять несколько пакетов (повышает точность).
  • prefer — указывает на предпочитаемый сервер.
  • server 127.127.1.0 — позволит в случае отказа сети Интернет брать время из своих системных часов.

* в данном примере мы закомментировали указанный пул по умолчанию и добавили свои серверы 192.168.0.100 и 192.168.0.110.

Настраиваем безопасность:

allow 192.168.0.0/24

* в данном примере мы разрешаем синхронизацию времени с нашим сервером для узлов сети 192.168.0.0/255.255.255.0.

Перезапускаем сервис:

systemctl restart chronyd

Добавляем правило в брандмауэр:

firewall-cmd —permanent —add-service=ntp

firewall-cmd —reload

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: