Системное время - важный параметр в работе сервера, так как на него завязаны почти все службы. Сегодня я расскажу, как настроить время в сервере Debian - установить его, указать или сменить часовой пояс, а так же настроить автоматическое обновление. Отдельно затрону тему своего сервера времени в локальной сети.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Данная статья является частью единого цикла статьей про сервер Debian.
Цели статьи
- Показать, как смотреть и настраивать системное время в Debian.
- Рассказать, как управлять часовыми поясами.
- Настроить автоматическую синхронизацию времени через интернет.
- Показать настройку своего ntp сервера в информационной системе.
Введение
Во время установки Debian, сервер автоматически настраивает системное время на основе информации из bios. Инсталлятор предлагает вам выбрать только часовой пояс. При этом, если вы не правильно указали часовой пояс (timezone), его без проблем можно изменить после установки.
Так же ситуация, когда необходимо изменить время или часовой пояс, может возникнуть, если вы арендуете сервер за границей и вам разворачивают систему из готового образа. В таком случае timezone может быть указана не такая, как вы хотите. Надо будет изменить.
Зачем, собственно, следить за точным временем на сервере, кроме непосредственно удобства восприятия этого времени? Причин может быть много. Перечислю основные, которые пришли в голову.
- Точное время на сервере необходимо для корректного логирования всех событий и последующего расследования инцидентов. Более того, одинаковое время должно быть на всех серверах, которые участвуют в работе информационной системы. Если это не так, то расследование инцидентов становится затруднительным.
- В доменной середе Windows для корректной работы протокола аутентификации Kerberos требуется примерно одинаковое время на всех участниках домена. Если ваш сервер Debian является членом домена, важно, чтобы его время не сильно отличалось от времени контроллера домена. Его нужно обязательно синхронизировать с ним.
- На сервере может располагаться какой-то сервис, который взаимодействует с пользователями. Например, новостной сайт, где в статьях указано точное время публикации. Если неправильно настроить часы или timezone, может возникнуть ситуация, когда для некоторых пользователей опубликованные материалы будут отображаться со временем из будущего.
- Планировщик cron в своей работе использует системные часы. Если вы хотите предсказуемое поведение запланированных задач, время и часовой пояс должны быть настроены правильно.
Для избежания этих и других проблем, предлагаю приступить к настройке времени, даты и часового пояса на сервере под управлением системы Debian.
Как посмотреть и узнать системное время
Начнем с самого простого - подключимся к серверу по ssh и посмотрим в консоли на текущее время. Сделать это можно с помощью простой команды date.
# date Wed 21 Aug 2019 03:38:12 PM MSK
Wed | день недели, в данном случае среда |
21 Aug | число и месяц, 21-е августа |
2019 | год |
03:38:12 | время в формате часы:минуты:секунды |
PM | обозначение времени суток, am или pm, до или после полудня |
MSK | часовой пояс, он же timezone |
Как вы видите, у нас установлен часовой пояс MSK, текущая дата и время в 12-ти часовом формате. Это не очень удобно. Если вам нужно посмотреть время в 24-х часовом формате, добавьте отображение +%R к date.
# date +%R 16:04
Подобные параметры удобно использовать в скриптах. Вот наиболее популярные комбинации просмотра текущего времени, которые использую я.
# date +%Y-%m-%d 2019-08-21 # date +%H-%M-%S 16-09-47 # date +%Y-%m-%d_%H-%M-%S 2019-08-21_16-09-50
Также есть еще один способ получить полную информацию о времени сервера Debian - воспользоваться командой timedatectl.
# timedatectl status
Установка и настройка времени в 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
В выводе видно время относительно нулевого меридиана, без поправок на часовой пояс. После установки корректного времени переходим к настройке часового пояса.
Установка, настройка и изменение часового пояса
Выше я рассказал, как узнать, в каком часовом поясе находятся системные часы сервера debian. В моем случае timezone установлена как MSK, то есть московский часовой пояс. Если у вас указан другой часовой пояс, а вы, к примеру, хотите установить московский, то делается это просто. Смена часового пояса выполняется через timedatectl:
# timedatectl set-timezone Europe/Moscow
Посмотреть список всех timezоne, доступных для установки на сервере, можно командой:
# timedatectl list-timezones
Перед настройкой или изменением часового пояса, рекомендуется обновить список timezone на сервере. Они периодически меняются.
# apt update && apt upgrade tzdata
После того как обновили и настроили часовой пояс, можно приступать к синхронизации времени.
Timedatectl для настройки времени в Debian
В большинстве современных дистрибутивов с systemd служба синхронизации времени уже присутствует в дефолтной установке и реализуется через systemd-timesyncd. Эта служба призвана заменить ntpd. Со слов разработчиков, она легче и быстрее, чем ntpd, плюс интегрирована в systemd, поэтому для автоматической синхронизации времени рекомендуется использовать именно ее.
Тут важно понимать, что systemd-timesyncd не может работать в качестве сервера времени, который мы настроим ниже. Так что, если у вас одиночный сервер, вам вполне подойдет timesyncd. Если же вы хотите использовать свой сервер времени, то надо настраивать ntp.
Для начала, давайте проверим, что у нас настроено в качестве службы обновления времени.
# timedatectl
Синхронизация времени уже включена и работает через timesyncd. Посмотрим ее статус.
# timedatectl timesync-status Server: 195.3.254.2 (2.debian.pool.ntp.org) Poll interval: 17min 4s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: C23ACA94 Precision: 2us (-19) Root distance: 42.113ms (max: 5s) Offset: -8.977ms Delay: 63.598ms Jitter: 9.582937s Packet count: 19 Frequency: +7.550ppm
В принципе, больше ничего делать не нужно. Синхронизация времени через интернет уже настроена и работает. Время обновляется с сервера 2.debian.pool.ntp.org. Для надежности, можно убедиться, что служба работает, плюс, добавим ее сразу в автозагрузку, если ее там нет.
# systemctl status systemd-timesyncd # systemctl enable systemd-timesyncd
Список серверов для синхронизации времени в timedatectl настраивается в конфигурационном файле /etc/systemd/timesyncd.conf.
Синхронизация времени с помощью ntp и ntpdate
Если вам по какой-то причине не подходит описанная выше синхронизация, либо вам нужен свой сервер времени в сети, то timesyncd можно выключить.
# systemctl stop systemd-timesyncd # systemctl disable systemd-timesyncd
Проверяем.
# timedatectl
Покажу теперь простую утилиту ntpdate, с помощью которой можно разово синхронизировать время, не автоматически. Для начала ее нужно установить в систему.
# apt install ntpdate
Дальше запускаем для разовой синхронизации.
# ntpdate pool.ntp.org ntpdate[5621]: adjust time server 85.21.78.91 offset -0.020548 sec
В данном случае pool.ntp.org - адрес сервера времени. Можно использовать любой. Все, время синхронизировано и никаких автоматических служб не запущено.
Если у вас ntpdate выдает ошибку — the NTP socket is in use, exiting, значит у вас уже установлена и запущена служба ntp, которая заняла udp порт 123, необходимый для работы ntpdate. Установкой и настройкой этой службы мы и займемся далее. Также, если ntpdate не работает, посмотрите материал, может это ваш случай.
Для обновления времени сервера можно воспользоваться службой ntp. Ее так же надо установить отдельно.
# apt install ntp
Это старая проверенная служба времени, которую использовали еще задолго до появления systemd и его юнитов. Запустим ее и добавим в автозагрузку.
# systemctl start ntp # systemctl enable ntp
После запуска она сразу же автоматически синхронизирует время. Проверим статус службы ntp в Debian.
# systemctl status ntp
Синхронизация времени через ntp заработала сразу же. Дополнительная настройка не нужна, если вас не интересует свой сервер времени, который мы настроим ниже.
При этом, для проверки статуса службы времени ntp можно использовать утилиту ntpq. Посмотрим статус синхронизации.
# ntpq -p
Поясню значения каждого столбца.
remote | Адрес удаленного эталона времени, с которого была синхронизация |
refid | Указывает, откуда каждый эталон получает точное время. Это могут быть другие сервера времени, система GPS и другое |
st | Stratum (уровень) это число от 1 до 16, которое указывает на точность эталона. 1- максимальная точность, 16 - сервер недоступен. Уровень вашего сервера будет равен уровню наименее точного удаленного эталона плюс 1. |
poll | Интервал в секундах между опросами |
reach | Восьмеричное представление массива из 8 бит, отражающего результаты последних восьми попыток соединения с эталоном. Бит выставлен, если удаленный сервер ответил. |
delay | Время задержки ответа на запрос о точном времени |
offset | Разница между вашим и удаленным сервером |
jitter | Дисперсия (Jitter) - это мера статистических отклонений от значения смещения (поле offset) по нескольким успешным парам запрос-ответ. Чем меньше значение дисперсии, тем лучше, поскольку позволяет точнее синхронизировать время. |
Настройка сервера ntp в Debian
Теперь настроим свой сервер времени, с которого другие наши сервера смогут синхронизировать свои часы. Сервер времени ntp использует отдельный одноименный протокол — Network Time Protocol, который для работы использует UDP порт 123. Перед установкой и настройкой службы времени убедитесь, что на фаерволе открыт этот порт.
Файл конфигурации ntp - /etc/ntp.conf. Привожу минимальную достаточную конфигурацию для своего сервера времени.
driftfile /var/lib/ntp/ntp.drift restrict -4 default kod notrap nomodify nopeer noquery limited restrict 127.0.0.1 restrict 192.168.155.0 mask 255.255.255.0 nomodify notrap pool 0.debian.pool.ntp.org iburst pool 1.debian.pool.ntp.org iburst pool 2.debian.pool.ntp.org iburst pool 3.debian.pool.ntp.org iburst logfile /var/log/ntp.log
Так же я обычно отключаю ipv6 протокол, если он не используется. Для этого в файле /etc/default/ntp заменяем параметр на
NTPD_OPTS='-4 -g'
После изменения конфигурации, перезапустим ntp и проверим статус службы.
# systemctl restart ntp # systemctl status ntp
Теперь убедимся, что она запущена.
# ss -tulnp | grep ntp udp UNCONN 0 0 192.168.155.102:123 0.0.0.0:* users:(("ntpd",pid=6185,fd=18)) udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:(("ntpd",pid=6185,fd=17)) udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("ntpd",pid=6185,fd=16))
Все в порядке, служба ntp запущена и готова принимать подключения. Для примера синхронизирую время одной из windows машин с нашим сервером времени.
Теперь другие компьютеры и серверы могут синхронизировать свои часы с нашего сервера Debian, где мы настроили ntp службу в качестве источника времени для остальных.
Если в логе /var/log/ntp.log увидите сообщение - kernel reports TIME_ERROR: 0x2041: Clock Unsynchronized, не обращайте внимание. Это не ошибка, а информационное сообщение, говорящее о том, что в момент запуска ntp ядро еще не синхронизировало свое время.
Заключение
Кратко подведу итог опубликованного материала. Мы рассмотрели практически все, что связано со временем на сервере Debian. Причем захватили нюансы systemd, который все больше забирает на себя функционала.
Я показал как устанавливать время, изменять часовой пояс, разово синхронизировать время с помощью ntpdate и настраивать сервер времени ntpd в локальной сети.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
nmtui
apt install network-manager -y
\\iperf3 (ISP и нужный роутер)
apt install iperf3 -y
iperf3 -s (На ISP, он готов слушать)
iperf3 -c "ip" -f K (На роутере, посылает пакеты на ISP; Айпи Испа пишем)
\\add users
useradd "name"
passwd "name"
\\frr (ISP, HQ-R, BR-R)
apt-cdrom add
apt install frr -y
\\OSPF (вместо бгп и рип)(ISP, HQ-R, BR-R)
открываем файл настроек
nano /etc/frr/daemons
перед нужным протоколом указываем yes, ospfd=yes
reboot
vtysh
conf t
router ospf
ospf router-id "adress" (Любой адрес, везде разные)
network "adress/mask" area 0 (Вписываем все прилегающие сети)
exit
exit
ping (Проверка)
write (Сохранить)
\\RIP (вместо оспф и бгп)(ISP, HQ-R, BR-R)
nano /etc/frr/daemons
перед нужным протоколом указываем yes, ripd=yes
systemctl restart frr
systemctl status frr
vtysh
conf t
roure rip
network "adress/mask"(Вписываем все прилегающие сети)
exit
exit
wr
show ip rip
show running-config
\\ проброс на роутерах (ISP, HQ-R, BR-R)
1 в nano открыть файл /etc/sysctl.conf
2 найти строчку #net.ipv4.ip_forward=1
3 убрать знак комментария в начале строки - #
4 проверить статус проброса используя команду sysctl -p
\\ DHCP (HQ-R)
apt-cdrom add
apt install isc-dhcp-server -y
Прежде чем приступить к настройке DHCP сервера, сделаем копию данного файла
cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.bak
Открываем этот файл
nano /etc/default/isc-dhcp-server
Первое, что вам требуется сделать, это установить сетевой интерфейс,
который будет настраивать DHCP для IPv4 и IPv6.
INTERFACESv4="интерфейс, который настраивается DHCP"
#INTERFACESv6=""
Также сделайте резервную копию этого файла.
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
Открываем этот файл
nano /etc/dhcp/dhcpd.conf
В нем настраиваем DHCP:
subnet "Сеть HQ" netmask "Маска HQ" {
range "Начальнай адрес" "Конечный адрес";
option routers "Адрес HQ-R";
option subnet-mask "Маска HQ-R";
option broadcast-address "бродкаст HQ-R";
default-lease-time 7200;
max-lease-time 480000;}
host HQ-SRV {
hardware ethernet "Мак адрес порта HQ-SRV";
fixed-address "Адрес, который выдаем HQ-SRV; он не должен входить в диапазон";}
Перезапускаем DHCP и проверяем статус
systemctl restart isc-dhcp-server.service
systemctl status isc-dhcp-server.service
//SSH (Все машины)
apt install openssh-server
systemctl start ssh
systemctl status ssh
nano /etc/ssh/sshd_config
PermitRootLogin yes
systemctl restart ssh
passwd
далее ставим пароль (toor)
все, теперь проверяем с других машин
ssh root@
//Скрипты (HQ-R;BR-R)
cd
nano skript_save.sh
sysctl -p
filename=“info.txt”
echo “All info be save $filename”
echo ‘’” > $filename
echo “INFO ABOUT NETWORK INTERFACE ens224” >> $filename
ip addr show | grep ens224 >> $filename
echo “INFO ABOUT NETWORK INTERFACE ens192” >> $filename
ip addr show | grep ens192 >> $filename
echo “INFO ABOUT NETWORK ROUTES” >> $filename
ip route >> $filename
bash script_save.sh
//NTP (Все машины)
apt install chrony -y
nano /etc/chrony/chrony.conf
sever "адрес HQ-R без маски"
allow "все имеющиеся сети по отдельности"
systemctl restart chrony
chronyc clients (На HQ-R, когда все настроено. Для проверки)
//DNS (HQ-SRV)
apt install bind9 dnsutils
systemctl enable bind9
systemctl start bind9
systemctl status bind9
systemctl restart bind9
Далее настройка первичной зоны
nano /etc/bind/named.conf.local
Zone "hq.work" {
type master;
file "master/hq-work";
};
Zone "branch.work" {
type master;
file "master/branch-work";
};
systemctl restart bind9
mkdir /var/cache/bind/master
nano /var/cache/bind/master/hq-work
nano /var/cache/bind/master/branch-work
Дальше смотрим с помощью (ls /etc/bind) какие файлы содержатся в папке и выбираем нужный нам
Из этого файла будем копировать все в ранее созданные. У меня это был /etc/bind/db.127
cp /etc/bind/db.127 /var/cache/bind/master/hq-work
cp /etc/bind/db.127 /var/cache/bind/master/branch-work
Дальше открываем файлы, в которые скопировали и меняем их по заданию.
Например у меня:
В 5 строке меняем оба localhost. на hq.work. или branch.work. (в зависимости от редактируемоего файла)
Снизу должна быть такая конструкция в файле с hq-work:
@ IN NS hq-srv.hq.work
hq-r IN A "адрес HQ-R"
hq-srv IN A "адрес HQ-SRV"
Далее повторяем все по примеру, но с файликом branch-work
systemctl restart bind9
Затем вписываем на всех машинах в nmtui адресом DNS сервера адрес HQ-SRV
Проверяем пинги по домену. Например ping hq-srv.hq.work
Подключить дополнительный диск NFS/CD/Soft/Addition.iso
apt install apache2 php mariadb-server php-mysql libapache2-mod-php php-gd php-curl php-xmlrpc php-intl php-zip php-mbstring php-soap php-xml -y
systemctl status apache2
systemctl status mariadb
с виртуальной машины CLI в браузере набрать br-srv.branch.work(либо ip-адрес BR-SRV если нет DNS) – должна открыться дефолтная страница Apache
Подготовить базу данных moodle в mariadb
1.4.1 #mysql –u root –p ввести пароль от рута
1.4.2 > CREATE DATABASE moodle; создать базу данных
1.4.3 > CREATE USER ‘moodle’@’localhost’ IDENTIFIED BY ‘moodle’;
1.4.4 > GRANT ALL PRIVILEGES ON moodle.* TO ‘moodle’@’localhost’;
1.4.5 > FLUSH PRIVILEGES;
1.4.6> exit; выйти из mariadb
1.4.7 #nano /etc/php/7.4/apache2/php.ini - убрать точку с запятой перед следующими расширениями
Найти ; extention=pdo_mysql
; extention=xmlrpc
1.4.8 # blkid – узнать где находится cdrom addition; mount /dev/srN /mnt – монтируем cd
1.4.8 # tar –zxvf /mnt/moodle-latest-401.tgz
1.4.9 cp –r /root/moodle /var/www/ скопировать moodle в каталог /var/www
1.4.10 cd /var/www переходим в каталог /var/www
1.4.11 mkdir moodledata создаем каталог для данных moodle
1.4.12 chown www-data:www-data /var/www/ moodle
1.4.13 chown www-data:www-data /var/www/moodledata
1.4.14 chmod 755 /var/www/moodle
1.4.15 chmod 755 /var/www/moodledata
Конфигурируем веб-сервер apache
2.1 nano /etc/apache2/sites-available/000-default.conf
изменить DocumentRoot /var/www/html на /var/www/moodle
2.2 #systemctl restart apache2 Перезапустить веб-сервер Apache
2.3 с виртуальной машины CLI в браузере набрать br-srv.branch.work(либо ip-адрес BR-SRV если нет DNS) – должна открыться дефолтная страница LMS Apache
Выбрать английский язык, продолжить установку
3.1 Оставить системные пути moodle по умолчанию
3.2 Выбрать mariadb при выборе драйвера базы данных
3.3 database host – localhost
database name – moodle
database user moodle
database password moodle
Tables prefix mdl_
database port 3306
unix socket
3.4 Прочитать условия, согласиться
3.5 Если необходимые библиотеки имеют статус ок, то переходим к следующему шагу.
3.6 Установка может занять продолжительное время
3.7 Установить пароль админа – по заданию(P@ssw0rd)
3.8 Установить
Full site name LMS Apache
Short name for site LMS Apache
Support email admin@some.ru
No-reply addres admin@some.ru
ISP NTP
apt install -y chrony
nano /etc/chrony/chrony.conf
local stratum 4
allow 4.4.4.0/24
allow 3.3.3.0/24
systemctl restart chronyd
RTR-L NTP
ip domain name int.demo.wsr
ip name-server 192.168.100.200
ntp server chrony.int.demo.wsr
RTR-R NTP
ip domain name int.demo.wsr
ip name-server 192.168.100.200
ntp server chrony.int.demo.wsr
WEB-L NTP
apt-cdrom add
apt install -y chrony
nano /etc/chrony/chrony.conf
pool chrony.int.demo.wsr iburst
allow 192.168.100.0/24
systemctl restart chrony
WEB-R NTP
apt-cdrom add
apt install -y chrony
nano /etc/chrony/chrony.conf
pool chrony.int.demo.wsr iburst
allow 192.168.100.0/24
systemctl restart chrony
Доброго времени суток
Почему я не могу нигде найти информацию как изменить сам адрес ntp сервера к которому обращается debian
К примеру у меня развернут ntp сервер на маршрутизаторе, я хочу чтобы маршрутизатор синхронизировал время с ntp сервера а все остальные, в том числе и сервер debian, синхронизировал с него, а не с непонятного сервера, к которому не факт что есть доступ через локальный фаервол
В /etc/ntp.conf указывается адрес сервера времени, с которого проходит синхронизация. Можете добавить свой и закомментировать дефолтные адреса.
Доброго времени суток
Я просмотрел сервер CentOS, Debian, Ubuntu но не нашел файла ntp.conf в директории /etc
В centos его и не будет. Там используется chrony, а не ntp. В debian и ubuntu возможно не установлен ntp, поэтому и конфига нет.
Добрый.
Спасибо за статью.
5 копеек от себя.
По-быстрому:
cp -fv /etc/systemd/timesyncd.conf{,.orig}
timedatectl set-timezone Europe/Moscow
cat > /etc/systemd/timesyncd.conf <<EOF
[Time]
NTP=0.ru.pool.ntp.org 1.ru.pool.ntp.org 2.ru.pool.ntp.org 3.ru.pool.ntp.org
FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
EOF
service systemd-timesyncd restart
timedatectl set-ntp true
Спасибо за инфу. Я забыл посмотреть и написать про конфиг для timesyncd, который живет в /etc/systemd/timesyncd.conf.
Еле прошёл рекапчу)))
Владимир, спасибо за статью.
А не проще настроить через systems без установки ntpd, chronyd
https://wiki.archlinux.org/index.php/Systemd-timesyncd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)
Про это ничего не написали.
Так у меня же об этом написано аж в целом отдельном разделе под названием "Timedatectl для настройки времени в Debian". Я даже написал, чем этот способ отличает от ntp, который может выступать в том числе в роли сервера времени для других машин.