Для нормального функционирования сервера требуется корректно настроить текущее время и его своевременное обновление с определенной периодичностью. Как правильно произвести смену часового пояса в centos в случае его изменения или неверного указания во время установки – одна из тем этой статьи. Также я затрону вопрос установки и использования утилиты разовой синхронизации времени ntpdate и настройки сервиса точного времени ntp.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Цели статьи
- Показать способы настройки и смены времени и часового пояса в centos.
- Рассказать о средствах для автоматической синхронизации времени.
- Настройка своего сервера точного времени на основе centos.
Данная статья является частью единого цикла статьей про сервер Centos.
Время на сервере CentOS
Во время установки CentOS вам обязательно предлагается настроить текущее время, указать временную зону, в которой находится машина. По-умолчанию инсталлятор берет время из bios и предлагает его откорректировать. Кто-то во время установки не придал этому значение и не откорректировал часы, кто-то ошибся в выборе часового пояса. Так же популярна ситуация, когда сервер арендуется за границей, там уже предустановлена система и ее настройки времени и часового пояса не соответствуют необходимым. Все это можно исправить после установки, я подробно обо всем расскажу. Но начнем с самого простого.
Почему важно, чтобы в системе было правильное время? Причин может быть несколько:
- Для корректного логирования событий той или иной службы. Например, у вас в сети случился какой-то инцидент и вы его расследуете. Удобно, когда время на всех машинах сети одинаковое, это упрощает проверку и сопоставление различных действий.
- Могут возникнуть проблемы с работой в доменной среде windows, если у вас существенно различаются данные системных часов. Это актуально, если у вас файловый сервер centos интегрирован в доменную сеть windows. Пользователь в определенный момент не сможет получить доступ к файлам, если время сервера превысит допустимое отклонение от контроллера домена (более 5 минут). Это связано с особенностью работы протокола аутентификации Kerberos.
- На вашем сервере может располагаться web хостинг с сайтами, в которых указано время публикации материала. Если часы сервера не будут совпадать с временной зоной основной аудитории, то могут возникать курьезные моменты, когда посетители увидят статьи, опубликованные в будущем. Так же некорректно будет работать статистика, основанная на анализе логов apache или nginx.
- Вы используете планировщик cron в своей работе. Для корректной и предсказуемой работы запланированных событий дата и часовой пояс на сервере должны быть настроены правильно.
Чтобы избежать проблем в подобных ситуациях, займемся настройкой времени, даты и часового пояса. Кратко этот вопрос я разбирал в отдельном материале по базовой настройке centos после установки. Рекомендую с ним ознакомиться, там много полезного.
Установка и настройка времени в CentOS
Первым делом проверим текущую дату и время на сервере с помощью команды date:
# date Mon Oct 21 11:17:03 MSK 2019
Или более подробной команды timedatectl.
# timedatectl
Mon | день недели, в данном случае понедельник |
Oct 21 | месяц август, 10-е число |
11:17:03 | текущее время часы:минуты:секунды |
MSK | часовой пояс |
2019 | текущий год |
Чтобы вручную настроить правильное время, можно воспользоваться командой с дополнительными параметрами:
# date MMDDhhmm
Здесь MM - месяц, DD - число, hh - час, mm - минуты. Таким образом, чтобы изменить дату на 22 октября, 17:10, выполняем в консоли:
# date 10221710 Sun Oct 22 17:10:00 MSK 2019
Чтобы узнать текущее время без учета часового пояса, то есть время по UTC, можно воспользоваться следующим ключом команды date:
# date --utc Mon Oct 21 08:22:19 UTC 2019
В выводе видим время относительно нулевого меридиана, без поправок на часовой пояс. После установки корректного времени переходим к настройке часового пояса.
Установка и настройка часового пояса в CentOS
Как уже было показано раньше, чтобы узнать в каком часовом поясе находятся системные часы сервера centos, необходимо воспользоваться командой date. В нашем случае timezone указана как MSK. Это общепризнанное сокращение для часовой зоны Московское время (Moscow Time). Если у вас указан другой часовой пояс, а вы хотите установить московскую временную зону, то вам нужно выполнить следующие процедуры:
Обновить системный список часовых поясов tzdata с помощью yum:
# yum install tzdata
Настраиваем часовой пояс с помощью утилиты timedatectl.
# timedatectl set-timezone Europe/Moscow
Эта утилита выполняет очень простое действие. Она проставляет символьную ссылку с нужного файла timezone из /usr/share/zoneinfo на файл /etc/localtime. Тот же самый результат вы получите, если сделаете это сами вручную.
Перед этим лучше сделать резервную копию текущей timezone на всякий случай:
# mv /etc/localtime /etc/localtime.bak
Далее найдите в каталоге /usr/share/zoneinfo/ необходимую временную зону. В нашем случае это файл Moscow в папке Europe.
Установить символьную ссылку на указанный файл timezone:
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
Все, часовой пояс успешно изменен. После установки времени и часового пояса можно переходить к настройке синхронизации часов.
Синхронизация времени с помощью chrony, ntpdate
Способов синхронизации времени в centos существует как минимум три:
- ручной с помощью утилиты ntpdate
- автоматический при помощи сервиса ntp или chrony
- автоматический через утилиту из пакета systemd - timesyncd.
Рассмотрим сначала вариант ручной однократной синхронизации при помощи программы ntpdate. Она позволяет разово синхронизировать локальное время с эталонным сервером времени в интернете. Подобных эталонов существует великое множество. Мы для примера воспользуемся одним из них - pool.ntp.org
Запускаем синхронизацию времени:
# ntpdate pool.ntp.org 21 Oct 11:50:37 ntpdate[8473]: adjust time server 85.21.78.8 offset -0.001664 sec
Если получите ошибку
-bash: ntpdate: command not found
значит утилита у вас не установлена. Установить ее можно из базового репозитория.
# yum install ntpdate
Это актуально только для 7-й версии, в В CentOS 8 ntp и ntpdate убрали из репозиториев. Для синхронизации времени можно использовать только chrony. Ее мы рассмотрим ниже.
Утилита ntpdate провела синхронизацию, в результате которой к моему системному времени было добавлено 0.001664 секунды для приближения к эталонному. Если в результате работы синхронизации вы получаете ошибку: no server suitable for synchronization found то попробуйте в работе утилиты использовать непривилегированный порт. По-умолчанию ntpdate работает по 123 порту. Если он закрыт на фаерволе, то помочь в синхронизации поможет следующий параметр:
# ntpdate -u pool.ntp.org
Если у вас запуск ntpdate завершается ошибкой - the NTP socket is in use, exiting, значит у вас уже установлена и запущена служба ntpd, которая заняла udp порт, необходимый для работы ntpdate. Установкой и настройкой этой службы мы и займемся далее.
Как я уже сказал, в CentOS 8 служба ntpd и утилита ntpdate стали недоступны в базовых репозиториях. Возможно, их как-то удастся установить из сторонних репозиториев, но большого смысла нет. Можно воспользоваться программой chrony. Ставим ее:
# yum install chrony
Запускаем и добавляем в автозагрузку.
# systemctl start chronyd # systemctl enable chronyd # systemctl status chronyd
Программа стартовала и уже выполнила синхронизацию с источниками точного времени в интернете. Каких-то особых настроек для получения точного времени больше не надо. Служба будет постоянно работать и выполнять синхронизацию. Проверим это с помощью timedatectl.
# timedatectl status
systemd-timesyncd
Отдельно пару слов о службе systemd-timesyncd, которая в системах с systemd выступает в роли простого sntp клиента, в отличие от chrony и ntp, которые в том числе могут работать в качестве сервера времени. В Debian служба systemd-timesyncd присутствует в составе systemd и ей можно пользоваться, что достаточно удобно. Легкий полновесный клиент, который по дефолту есть в составе системы.
Я сначала не мог понять, что с systemd-timesyncd в Centos. Команда вроде есть и работает, но как оказалось, это просто обертка над chrony. Реально команда управляет именно chrony и без него не работает. Без него вы получите ошибку, при попытке активировать компонент timesyncd.
# timedatectl set-ntp true Failed to set ntp: NTP not supported
Если вернете chrony в систему, то timedatectl будет запускать именно его. Немного погуглив, я понял в чем тут дело. Red Hat компилирует systemd без компонента systemd-timesyncd, предлагая по дефолту именно chrony.
Настройка сервера ntp в CentOS 7
Сервер времени ntp использует в своей работе одноименный протокол - Network Time Protocol, которому для работы необходим UDP порт 123. Так что перед установкой и настройкой службы времени убедитесь, что на фаерволе открыт этот порт.
Устанавливаем сервер ntp:
# yum install ntp
Теперь отредактируем файл конфигурации /etc/ntp.conf , удалив все лишнее:
# cat /etc/ntp.conf driftfile /var/lib/ntp/drift restrict default nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 server 0.centos.pool.ntp.org iburst server 1.centos.pool.ntp.org iburst server 2.centos.pool.ntp.org iburst server 3.centos.pool.ntp.org iburst disable monitor logfile /var/log/ntp.log
Параметр | Описание |
server | Список серверов для синхронизации времени |
driftfile | Задает адрес файла, в котором хранится история изменений времени во время синхронизации. Если по каким-то причинам синхронизация времени с внешними источниками станет невозможна, служба времени изменит системные часы в соответствии с записями в этом файле. |
restrict 127.0.0.1 | Указывает, что пользоваться нашим сервером времени можно только непосредственно с локального интерфейса. Если вам необходимо разрешить другим компьютерам в вашей локальной сети синхронизировать время с текущей машины, то укажите в данном параметре адрес вашей сети, например:
restrict 192.168.10.0 mask 255.255.255.0 |
restrict default nomodify notrap nopeer noquery | Параметры указывают на то, что клиентам данного сервиса времени запрещено изменять его настройки, получать его статус. Они могут только забрать с него значения точного времени. |
disable monitor | Данный параметр повышает безопасность, предотвращая использования одной из уязвимостей сервиса ntpd, которую можно использовать для проведения DDoS атак. |
logfile | Указывает путь к файлу с логами сервиса |
После завершения редактирования файла настроек запускаем службу синхронизации времени:
# systemctl start ntpd
Проверяем запустился ли сервер:
# netstat -tulnp | grep 123
Все в порядке, служба слушает положенный порт 123. Проверим еще на всякий случай системные логи centos:
# cat /var/log/messages | grep ntpd
# cat /var/log/ntp.log
Все в порядке, сервер запущен и полностью готов к работе.
Теперь настроим автозапуск ntp вместе с загрузкой centos:
# systemctl enable ntpd
Наблюдать за работой службы ntp можно с помощью команды ntpq -p:
Что значат все эти данные:
remote | Адрес удаленного эталона времени, с которого была синхронизация |
refid | Указывает, откуда каждый эталон получает точное время. Это могут быть другие сервера времени, система GPS и другое |
st | Stratum (уровень) это число от 1 до 16, которое указывает на точность эталона. 1- максимальная точность, 16 - сервер недоступен. Уровень вашего сервера будет равен уровню наименее точного удаленного эталона плюс 1. |
poll | Интервал в секундах между опросами |
reach | Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с эталоном. Бит выставлен, если удаленный сервер ответил. |
delay | Время задержки ответа на запрос о точном времени |
offset | Разница между вашим и удаленным сервером |
jitter | Дисперсия (Jitter) - это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Чем меньше значение дисперсии, тем лучше, поскольку позволяет точнее синхронизировать время. |
Настройка сервера 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[8473]: adjust time server 85.21.78.8 offset -0.001664 sec
Часто задаваемые вопросы по теме статьи (FAQ)
Мне отличия не известны. В общем случае, обе утилиты делают одно и то же. Формат конфигов у них тоже одинаковый. Конечно же, программы имеют отличия, но в общем случае, для типового сервера нет принципиальной разницы.
Я бы рекомендовал так делать. Если перезагрузиться совсем нельзя, я рекомендую вручную перезапустить основные сервисы. Не все могут автоматически корректно отработать внезапное изменение времени. Может начаться путаница в логах, особенно если время изменилось существенно (на несколько часов).
Некоторые провайдеры блокируют порты, необходимые для синхронизации времени. Связано это с тем, что серверы времени могут быть использованы для организации ddos атак. Обычно в таком случае провайдер предоставляет адреса своих внутренних ntp серверов, с которых можно произвести синхронизацию. Так что если у вас никак не работает синхронизация времени на арендованном сервере, рекомендую написать вопрос в тех. поддержку и прояснить этот момент. Подробнее об этом рассказываю в отдельной статье.
Нет, это не возможно. Да и не имеет практического смысла. Обе эти программы проверяют при запуске, свободен ли udp порт 123 на сетевом интерфейсе. Если он занят другой программой, то запуск завершится с ошибкой.
В общем случае лучше настроить у себя в локальной сети сервер времени и синхронизироваться с него. Так у вас гарантированно у всех серверов будет одинаковое время, даже если по какой-то причине сам сервер времени не будет синхронизироваться с внешним источником. Это лучше, нежели разное время на всех серверах.
Заключение
Подведем итог опубликованного материала. Мы рассмотрели практически все, что связано со временем на сервере CentOS. Да и не только на нем, вся информация в статье актуальна практически для любого Linux дистрибутива. Мы научились устанавливать время, изменять часовой пояс, синхронизировать время с помощью ntp, chrony и настраивать сервер времени в локальной сети.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Добрый день.
Получаю следующее.
[root@1c8server /]# sudo ntpdate pool.ntp.org
2 Mar 13:07:42 ntpdate[27290]: sendto(213.234.203.30): Operation not permitted
2 Mar 13:07:42 ntpdate[27290]: sendto(Time100.Stupi.SE): Operation not permitted
2 Mar 13:07:42 ntpdate[27290]: sendto(ntp1.doorhan.ru): Operation not permitted
2 Mar 13:07:43 ntpdate[27290]: sendto(cello.corbina.net): Operation not permitted
2 Mar 13:07:43 ntpdate[27290]: sendto(213.234.203.30): Operation not permitted
2 Mar 13:07:43 ntpdate[27290]: sendto(Time100.Stupi.SE): Operation not permitted
2 Mar 13:07:43 ntpdate[27290]: sendto(ntp1.doorhan.ru): Operation not permitted
2 Mar 13:07:44 ntpdate[27290]: sendto(cello.corbina.net): Operation not permitted
2 Mar 13:07:44 ntpdate[27290]: sendto(213.234.203.30): Operation not permitted
2 Mar 13:07:44 ntpdate[27290]: sendto(Time100.Stupi.SE): Operation not permitted
2 Mar 13:07:44 ntpdate[27290]: sendto(ntp1.doorhan.ru): Operation not permitted
2 Mar 13:07:45 ntpdate[27290]: sendto(cello.corbina.net): Operation not permitted
2 Mar 13:07:45 ntpdate[27290]: sendto(213.234.203.30): Operation not permitted
2 Mar 13:07:45 ntpdate[27290]: sendto(Time100.Stupi.SE): Operation not permitted
2 Mar 13:07:45 ntpdate[27290]: sendto(ntp1.doorhan.ru): Operation not permitted
2 Mar 13:07:46 ntpdate[27290]: sendto(cello.corbina.net): Operation not permitted
2 Mar 13:07:47 ntpdate[27290]: no server suitable for synchronization found
Здравствуйте, подскажите, могут ли возникнуть какие-то проблемы в работе приложений на сервере, если я поменяю время? Есть блокчейн нода и сейчас хочется привести сервер в порядок, но очень не удобно пользоваться логами из-за другой временной зоны
Если была существенная разница во времени, то лучше перезагрузить систему после синхронизации часов. Потенциально это может приводить к проблемам. Как минимум, все важные сервисы стоит перезапустить вручную.
Добрый вечер. Впервые столкнулся с линукс в виде CentOS7 впервые 5 часов назад. Надо было поднять сервер времени. До этого был сделан не мной, проработал много лет и сломался. Сначала я сделал сервер времени на Windows. Все работало, за исключением одного: мне нужен был определенный ip адрес у сервера времени. Windows время раздовал с любого ip который я ему прописывал за исключением того самого определенного 162.16.0.1 Выставив этот адрес он просто перестовал пинговаться. Установил CentOS7, поднял NTP и вроде все заработало, но через пару часов после того как устройство получало с него правильные время и дату (при включении камеры по умолчанию на ней был 1970 год, после синхронизации выставлялся 2020) вдруг год и месяц менялись на июль 2003. А клиент на windows отказывался получать с него время, жаловался, то на недоступность узла, то на то что вышло время. Я не все умею делать, поэтому совершив кучу настроек уже не понимал что происходит и переустанавливал CentOS. После очередной переустановки я решил настроить NTP через chrony. Толька эта статья помогла мне. Я внес изменения так же как рекомендуется для CentOS8, сделал # systemctl restart chronyd и тут же windows получил время, а за ним все камеры поменяли время с 1970 и 2003 на 2020. Спасибо большое!
PS сижу и проверяю не изменится ли время на камерах :)
Рад, что все получилось. В целом, сервер времени настроить очень просто. Буквально пару строк в конфиге поменять и запустить службу. Проблемы чаще всего бывают с настройкой сети или фаерволом.
Добрый день,
Чтобы избежать проблем с расхождением времени с виндой, я воспользовался командой.
ln -sf /usr/share/zoneinfo/UTC/etc/localtime
В Centos 7 уже
timedatectl set-timezone UTC
работает
Спасибо. Все подробно и доступно.
Здравствуйте. Спасибо Вам. Сайт на Друпал 7. (мой уровень -очень начинающий). Ошибка вроде понятна мне. И вообще место на вдс закончилось. Буду пробовать с SCP как-то решить. Скопировать /opt (os Centtos 7) Потом удалить содержимое. Там 1.5 гб. Если получится и скопировать и удалить. Мало ли что.
в 7ке есть специальная утилита для изменения зоны
timedatectl set-timezone Europe/Moscow
не используйте ntp, также в 7ке есть chrony
Спасибо за информацию. У меня учтены эти замечания в статье про базовую настройку:
https://serveradmin.ru/centos-7-nastroyka-servera
Эта статья писалась гораздо раньше, уже не стал переделывать, потому что по сути не имеет принципиального значения.
Спасибо за статью.
Подскажите, пожалуйста, почему после перезагрузи ОС ntp может не стартовать?
Команду systemctl enable ntpd выполнил.
Не знаю, логи надо смотреть. Можно настроить логирование ntp. Я ни разу с подобным не сталкивался. Может с сетью что-то не так, ntp все время ругается на проблемы с сетевыми интерфейсами.
Разобрался. Дело в том что CentOS7 для синхронизации времени по умолчанию использует сервис chrony. ntpd не будет стартовать автоматически пока не отключишь chrony.
Что бы отключить chrony нужно выполнить команду: systemctl disable chronyd.service
А вообще chrony по функциям очень сильно напоминае ntpd.
Спасибо за важное дополнение. Я вообще упустил этот момент.