Работа с основными параметрами среды#

Настройка даты и времени#

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

SberLinux OS использует демон chronyd синхронизировать время с серверами NTP. Подробнее про chronyd смотрите в разделе «Демон chronyd».

Отображение текущей даты и времени#

Чтобы отобразить текущую дату и время, выполните любой следующих шагов:

  1. Используйте команду date:

date

Пример вывода команды:

Mon Mar 30 16:02:59 CEST 2020
  1. Чтобы увидеть более подробную информацию, используйте команду timedatectl:

timedatectl

Пример вывода команды:

Local time: Mon 2024-03-30 16:04:42 CEST
Universal time: Mon 2024-03-30 14:04:42 UTC
RTC time: Mon 2024-03-30 14:04:41
Time zone: Europe/Moscow (CEST, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

Смена часового пояса**#

Для смены часового пояса используйте команду:

timedatectl set-timezone "Europe/Moscow"

В приведенном примере часовой пояс меняется на Europe/Moscow.

Смена времени#

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

timedatectl set-time 15:58:30

Настройка локали системы#

Общесистемные настройки локали хранятся в файле /etc/locale.conf, который считывается при ранней загрузке демоном systemd. Каждая служба или пользователь наследует настройки локали, указанные в /etc/locale.conf, если только отдельные программы или отдельные пользователи не переопределяют их.

В этом разделе описывается, как управлять языковым стандартом системы:

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

localectl list-locales

Пример вывода команды:

C.utf8
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
...
  • Чтобы отобразить текущий статус настроек системных локалей, используйте команду:

localectl status
  • Чтобы установить или изменить настройки локали системы по умолчанию, используйте команду localectl set-locale от имени пользователя c административными полномочиями:

localectl set-locale LANG=en_US

Настройка раскладки клавиатуры#

Настройки раскладки клавиатуры управляют раскладкой, используемой в текстовой консоли:

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

localectl list-keymaps

Пример вывода команды:

ANSI-dvorak
al
al-plisi
amiga-de
amiga-us
...
  • Чтобы отобразить текущий статус настроек раскладки клавиатуры, введите:

localectl status

Пример вывода команды:

...
VC Keymap: us
...
  • Для установки или изменения системной раскладки по умолчанию используйте команду:

localectl set-keymap us

Настройка и управление сетевым доступом#

В этом разделе описываются различные варианты добавления соединений Ethernet.

Настройка статического соединения Ethernet с помощью утилиты nmcli#

Ниже приведен пример процедуры, которая описывает добавление соединения Ethernet с помощью утилиты nmcli:

В приведенном примере используются следующие значения:

  • Статический адрес IPv4 — <IPv4_ADDRESS> с /24 маской подсети

  • Статический адрес IPv6 — <IPv6_ADDRESS> с /64 маской подсети

  • Шлюз IPv4 по умолчанию — <IPv4_GATEWAY>

  • Шлюз IPv6 по умолчанию — <IPv6_GATEWAY>

  • DNS-сервер IPv4 — <IPv4_DNS>

  • DNS-сервер IPv6 — <IPv6_DNS>

  • Домен поиска DNS — example.ru

Сценарий#

  1. Добавьте новый профиль подключения NetworkManager для подключения Ethernet:

    nmcli connection **Add** con-name Example-Connection ifname enp7s0 type ethernet
    

    Дальнейшие шаги изменяют созданный профиль подключения Example-Connection.

  2. Установите IPv4-адрес:

    nmcli connection modify Example-Connection ipv4.addresses <IPv4_ADDRESS>/24
    
  3. Установите IPv6-адрес:

    nmcli connection modify Example-Connection ipv6.addresses <IPv6_ADDRESS>/64
    
  4. Установите способ подключения manual:

    • Для IPv4:

      nmcli connection modify Example-Connection ipv4.method manual
      
    • Для IPv6:

      nmcli connection modify Example-Connection ipv6.method manual
      
  5. Установите шлюзы по умолчанию:

    • Для IPv4:

      nmcli connection modify Example-Connection ipv4.gateway <IPv4_GATEWAY>
      
    • Для IPv6:

      nmcli connection modify Example-Connection ipv6.gateway <IPv6_GATEWAY>
      
  6. Задайте адреса DNS-серверов:

    • Для IPv4:

      nmcli connection modify Example-Connection ipv4.dns "<IPv4_DNS>"
      
    • Для IPv6:

      nmcli connection modify Example-Connection ipv6.dns "<IPv6_DNS>"
      

    Чтобы задать несколько DNS-серверов, укажите их через пробел и заключите в кавычки.

  7. Установите домен поиска DNS:

    • Для IPv4:

      nmcli connection modify Example-Connection ipv4.dns-search example.ru
      
    • Для IPv6:

      nmcli connection modify Example-Connection ipv6.dns-search example.ru
      
  8. Активируйте профиль подключения:

    nmcli connection up Example-Connection
    

    Пример вывода команды:

    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)
    

Проверка#

  1. Проверьте отображение состояния устройств и подключений:

    nmcli device status
    

    Пример вывода команды:

    DEVICE TYPE STATE CONNECTION
    enp7s0 ethernet connected Example-Connection
    
  2. Отобразите все настройки профиля подключения:

    nmcli connection show Example-Connection
    

    Пример вывода команды:

    connection.id: Example-Connection
    connection.uuid: b6cdfa1c-e4ad-46e5-af8b-a75f06b79f76
    connection.stable-id: --
    connection.type: 802-3-ethernet
    connection.interface-name: enp7s0
    ...
    
  3. Используйте команду ping, чтобы убедиться, что этот хост может отправлять пакеты другим хостам в той же подсети и в удаленной подсети.

    Если выполнение команды завершилось с ошибкой, проверьте параметры IP и подсети.

  4. Используйте команду host, чтобы убедиться, что разрешение имен работает:

    host client.example.ru
    

Если команда возвращает ошибку, например, connection timed out или no servers could be reached, проверьте настройки DNS.

Действия по устранению неполадок#

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

  • Убедитесь, что сетевой кабель подключен к хосту и коммутатору.

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

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

Настройка динамического соединения Ethernet с помощью nmtui#

Данная утилита представляет собой текстовый пользовательский интерфейс и может использоваться для настройки и конфигурирования. Используйте nmtui для настройки соединения Ethernet с динамическим IP-адресом на хосте.

Сценарий#

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

    nmcli device status
    

    Пример вывода команды:

    DEVICE     TYPE      STATE                   CONNECTION
    enp7s0     ethernet  unavailable             --
    ...
    
  2. Введите команду nmtui:

    nmtui
    
  3. Выберите Edit a connection и нажмите Enter.

  4. Нажмите кнопку Add.

  5. Выберите Ethernet из списка типов сети и нажмите Enter.

  6. При необходимости введите имя создаваемого профиля NetworkManager.

  7. Введите имя сетевого устройства в поле Device.

  8. Нажмите кнопку OK, чтобы создать и автоматически активировать новое соединение.

  9. Нажмите Back кнопку, чтобы вернуться в главное меню.

  10. Выберите Quit и нажмите Enter, чтобы закрыть утилиту nmtui.

Проверка#

  1. Отобразите и проверьте состояния устройств и подключений:

    nmcli device status
    

    Пример вывода команды:

    DEVICE      TYPE      STATE      CONNECTION
    enp7s0      ethernet  connected  Example-Connection
    
  2. Отобразите и проверьте все настройки профиля подключения:

    nmcli connection show Example-Connection
    

    Пример вывода команды:

    connection.id: Example-Connection
    connection.uuid: b6cdfa1c-e4ad-46e5-af8b-a75f06b79f76
    connection.stable-id: --
    connection.type: 802-3-ethernet
    connection.interface-name: enp7s0
    ...
    

Настройка статического соединения Ethernet с помощью nmtui#

Утилита nmtui предоставляет текстовый пользовательский интерфейс. Используйте nmtui для настройки соединения Ethernet со статическим IP-адресом на хосте без графического интерфейса.

Сценарий#

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

    nmcli device status
    

    Пример вывода команды:

    DEVICE     TYPE      STATE                   CONNECTION
    enp7s0     ethernet  unavailable             --
    ...
    
  2. Запустите nmtui:

    nmtui
    
  3. Выберите Edit a connection и нажмите Enter.

  4. Нажмите Add кнопку.

  5. Выберите Ethernet из списка типов сети и нажмите Enter.

  6. Необязательно: введите имя создаваемого профиля NetworkManager.

  7. Введите имя сетевого устройства в поле Device.

  8. Настройте параметры адресов IPv4 и IPv6 в областях IPv4 configuration и IPv6 configuration:

    • Нажмите кнопку Automatic и выберите Manual из отображаемого списка.

    • Нажмите кнопку Show рядом с протоколом, чтобы отобразить дополнительные поля.

    • Нажмите Add кнопку рядом с Addresses и введите IP-адрес и маску подсети в формате бесклассовой междоменной маршрутизации (CIDR). Если маска подсети не указана, NetworkManager установит маску подсети /32 для адресов IPv4 и /64 для адресов IPv6.

    • Введите адрес шлюза по умолчанию.

    • Нажмите Add кнопку рядом с DNS servers и введите адрес DNS-сервера.

    • Нажмите Add кнопку рядом с Search domains и введите домен поиска DNS.

  9. Нажмите OK кнопку, чтобы создать и автоматически активировать новое соединение.

  10. Нажмите Back кнопку, чтобы вернуться в главное меню.

  11. Выберите Quit и нажмите Enter, чтобы закрыть nmtui.

Проверка#

  1. Отобразятся состояния устройств и подключений:

    nmcli device status
    

    Пример вывода команды:

    DEVICE      TYPE      STATE      CONNECTION
    enp7s0      ethernet  connected  Example-Connection
    
  2. Отобразите все настройки профиля подключения:

    nmcli connection show Example-Connection
    

    Пример вывода команды:

    connection.id:              Example-Connection
    connection.uuid:            b6cdfa1c-e4ad-46e5-af8b-a75f06b79f76
    connection.stable-id:       --
    connection.type:            802-3-ethernet
    connection.interface-name:  enp7s0
    ...
    

Запуск служб systemd во время загрузки#

Для управления службами используется утилита systemctl для управления демоном systemd и диспетчером служб.

Включение или отключение служб#

Пользователь с административными полномочиями может включить или отключить запуск конкретной службы при загрузке ОС. Любые изменения будут применены после перезапуска системы.

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

Чтобы службу было невозможно запустить вручную, можно использовать маскировку. Маскировка — это способ отключения службы, делающий ее не доступной для использования, пока не будет задействована команда unmask.

Предварительные условия#

  • Права пользователя с административными полномочиями.

  • Служба, которую хотите включить, не должна быть замаскирована. Если есть замаскированный сервис, необходимо сначала использовать следующую команду:

    systemctl unmask service_name
    

Сценарий#

  1. Включите запуск службы при загрузке:

    systemctl enable service_name
    
  2. Замените service_name на службу, которую хотите включить.

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

    systemctl enable --now service_name
    
  3. Отключите запуск службы при загрузке:

    systemctl disable service_name
    

    Замените service_name на службу, которую хотите отключить.

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

    systemctl mask service_name
    

Настройка безопасности системы#

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

В этом разделе рассматриваются только основные функции безопасности, которые можно настроить после установки операционной системы.

Включение службы межсетевого экрана firewalld#

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

Утилита firewalld, обеспечивающая межсетевой экран в SberLinux OS, автоматически включается во время установки.

Сценарий#

Чтобы включить службу firewalld, выполните следующий сценарий.

  • Отобразите текущее состояние firewalld:

    systemctl status firewalld
    

    Пример вывода команды:

     firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
       Active: inactive (dead)
    ...
    
  • Если firewalld не включена и не запущена, запустите утититу и включите ее автоматический запуск после перезагрузки системы:

    systemctl enable --now firewalld
    

Проверка#

  • Убедитесь, что утилита firewalld запущена и включена:

    systemctl status firewalld
    

    Пример вывода команды:

     firewalld.service - firewalld - dynamic firewall daemon
       Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
       Active: active (running)
    ...
    

Настройка правил для межсетевого экрана firewalld#

Правила для межсетевого экрана firewalld настраиваются с помощью утилиты firewall-cmd. Подробнее об этой утилите можно прочесть в разделе «Утилита firewall-cmd».

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

    firewall-cmd --reload
    
  • Чтобы добавить порты, откройте порт 80:

    firewall-cmd --permanent --add-port=80/tcp
    

    Где ключ --permanent добавляет постоянное правило, которое будет действовать после перезагрузки.

  • Чтобы добавить правило для определенной зоны:

    1. Пропишите:

      firewall-cmd --permanent --zone=external --add-port=80/tcp
      
    2. Добавьте диапазон портов:

      firewall-cmd --permanent --add-port=6500-6700/udp
      
    3. Добавьте несколько правил одной командой:

      firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
      

Добавление сервиса#

Использование служб вместо портов может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.

  1. Посмотрите список доступных служб:

    firewall-cmd --get-services
    
  2. Разрешите порт, например, для сервиса ntp:

    firewall-cmd --permanent --add-service=ntp
    
  3. Создайте собственную службу:

    firewall-cmd --permanent --new-service=name-service
    

    Где name-service — это произвольное имя создаваемой службы.

  4. Добавьте порт, например TCP 2200 к службе:

    firewall-cmd --permanent --service=name-service --add-port=2200/tcp
    
  5. Задайте описание для удобства, используя следующие команды:

    firewall-cmd --permanent --service=name-service --set-short="Service With This Name"
    

    Затем:

    firewall-cmd --permanent --service=name-service --set-description="Long Description For Service With This Name"
    

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

    firewall-cmd --info-service=name-service
    
  6. Теперь созданную службу можно использовать для создания правил, например:

    firewall-cmd --permanent --add-service=name-service
    

Правило Rich-Rule#

Правило Rich-Rule позволяет создавать правила с условиями. Например:

  1. Разрешите службу http с условием, что запросы будут с определенных IP-адресов:

    firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="<IP-ADDRESS>/24" service name="http" accept'
    
  2. Или разрешите службу для конкретного порта:

    firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="<IP-ADDRESS/24" port port="5038" protocol="tcp" accept'
    
  3. Чтобы заблокировать подсеть, воспользуйтесь командой:

    firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='<IP-ADDRESS/24' reject"
    

    Список правил с условиями отобразите командой:

    firewall-cmd --list-rich-rules
    

Удаление правил#

Аналогично созданию, но вместо add введите remove, например: --remove-port (удалить порт) или --remove-service (удалить службу).

Удалите правило для открытия 80-го порта:

firewall-cmd --permanent --remove-port=80/tcp

Управление зонами#

Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если необходимо для разных сетевых адаптеров создать разные по строгости правила.

  1. Просмотрите список всех имеющихся зон:

    firewall-cmd --list-all-zones
    
  2. Просмотрите список используемых зон:

    firewall-cmd --get-active-zones
    

Информация о конкретной зоне#

  1. Введите:

    firewall-cmd --list-all --zone=public
    
  2. Создайте правило для зоны public:

    firewall-cmd --permanent --zone=public --add-port=80/tcp
    
  3. Добавьте сетевой интерфейс в зону, используя следующие команды:

    firewall-cmd --permanent --zone=public --remove-interface=ens34
    

    Затем:

    firewall-cmd --permanent --zone=internal --add-interface=ens34
    

    Перед этим необходимо удалить адаптер из текущей зоны.

  4. Задайте действие по умолчанию для зоны:

    firewall-cmd --permanent --zone=public --set-target=DROP
    
  5. Создайте новую зону, используя следующие команды:

    firewall-cmd --permanent --new-zone=custom_zone
    

    Затем:

    firewall-cmd --reload
    

    Внимание

    Чтобы система увидела новую зону custom_zone, команда reload обязательна.

Пример настройки NAT (шлюза)#

  • Включите masquerade:

    firewall-cmd --permanent --zone=dmz --add-masquerade
    

Примечание

Без указания зон, masquerade будет включен для public и external.

Правило systemctl restart firewalld#

Важно

Чтобы сервер заработал в качестве шлюза, также необходимо настроить ядро.

Для просмотра созданных данным способом правил используйте команду:

firewall-cmd --direct --get-all-rules

Проброс портов#

Проброс настраивается со следующим синтаксисом:

firewall-cmd --add-forward-port=port=<порт прослушивания>:proto=tcp|udp|sctp|dccp:toport=<порт назначения>:toaddr=<куда перенаправить>

Например:

firewall-cmd --zone=external --permanent --add-forward-port=port=25:proto=tcp:toport=8025:toaddr=000.000.0.15

В примере выше осуществляются запросы на порту 25 и переводятся на узел 000.000.0.15 и порт 8025.

Запрещение или разрешение трафика между интерфейсами#

Например, существуют два внутренних сетевых интерфейса ens35 и ens36, поэтому необходимо контролировать трафик между ними.

  • Чтобы запретить трафик между интерфейсами:

    Правило применяется в случаях, когда на сервере включен FORWARD, но необходимо блокировать трафик между определенными сегментами сети.

    Введите следующую команду:

    firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j DROP
    

    Затем:

    firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j DROP
    
  • Чтобы разрешить трафик между интерфейсами:

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

    Введите следующую команду:

    firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
    

    Затем:

    firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens36 -o ens35 -j ACCEPT
    
  • Чтобы разрешить трафик в одном направлении:

    Если необходимо сделать так, чтобы только сеть ens35 видела сеть ens36, вводите одну команду:

    firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i ens35 -o ens36 -j ACCEPT
    

Возможные проблемы при работе с firewalld#

  • Ошибка command not found - команда не найдена.

    Возможные причины: не установлен пакет или не запущена служба.

    • Выполните установку пакета firewalld:

      dnf install firewalld firewall-config
      
    • Запустите службу:

      systemctl start firewalld
      
  • Не применяются правила.

    Причина: не введена команда перезапуска правил.

    • Перечитайте правила:

      firewall-cmd --reload
      
    • Перезапустите систему со сбросом подключений:

      firewall-cmd --complete-reload
      
    • Или перезапустите сетевые службы:

      systemctl restart network
      
    • Перезагрузите машину:

      shutdown -r now
      

Работа с SELinux#

Для защиты базы данных пользователей используется защита SELinux.

SELinux работает в одном из трех режимов:

  • Enforcing — строгое соблюдаются политики безопасности.

  • Permissive — допускается нарушение ограничений, в журнале делается соответствующая пометка.

  • Disabled — политики безопасности не действуют.

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

getenforce

Пример вывода команды:

Permissive

Чтобы перейти в режим строгого соблюдения политики безопасности, используйте параметр enforcing или 1. Для включения режима, допускающего нарушение ограничений, используйте параметр permissive или 0.

setenforce enforcing

Или:

setenforce 1

Также изменить режим можно, отредактировав файл /etc/selinux/config. Пример вывода содержимого файла с помощью команды cat:

# Данный файл управляет режимом SELinux
# SELINUX= может принимать одно из следующих трех значений:
# enforcing - соблюдаются строгие политики безопасности SELinux.
# permissive - SELinux выводит предупреждения при нарушении ограничений.
# disabled - политики безопасности SELinux не действуют.
SELINUX=enforcing
# SELINUXTYPE= может принимать одно из следующих трех значений:
# targeted - целевые процессы защищены.
# minimum - изменение целевой политики. Защищены только выбранные процессы.
# mls - многоуровневая защита безопасности.
SELINUXTYPE=targeted

Разница с setenfoce в том, что при загрузке операционной системы режим SELinux будет выставлен в соответствии со значением параметра SELINUX конфигурационного файла. Помимо того, изменения enforcing <=> disabled вступают в силу только через правку файла /etc/selinux/config и после перезагрузки.

Изменение конфигурации доступов#

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

Команда semanage login -a -s связывает пользователя SELinux с пользователем операционной системы:

semanage login -a -s user_u karol

Следующая команды выводит список пользователей:

semanage login -l

Пример вывода команды:

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *

Команда semanage user используется для управления отображений между пользователями и ролями SELinux.

Параметр команды -l выводит список соответствия пользователей и ролей:

semanage user -l

Пример вывода команды:

Labeling   MLS/       MLS/
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r

Параметры команды:

  • -a — добавление пользовательской записи соответствия ролей;

  • -d — удаление пользовательской записи соответствия ролей;

  • -R — отображение списка ролей, прикрепленных к пользователю.

Использование пакета Chrony для настройки NTP#

Точное хронометрирование важно по ряду причин. Например, в сети требуются точные временные метки в пакетах и журналах. В системах Linux NTP протокол реализуется демоном, работающим в пользовательском пространстве.

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

NTP-протокол реализуется демоном chronyd, доступным в пакете chrony.

В следующих разделах описано, как использовать chrony suite для настройки NTP.

Использование chronyc для управления chronyd#

В этом разделе описывается, как управлять chronyd с помощью утилиты командной строки chronyc.

  1. Чтобы внести изменения в локальный экземпляр chronyd использования утилиты командной строки chronyc в интерактивном режиме, введите следующую команду как пользователь с административными полномочиями:

    chronyc
    
  2. Утилита chronyc должна выполняться так, как если бы пользователь с административными полномочиями использовал некоторые из ограниченных команд. Командная строка chronyc будет отображаться следующим образом:

    chronyc>
    
  3. Чтобы перечислить все команды, введите help.

  4. Альтернативно, утилита также может быть вызвана в неинтерактивном командном режиме, если вызывается вместе с командой следующим образом:

    chronyc command
    

Важно

Изменения, внесенные с помощью chronyc, не являются постоянными, они будут потеряны после перезагрузки chronyd. Для постоянных изменений внесите изменения в /etc/chrony.conf.

Использование Chrony#

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

Управление chrony#

Следующая процедура описывает, как установить, запустить, остановить и проверить состояние chronyd.

  1. Чтобы убедиться, что chrony suite установлен, выполните следующую команду:

    dnf install chrony
    

    Расположение по умолчанию для демона chrony - /usr/sbin/chronyd. Утилита командной строки будет установлена в /usr/bin/chronyc.

  2. Чтобы проверить состояние chronyd, выполните следующую команду:

    systemctl status chronyd
    chronyd.service - NTP client/server
    Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled)<
    Active: active (running) since Wed 2013-06-12 22:23:16 CEST; 11h ago
    
  3. Для запуска chronyd выполните следующую команду:

    systemctl start chronyd
    

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

    systemctl enable chronyd
    
  4. Чтобы остановить chronyd, выполните следующую команду:

    systemctl stop chronyd
    
  5. Чтобы предотвратить автоматический запуск chronyd при запуске системы, выполните следующую команду:

    systemctl disable chronyd
    

Проверка синхронизации chrony#

Следующая процедура описывает, как проверить, синхронизируется ли chrony при использовании команд tracking, sources и sourcestats.

  1. Чтобы проверить chrony tracking, выполните следующую команду:

    chronyc tracking
    Reference ID : CB00710F (foo.example.net)
    Stratum : 3
    Ref time (UTC) : Fri Jan 27 09:49:17 2017
    System time : 0.000006523 seconds slow of NTP time
    Last offset : -0.000006747 seconds
    RMS offset : 0.000035822 seconds
    Frequency : 3.225 ppm slow
    Residual freq : 0.000 ppm
    Skew : 0.129 ppm
    Root delay : 0.013639022 seconds
    Root dispersion : 0.001100737 seconds
    Update interval : 64.2 seconds
    Leap status : Normal
    

    Команда отображает информацию о текущих источниках времени, которые доступны chronyd.

  2. Чтобы проверить chrony sources, выполните следующую команду:

    chronyc sources
    210 Number of sources = 3
    MS Name/IP address Stratum Poll Reach LastRx Last sample
    ===============================================================================
    #* GPS0                  0 4 377 11 -479ns[ -621ns] /- 134ns
    ^? a.b.c                 2 6 377 23 -923us[ -924us] +/- 43ms
    ^ d.e.f                  1 6 377 21 -2629us[-2619us] +/- 86ms
    

    Дополнительно, можно задать параметр -v, который означает большую детализацию отчета (verbose). В этом случае дополнительные строки заголовка отображаются как напоминание о значениях столбцов.

  3. Команда sourcestats отображает информацию о процессе оценки скорости дрейфа и смещения для каждого из источников, которые в данный момент исследуются chronyd. Чтобы проверить исходную статистику, выполните следующую команду:

    chronyc sourcestats
    210 Number of sources = 1
    Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
    ===============================================================================
    abc.def.ghi 11 5 46m -0.001 0.045 1us 25us
    

    Дополнительно, можно задать параметр -v, который означает большую детализацию отчета (verbose). В этом случае дополнительные строки заголовка отображаются как напоминание о значениях столбцов.

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

Следующая процедура описывает, как вручную настроить системные часы.

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

chronyc makestep

Если используется директива rtcfile, то часы реального времени не следует настраивать вручную.

Настройка chrony для системы в изолированной сети#

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

Следующая процедура описывает, как настроить chrony для asystem в изолированной сети.

  1. В системе, выбранной в качестве основной, используя текстовый редактор, запущенный с административными полномочиями, отредактируйте /etc/chrony.conf следующим образом:

    driftfile /var/lib/chrony/drift
    commandkey 1
    keyfile /etc/chrony.keys
    initstepslew 10 client1 client3 client6
    local stratum 8
    manual
    allow nn.nn.nn.nn
    

    Где находится адрес сети или подсети nn.nn.nn.nn, с которого клиентам разрешено подключаться.

  2. В системах, выбранных в качестве прямых клиентов ведущего, используя текстовый редактор, работающий с административными полномочиями, отредактируйте /etc/chrony.conf следующим образом:

    server master
    driftfile /var/lib/chrony/drift
    logdir /var/log/chrony
    log measurements statistics tracking
    keyfile /etc/chrony.keys
    commandkey 24
    local stratum 10
    initstepslew 20 master
    allow hh.hh.hh.hh
    

Где hh.hh.hh.hh - это адрес ведущего устройства, а master - имя хоста ведущего устройства. Клиенты с такой конфигурацией будут повторно синхронизировать мастер, если он перезапустится.

В клиентских системах, которые не должны быть прямыми клиентами ведущего, файл /etc/chrony.conf должен быть таким же, за исключением того, что директивы localand allow должны быть опущены.

В изолированной сети можно использовать директиву local, которая включает локальный ссылочный режим и позволяет chronyd работать в качестве NTP-сервера, синхронизированного с реальным временем, даже если он никогда не был синхронизирован или последнее обновление часов произошло давно.

Чтобы разрешить нескольким серверам в сети использовать одну и ту же локальную конфигурацию и синхронизироваться друг с другом, не вводя в заблуждение клиентов, опрашивающих более одного сервера, используйте опцию orphan директивы local, которая включает режим orphan mode. Каждый сервер должен быть настроен для опроса всех других серверов local. Это гарантирует, что локальная ссылка активна только на сервере с наименьшим идентификатором ссылки, а другие серверы синхронизированы с ним. Когда сервер выйдет из строя, его заменит другой.

Chrony с отметкой времени HW#

Аппаратная временная метка - это функция, поддерживаемая некоторыми контроллерами сетевых интерфейсов (NIC), которая обеспечивает точную временную метку входящих и исходящих пакетов. NTP временные метки обычно создаются ядром и chronyd с использованием системных часов. Однако, когда включена временная метка HW, сетевой адаптер использует свои собственные часы для генерации временных меток, когда пакеты входят или выходят из канального уровня или физического уровня. При использовании с NTP аппаратными временными метками можно значительно повысить точность синхронизации. Для достижения наилучшей точности, как NTP-серверы, так и NTP-лиенты должны использовать аппаратные временные метки. В идеальных условиях может быть возможна точность в несколько микросекунд.

Другим протоколом для синхронизации времени, использующим аппаратную временную метку, является PTP.

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

Проверка поддержки аппаратной временной метки#

Чтобы проверить, что аппаратная временная метка с NTP поддерживается интерфейсом, используйте ethtool -T команду. Интерфейс может быть использован для аппаратных временных меток с NTP ethtool, если перечисляет SOF_TIMESTAMPING_TX_HARDWARESOF_TIMESTAMPING_TX_SOFTWARE и возможности, а также режим фильтрации HWTSTAMP_FILTER_ALL.

Включение аппаратной отметки времени#

Чтобы включить аппаратную временную метку, используйте директиву hwtimestamp в файле /etc/chrony.conf. Директива может либо указывать один интерфейс, либо использовать подстановочный знак для включения аппаратных временных меток на всех интерфейсах, которые его поддерживают. Используйте спецификацию подстановочных знаков в случае, если никакое другое приложение не использует аппаратную временную метку в интерфейсе. В файле hwtimestamp конфигурации chrony допускается наличие нескольких директив.

Пример включения аппаратной временной метки с помощью директивы hwtimestamp:

hwtimestamp eth0
hwtimestamp eth1
hwtimestamp *

Настройка интервала опроса клиентов#

Диапазон интервала опроса по умолчанию (64-1024 секунды) рекомендуется для серверов в интернете. Для локальных серверов и аппаратных временных меток необходимо настроить более короткий интервал опроса, чтобы минимизировать смещение системных часов.

Следующая директива в /etc/chrony.conf указывает локальный NTP-сервер, использующий интервал опроса в одну секунду:

server ntp.local minpoll 0 maxpoll 0 xleave

Включение режима чередования#

NTP-серверы, которые не являются аппаратными NTP-устройствами, а скорее - компьютерами общего назначения, где выполняется программная NTP-реализация, например chrony, получат метку времени аппаратной передачи только после отправки пакета. Такое поведение не позволяет серверу сохранять временную метку в пакете, которому она соответствует. Чтобы разрешить NTP-клиентам получать временные метки передачи, которые были сгенерированы после передачи, настройте клиентов на использование режима NTP-чередования, добавив опцию xleave в директиву сервера /etc/chrony.conf:

server ntp.local minpoll 0 maxpoll 0 xleave

Настройка сервера для большого количества клиентов#

Конфигурация сервера по умолчанию позволяет использовать режим чередования одновременно не более чем нескольким тысячам клиентов. Чтобы настроить сервер для большего числа клиентов, увеличьте директиву clientloglimit в /etc/chrony.conf. Эта директива определяет максимальный размер памяти, выделяемой для ведения журнала доступа клиентов на сервере:

clientloglimit 100000000

Проверка временных меток оборудования#

Чтобы убедиться, что интерфейс успешно включил аппаратную временную метку, проверьте системный журнал. Журнал должен содержать сообщение от для каждого интерфейса с успешно включенной аппаратной временной меткой.

Пример зарегистрированных сообщений для интерфейсов с включенной аппаратной временной меткой

chronyd[4081]: Enabled HW timestamping on eth0
chronyd[4081]: Enabled HW timestamping on eth1

Если chronyd настроен как NTP-клиент или одноранговый узел, можно указать режимы передачи и приема временных меток, а также режим чередования, сообщаемый для каждого NTP-источника chronyc командой ntpdata.

Пример отчетность о стабильности измерений NTP:

chronyc sourcestats

При включенной аппаратной временной метке стабильность NTP-измерений должна составлять десятки или сотни наносекунд при нормальной нагрузке. Об этой стабильности сообщается в столбце Std Dev выходных данных команды chronyc sourcestats:

Выходные данные:

210 Number of sources = 1
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
ntp.local 12 7 11 +0.000 0.019 +0ns 49ns

Настройка моста PTP-NTP#

Если высокоточный протокол точного времени (PTP) grandmaster доступен в сети, в которой нет коммутаторов или маршрутизаторов с PTP-поддержкой, машина может быть выделена для работы в качестве PTP slave и stratum-1 NTP. Такая машина должен иметь два или более сетевых интерфейса и находиться рядом с ведущим устройством PTP (grandmaster PTP) или иметь прямое подключение к нему. Это обеспечит высокоточную синхронизацию в сети.

  1. Настройте ptp4l и phc2sys для использования одного интерфейса для синхронизации системных часов с помощью PTP.

  2. Настройте chronyd, чтобы указать системное время, используя другой интерфейс:

Пример настройки chronyd для предоставления системного времени с использованием другого интерфейса:

bindaddress hh.hh.hh.hh
hwtimestamp eth1
local stratum 1

Пространства имен#

Пространства имен — один из наиболее важных методов организации и идентификации программных объектов.

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

Изменения конкретного глобального ресурса видны только процессам в этом пространстве имен и не влияют на остальную часть системы или другие пространства имен.

Чтобы проверить, членом каких пространств имен является процесс, Можно проверить символические ссылки в каталоге /proc/<PID>/ns/.

В следующей таблице показаны поддерживаемые пространства имен и ресурсы, которые они изолируют:

Пространство имен

Ресурсы

Mount

Точки монтирования

UTS

Имя хоста и доменное имя NIS

IPC

System V IPC, очереди сообщений POSIX

PID

Идентификаторы процессов

Network

Сетевые устройства, стеки, порты и т. д.

User

Идентификаторы пользователей и групп

Control groups

Корневой каталог группы управления