Настройка основных параметров системы#
В этом разделе описываются основы системного администрирования в Platform V SberLinux OS Server (далее - SberLinux). Основное внимание уделяется задачам, которые системный администратор должен выполнить сразу после успешной установки операционной системы:
установка программного обеспечения с помощью yum;
использование systemd для управления службами;
управление пользователями, группами и правами доступа к файлам;
использование chrony для настройки NTP;
работа с Python 3 и другие.
Изменение основных параметров среды#
Настройка основных параметров среды является частью процесса установки. Данный раздел описывает как изменить их позже. В базовую конфигурацию среды входят:
дата и время;
локали системы;
раскладка клавиатуры;
язык.
Настройка даты и времени#
Точный хронометраж важен по ряду причин. Хронометраж обеспечивается NTP протоколом, который реализуется демоном, работающим в пользовательском пространстве. Демон пользовательского пространства обновляет системные часы, работающие в ядре. Системные часы могут показывать время, используя различные источники синхронизации.
SberLinux использует chronyd демон для реализации NTP. chronyd доступен в пакете chrony.
Отображение текущей даты и времени
Чтобы отобразить текущую дату и время, выполните любой из этих шагов.
Процедура:
Введите date команду:
$ date
Mon Mar 30 16:02:59 CEST 2020
Чтобы увидеть более подробную информацию, используйте timedatectl команду:
$ timedatectl
Local time: Mon 2020-03-30 16:04:42 CEST
Universal time: Mon 2020-03-30 14:04:42 UTC
RTC time: Mon 2020-03-30 14:04:41
Time zone: Europe/Prague (CEST, +0200)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
Смена часового пояса
$ timedatectl set-timezone "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 подкоманду от имени root пользователя. Например:
# localectl set-locale LANG=en_US
Дополнительные ресурсы:
man localectl(1), man locale(7), и man locale.conf(5)
Настройка раскладки клавиатуры#
Настройки раскладки клавиатуры управляют раскладкой, используемой в текстовой консоли и графическом пользовательском интерфейсе.
Процедура:
Получите список доступных раскладок:
$ localectl list-keymaps
ANSI-dvorak
al
al-plisi
amiga-de
amiga-us
...
Отобразите текущий статус настроек раскладки клавиатуры:
$ localectl status
...
VC Keymap: us
...
Установите или измените системную раскладку по умолчанию, например:
# localectl set-keymap us
Дополнительные ресурсы:
man localectl(1), man locale(7), и man locale.conf(5)
Средства антивирусной защиты#
SberLinux не предоставляет антивирусного программного обеспечения. Необходимое программное обеспечение пользователь устанавливает самостоятельно.
SberLinux обеспечивает высокий уровень безопасности операционной системы и пакетов. По мере обнаружения проблем с безопасностью в различных приложениях SberLinux предоставляет обновленные пакеты таким образом, чтобы свести потенциальный риск к минимуму.
Настройка и управление сетевым доступом#
В этом разделе описываются различные варианты добавления соединений Ethernet.
Внимание
Все адреса хостов и доменные имена, использованные в этом разделе, приведены для примера. При выполнении команд замените все адреса и имена из примера в соответствии со структурой сети. Обратите внимание, что вывод команд также изменится.
Настройка сети и имени хоста в графическом режиме установки#
В окне Installation Summary нажмите [Network and Host Name].
В списке на левой панели выберите интерфейс. Детали отображаются на правой панели.
Переключите переключатель ВКЛ/ВЫКЛ, чтобы включить или отключить выбранный интерфейс.
Важно
Программа установки автоматически определяет локально доступные интерфейсы, их нельзя добавить или удалить вручную.
Нажмите "+", чтобы добавить виртуальный сетевой интерфейс, который может быть: Team, Bond, Bridge или VLAN. Нажмите "-" для удаления виртуального интерфейса. Нажмите Configure, чтобы изменить такие параметры, как IP-адреса, DNS-серверы или конфигурацию маршрутизации для существующего интерфейса (как виртуального, так и физического). Введите имя хоста для системы в поле Host Name.
Примечание
Имя хоста может быть либо полным доменным именем (FQDN) в формате hostname.domainname, либо коротким именем хоста без имени домена. Во многих сетях есть служба протокола динамической конфигурации хоста (DHCP), которая автоматически предоставляет подключенным системам доменное имя. Чтобы разрешить службе DHCP назначить доменное имя этому компьютеру, укажите только короткое имя хоста. Это значение localhost означает, что конкретное статическое имя хоста для целевой системы не настроено, а фактическое имя хоста установленной системы настраивается во время обработки конфигурации сети, например, с NetworkManager помощью DHCP или DNS.
О NetworkManager
Профили nm-initrd-generator имеют более низкий приоритет, чем профили автоматического подключения. Утилита nm-initrd-generator в NetworkManager генерирует и настраивает профили подключений с помощью экземпляра NetworkManager, запущенного на инициализированном диске оперативной памяти initrd загрузчика. Сгенерированные утилитой nm-initrd-Generator профили имеют более низкий приоритет автоматического подключения, чем приоритет автоматического подключения по умолчанию. Это позволяет сгенерированным сетевым профилям в initrd сосуществовать с пользовательской конфигурацией в учетной записи root по умолчанию.
NetworkManager представляет следующие возможности:
утилита nm-cloud-setup сохраняет адреса, добавленные извне;
вычисляет сроки истечения срока действия для элементов, настроенных на основе сообщений обнаружения соседей IPv6;
автоматически обновляет файл /etc/resolv.conf при изменении конфигурации;
не устанавливает несуществующие интерфейсы в качестве основных при активации связи;
настраивает основной интерфейс, даже если интерфейс не существует при активации привязки;
команда –print-config не печатает повторяющиеся записи;
подключаемый модуль ifcfg-rh считывает профили подключения InfiniBand P-Key без явного имени интерфейса;
утилита nmcli может удалять профиль подключения к порту связи из соединения;
отклоняет заявки на аренду DHCPv6, если на всех адресах не удается обнаружить дублирующийся адрес IPv6 (DAD);
ожидает подключения интерфейсов, прежде чем пытаться разрешить системное имя хоста на этих интерфейсах из DNS;
параметр no-aaaa используется для настройки параметров DNS на управляемых узлах с целью подавления запросов записей AAAA, вызванных stub resolver. Записи AAAA содержат полное доменное имя, время жизни пакета данных (TTL) и IP-адрес;
утилита nmcli может отключать IPv6.
Также:
Имена хостов могут содержать только буквенно-цифровые символы и "-" или ".". Имена хостов не могут начинаться или заканчиваться символами "-" и ".". Нажмите Apply, чтобы применить имя хоста к среде установщика.
Кроме того, в окне Network and Hostname существует возможность выбрать параметр Wireless option. Для этого нажмите Select network на правой панели, чтобы выбрать подключение Wi-Fi, при необходимости введите пароль и нажмите Done.
Настройка статического соединения Ethernet с помощью утилиты nmcli#
Ниже приведен пример процедуры, которая описывает добавление соединения Ethernet с помощью утилиты nmcli:
В приведенном примере используются следующие значения:
Статический адрес IPv4 — 192.0.2.1 с /24 маской подсети
Статический адрес IPv6 — 2001:db8:1::1 с /64 маской подсети
Шлюз IPv4 по умолчанию — 192.0.2.254
Шлюз IPv6 по умолчанию — 2001:db8:1::fffe
DNS-сервер IPv4 — 192.0.2.200
DNS-сервер IPv6 — 2001:db8:1:ffbb
Домен поиска DNS — example.ru
Процедура:
Добавьте новый профиль подключения NetworkManager для подключения Ethernet:
# nmcli connection **Add** con-name Example-Connection ifname enp7s0 type ethernet
Дальнейшие шаги изменяют созданный профиль подключения Example-Connection.
Установите IPv4-адрес:
# nmcli connection modify Example-Connection ipv4.addresses 192.0.2.1/24
Установите IPv6-адрес:
# nmcli connection modify Example-Connection ipv6.addresses 2001:db8:1::1/64
Установите способ подключения IPv4 и IPv6 manual:
# nmcli connection modify Example-Connection ipv4.method manual
Установите шлюзы IPv4 и IPv6 по умолчанию:
# nmcli connection modify Example-Connection ipv4.gateway 192.0.2.254
# nmcli connection modify Example-Connection ipv6.gateway 2001:db8:1::fffe
Задайте адреса DNS-серверов IPv4 и IPv6:
# nmcli connection modify Example-Connection ipv4.dns "192.0.2.200"
# nmcli connection modify Example-Connection ipv6.dns "2001:db8:1::ffbb"
Чтобы задать несколько DNS-серверов, укажите их через пробел и заключите в кавычки.
Установите домен поиска DNS для соединения IPv4 и IPv6:
# nmcli connection modify Example-Connection ipv4.dns-search example.ru
# nmcli connection modify Example-Connection ipv6.dns-search example.ru
Активируйте профиль подключения:
# nmcli connection up Example-Connectio
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13)
Этапы проверки:
Отображение состояния устройств и подключений:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp7s0 ethernet connected Example-Connection
Чтобы отобразить все настройки профиля подключения:
# 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
...
Используйте ping утилиту, чтобы убедиться, что этот хост может отправлять пакеты другим хостам.
Пропингуйте IP-адрес в той же подсети.
Для IPv4:
# ping 192.0.2.3
Для IPv6:
# ping 2001:db8:1::2
Если команда не удалась, проверьте параметры IP и подсети.
Пропингуйте IP-адрес в удаленной подсети. Для IPv4:
# ping 198.162.3.1
Для IPv6:
# ping 2001:db8:2::1
Если команда не удалась, пропингуйте шлюз по умолчанию, чтобы проверить настройки. Для IPv4:
# ping 192.0.2.254
Для IPv6:
# ping 2001:db8:1::fff3
Используйте host утилиту, чтобы убедиться, что разрешение имен работает. Например:
# host client.example.ru
Если команда возвращает какую-либо ошибку, например connection timed out или no servers could be reached, проверьте настройки DNS.
Действия по устранению неполадок
Если соединение не установлено или сетевой интерфейс переключается между состояниями вверх и вниз:
Убедитесь, что сетевой кабель подключен к хосту и коммутатору.
Проверьте, существует ли сбой связи только на этом хосте или также на других хостах, подключенных к тому же коммутатору, к которому подключен сервер.
Убедитесь, что сетевой кабель и сетевой интерфейс работают должным образом. Выполните действия по диагностике оборудования и замените неисправные кабели и сетевые карты.
Дополнительные ресурсы:
Справочные страницы: nm-settings(5), nmcli и nmcli(1).
Настройка динамического соединения Ethernet с помощью nmtui#
Данная утилита представляет собой текстовый пользовательский интерфейс и может использоваться для настройки и конфигурирования. Используйте nmtui для настройки соединения Ethernet с динамическим IP-адресом на хосте без графического интерфейса.
Процедура:
Если имя сетевого устройства, которое хотите использовать в соединении, неизвестно, отобразите доступные устройства:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp7s0 ethernet unavailable --
...
Введите nmtui:
# nmtui
Выберите Edit a connection и нажмите Enter.
Нажмите кнопку Add.
Выберите Ethernet из списка типов сети и нажмите Enter.
При необходимости введите имя создаваемого профиля NetworkManager.
Введите имя сетевого устройства в Device поле.
Нажмите OK кнопку, чтобы создать и автоматически активировать новое соединение.

Рисунок. Новое соединение
Нажмите Back кнопку, чтобы вернуться в главное меню.
Выберите Quit и нажмите Enter , чтобы закрыть nmtui приложение.
Проверка:
Отображение состояния устройств и подключений:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp7s0 ethernet connected Example-Connection
Показать все настройки профиля подключения:
# 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 предоставляет текстовый пользовательский интерфейс для NetworkManager. Используйте nmtui для настройки соединения Ethernet со статическим IP-адресом на хосте без графического интерфейса.
Процедура:
Если имя сетевого устройства, которое хотите использовать в соединении, неизвестно, отобразите доступные устройства:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp7s0 ethernet unavailable --
...
Начало nmtui:
# nmtui
Выберите Edit a connection и нажмите Enter.
Нажмите Add кнопку.
Выберите Ethernet из списка типов сети и нажмите Enter.
Необязательно: введите имя создаваемого профиля NetworkManager.
Введите имя сетевого устройства в Device поле.
Настройте параметры адресов 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.

Рисунок. Пример соединения Ethernet со статическими настройками IP-адреса
Нажмите OK кнопку, чтобы создать и автоматически активировать новое соединение.
Нажмите Back кнопку, чтобы вернуться в главное меню.
Выберите Quit и нажмите Enter, чтобы закрыть nmtui приложение.
Проверка:
Отобразятся состояния устройств и подключений:
# nmcli device status
DEVICE TYPE STATE CONNECTION
enp7s0 ethernet connected Example-Connection
Отобразятся все настройки профиля подключения:
# 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
...
Дополнительные ресурсы:
Справочные страницы: nm-settings(5), nmcli и nmcli(1).
Управление сетью с помощью системных ролей SberLinux#
network - с помощью этой роли можно настроить сетевые подключения на нескольких целевых машинах.
Роль network позволяет настраивать следующие типы интерфейсов:
Ethernet;
Bridge;
Bonded;
VLAN;
MacVLAN;
Infiniband.
Необходимые сетевые подключения для каждого хоста представлены в виде списка внутри network_connections переменной.
Предупреждение: Роль network обновляет или создает все профили подключения в целевой системе точно так, как указано в network_connections переменной. Поэтому network роль удаляет параметры из указанных профилей, если параметры присутствуют только в системе, но не в network_connections переменной.
В следующем примере показано, как применить роль, чтобы убедиться, что соединение Ethernet с требуемыми параметрами существует:
Пример playbook, применяющего сетевую роль для настройки Ethernet-соединения с требуемыми параметрами.
# SPDX-License-Identifier: BSD-3-Clause
---
- hosts: network-test
vars:
network_connections:
# Create one ethernet profile and activate it.
# The profile uses automatic IP addressing
# and is tied to the interface by MAC address.
- name: prod1
state: up
type: ethernet
autoconnect: yes
mac: "00:00:5e:00:53:00"
mtu: 1450
roles:
- sberlinux-system-roles.network
Запуск служб systemd во время загрузки#
Как системный администратор, определите, каким образом службы запускаются в системе. Для управления службами используйте systemctl утилиту командной строки для управления systemd системой и диспетчером служб или веб-консоль.
Включение или отключение служб#
Как системный администратор включите или отключите запуск службы при загрузке, и эти изменения применятся после перезагрузки. Для автоматического запуска службы при загрузке, включите эту службу. Если служба отключена, она не будет запускаться при загрузке, но существует возможность запустить ее вручную. Замаскируйте службу, чтобы ее нельзя было запустить вручную. Маскировка — это способ отключения службы, который сделает ее не доступной для использования, пока не будет задействована команда unmask, которая сделает службу снова доступной.
Предварительные условия:
Права root пользователя.
Служба, которую хотите включить, не должна быть замаскирована. Если есть замаскированный сервис, необходимо сначала размаскировать его:
# systemctl unmask service_name
Процедура:
Включите запуск службы при загрузке:
# systemctl enable service_name
Замените service_name на службу, которую хотите включить.
Также можно включить и запустить службу с помощью одной команды:
# systemctl enable --now service_name
Отключите запуск службы при загрузке:
# systemctl disable service_name
Замените service_name на службу, которую хотите отключить.
Замаскируйте службу, чтобы сделать службу непригодной для использования навсегда:
# systemctl mask service_name
Настройка безопасности системы#
Компьютерная безопасность — это защита компьютерных систем и их аппаратного обеспечения, программного обеспечения, информации и услуг от кражи, повреждения, нарушения работы и неправильного направления. Обеспечение компьютерной безопасности является важной задачей, особенно на предприятиях, которые обрабатывают конфиденциальные данные и осуществляют бизнес-транзакции.
В этом разделе рассматриваются только основные функции безопасности, которые можно настроить после установки операционной системы.
Включение службы межсетевого экрана firewalld#
Межсетевой экран — это система сетевой безопасности, которая отслеживает и контролирует входящий и исходящий сетевой трафик в соответствии с настроенными правилами безопасности. Межсетевой экран обычно устанавливает барьер между надежной защищенной внутренней сетью и другой внешней сетью.
Служба firewalld, обеспечивающая межсетевой экран в SberLinux, автоматически включается во время установки.
Чтобы включить 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 не включен и не запущен, переключитесь на root-пользователя, запустите 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#
Общий синтаксис для работы с правилами
firewall-cmd [опции] [зона] <правило>
Порядок следования параметров не важен.
где:
[опции] — дополнительные параметры для создаваемого правила, например –permanent — постоянное правило, то есть будет действовать после перезагрузки. Не обязательный. [зона] — по умолчанию, правила создаются для зоны public. Для работы с конкретной зоной ее необходимо указать, например, –zone=dmz. Не обязательный. <правило> — само правило. Чтобы правила применить, перечитайте их:
firewall-cmd --reload
Чтобы добавить порты: Откройте порт 80:
firewall-cmd --permanent --add-port=80/tcp
где ключ –permanent — добавляет постоянное правило, которое будет действовать после перезагрузки.
Чтобы добавить правило для определенной зоны:
Пропишите:
firewall-cmd --permanent --zone=external --add-port=80/tcp
Добавьте диапазон портов:
firewall-cmd --permanent --add-port=6500-6700/udp
Добавьте несколько правил одной командой:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
Добавление сервиса
Использование служб, вместо портов, может повысить удобство управления правилами за счет объединения нескольких портов в одну службу.
Посмотрите список доступных служб:
firewall-cmd --get-services
Разрешите порт, например, для сервиса ntp:
firewall-cmd --permanent --add-service=ntp
Создайте собственную службу:
firewall-cmd --permanent --new-service=name-service
Где name-service — это произвольное имя создаваемой службы.
Добавьте порт, например TCP 2200 к службе:
firewall-cmd --permanent --service=name-service --add-port=2200/tcp
Задайте описание для удобства:
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
Теперь созданную службу можно использовать для создания правил, например:
firewall-cmd --permanent --add-service=name-service
Правило Rich-Rule
Правило rich-rule позволяет создавать правила с условиями. Например:
Разрешите службу http с условием, что запросы будут с определенных IP-адресов (например, подсети 000.000.0):
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="000.000.0.0/24" service name="http" accept'
Или разрешите службу для конкретного порта:
firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="000.000.0.0/24" port port="5038" protocol="tcp" accept'
Чтобы заблокировать подсеть, воспользуйтесь командой:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='000.000.1.0/24' reject"
Список правил с условиями отобразите командой:
firewall-cmd --list-rich-rules
Удаление правил
Аналогично созданию, но вместо add введите remove, например –remove-port (удалить порт) или –remove-service (удалить службу).
Удалите правило для открытия 80-о порта:
firewall-cmd --permanent --remove-port=80/tcp
Управление зонами
Все правила в firewalld могут быть разбиты по зонам. Для каждой свой набор правил и свои сетевые интерфейсы. Это нужно использовать, если необходимо для разных сетевых адаптеров создать разные по строгости правила.
Просмотрите список всех имеющихся зон:
firewall-cmd --list-all-zones
Просмотрите список используемых зон:
firewall-cmd --get-active-zones
Информация о конкретной зоне
Введите:
firewall-cmd --list-all --zone=public
Создайте правило для зоны public:
firewall-cmd --permanent --zone=public --add-port=80/tcp
Добавьте сетевой интерфейс в зону:
firewall-cmd --permanent --zone=public --remove-interface=ens34
firewall-cmd --permanent --zone=internal --add-interface=ens34
Перед этим необходимо удалить адаптер из текущей зоны.
Задайте действие по умолчанию для зоны:
firewall-cmd --permanent --zone=public --set-target=DROP
Создайте новую зону:
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:
yum install firewalld firewall-config
Запустите службу:
systemctl start firewalld
Не применяются правила.
Причина: не введена команда перезапуска правил.
Перечитайте правила:
firewall-cmd --reload
Перезапустите систему со сбросом подключений:
firewall-cmd --complete-reload
Или перезапустите сетевые службы:
systemctl restart network
Перезагрузите машину:
shutdown -r now
Управление основными настройками SELinux#
Security-Enhanced Linux (SELinux) — это дополнительный уровень безопасности системы, определяющий, какие процессы могут получать доступ к тем или иным файлам, каталогам и портам. Эти разрешения определены в политиках SELinux. Политика — это набор правил, которыми руководствуется механизм безопасности SELinux.
SELinux имеет два возможных состояния:
1 Включено. 2 Выключено.
Когда SELinux включен, он работает в одном из следующих режимов:
Включен:
Принудительный
Разрешающий
В принудительном режиме SELinux применяет загруженные политики. SELinux запрещает доступ на основе правил политики SELinux и разрешает только явно разрешенные взаимодействия. Принудительный режим является самым безопасным режимом SELinux и является режимом по умолчанию после установки.
В разрешающем режиме SELinux не применяет загруженные политики. SELinux не запрещает доступ, но сообщает о действиях, нарушающих правила, в /var/log/audit/audit.log журнал. Разрешающий режим является режимом по умолчанию во время установки. Разрешающий режим также полезен в некоторых специфических случаях, например, при устранении неполадок.
SELinux ограничивает udftools сервис.
Поскольку служба systemd-socket-proxyd требует особого использования ресурсов, в selinux-policy пакеты добавлена политика с необходимыми правилами. В результате служба работает в своем домене SELinux.
Обеспечение требуемого состояния SElinux#
По умолчанию SELinux работает в принудительном режиме. Однако в определенных сценариях можно установить для SELinux разрешающий режим или даже отключить его.
Примечание
Рекомендуем поддерживать систему в принудительном режиме. В целях отладки установите SELinux в разрешающий режим.
Следуйте этой процедуре, чтобы изменить состояние и режим SELinux в системе.
Процедура
Отобразите текущий режим SELinux:
$ getenforce
Чтобы временно установить SELinux:
Для принудительного режима:
# setenforce
Для разрешительного режима:
# setenforce Permissive
Примечание
После перезагрузки режим SELinux устанавливается на значение, указанное в файле конфигурации /etc/selinux/config.
Настройка политики для SELinux, функционирующего в принудительном режиме
В следующих разделах описываются файлы конфигурации и политики SELinux, а также связанные файловые системы, расположенные в /etc/ каталоге.
Конфигурационный файл /etc/sysconfig/selinux
Существует два способа настроить SELinux в SberLinux: с помощью средства настройки уровня безопасности (system-config-securitylevel) или вручную отредактировав файл конфигурации (/etc/sysconfig/selinux).
Этот /etc/sysconfig/selinux файл является основным конфигурационным файлом для включения или отключения SELinux, а также для настройки того, какую политику применять в системе и как ее применять.
Примечание
Файл /etc/sysconfig/selinux содержит символическую ссылку на фактический файл конфигурации /etc/selinux/config.
Ниже объясняется полное подмножество параметров, доступных для настройки:
SELINUX=<enforcing|permissive|disabled> — Определяет состояние SELinux верхнего уровня в системе.
enforcing — Политика безопасности SELinux применяется принудительно.
permissive — Система SELinux выводит предупреждения, но не применяет политику. Это полезно для целей отладки и устранения неполадок. В разрешающем режиме будет регистрироваться больше отказов, так как субъекты смогут продолжить действия, в противном случае запрещенные в принудительном режиме. Например, обход дерева каталогов приведет к появлению нескольких avc: denied сообщений для каждого прочитанного уровня каталога, где ядро в принудительном режиме остановило бы начальный обход и предотвратило появление дальнейших сообщений об отказе.
disabled — SELinux полностью отключен. Перехваты SELinux отключаются от ядра, а псевдофайловая система не регистрируется.
Важно
Действия, выполняемые при отключенном SELinux, могут привести к тому, что файловая система больше не будет иметь надлежащего контекста безопасности, определенного политикой. Запуск fixfiles relabel перед включением SELinux приведет к переименованию файловой системы, чтобы SELinux работал правильно при включении. Для получения дополнительной информации обратитесь к fixfiles(8) справочной странице. Дополнительные пробелы в конце строки конфигурации или в виде дополнительных строк в конце файла могут привести к неожиданному поведению. Рекомендуется удалить ненужные пробелы.
SELINUXTYPE=<targeted|strict> — Указывает, какая политика в данный момент применяется SELinux.
targeted — Защищены только целевые сетевые демоны.
Важно
Следующие демоны защищены целевой политикой по умолчанию: dhcpd, httpd, named, nscd, ntpd, portmap, snmpd, squid, и syslogd. Остальная часть системы работает в unconfined_t домене.
Файлы политик для этих демонов можно найти в файле /etc/selinux/targeted/src/policy/domains/program.
Принудительное применение политики для этих демонов можно включить или выключить, используя логические значения, управляемые средством настройки уровня безопасности (system-config-securitylevel). Переключение логического значения для целевого демона отключает переход политики для демона, который предотвращает, например, init переход dhcpd из unconfined_t домена в домен, указанный в dhcpd. Домен unconfined_t позволяет субъектам и объектам с этим контекстом безопасности работать под стандартной защитой SberLinux.
strict — Полная защита SELinux для всех демонов. Контексты безопасности определяются для всех субъектов и объектов, и каждое отдельное действие обрабатывается сервером принудительного применения политики.
Каталог /etc/selinux/
Каталог /etc/selinux/ является основным местом расположения всех файлов политики, а также основного файла конфигурации. В следующем примере показано примерное содержимое /etc/selinux/каталога:
-rw-r--r-- 1 root root 448 Sep 22 17:34 config
drwxr-xr-x 5 root root 4096 Sep 22 17:27 strict
drwxr-xr-x 5 root root 4096 Sep 22 17:28 targeted
Два подкаталога, strict/ и targeted/, являются конкретными каталогами, в которых содержатся файлы политики с одинаковыми именами (strict и targeted). Для получения дополнительной информации о политике SELinux и конфигурации политики обратитесь к rhel-selg.
Чтобы режим SELinux сохранялся при перезагрузке, измените SELINUX переменную в /etc/selinux/config файле конфигурации.
Например, чтобы переключить SELinux в принудительный режим:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
...
Предупреждение: Отключение SELinux снижает безопасность системы. Избегайте отключения SELinux с помощью SELINUX=disabled параметра в /etc/selinux/config файле, поскольку это может привести к утечке памяти и состояниям гонки (race condition), когда задействовано несколько инструкций процессора, вызывающих Kernel panic (критическую ошибку ядра). Вместо этого отключите SELinux, добавив selinux=0 параметр в командную строку ядра.
Начало работы с управлением учетными записями пользователей#
Управление учетными записями и группами с помощью инструментов командной строки#
Каждому пользователю присваивается уникальный числовой идентификационный номер, называемый идентификатором пользователя (UID). Аналогично, каждая группа связана с идентификатором группы (GID). Пользователь, создающий файл, также является владельцем и владельцем группы этого файла. Файлу назначаются отдельные разрешения на чтение, запись и выполнение для владельца, группы и всех остальных. Владелец файла может быть изменен только root пользователем, а права доступа могут быть изменены как root пользователем, так и владельцем файла.
SberLinux резервирует идентификаторы пользователей и групп ниже 1000 для системных пользователей и групп. По умолчанию Диспетчер пользователей не отображает системных пользователей. Зарезервированные идентификаторы пользователей и групп документируются в пакете установки. Чтобы просмотреть документацию, используйте эту команду:
cat /usr/share/doc/setup*/uidgid
Рекомендуемая практика - назначать идентификаторы, начинающиеся с 5000, которые еще не были зарезервированы, поскольку зарезервированный диапазон может увеличиться в будущем. Чтобы идентификаторы, назначаемые новым пользователям по умолчанию, начинались с 5000, измените директивы UID_MIN и GID_MIN в файле: /etc/login.defs, как представлено на примере:
[file contents truncated]
UID_MIN 5000
[file contents truncated]
GID_MIN 5000 >[file contents truncated]
Важно
Для пользователей, созданных до изменения UID_MIN GID_MIN директив, идентификаторы UID по-прежнему будут начинаться со значения по умолчанию 1000. Даже с новыми идентификаторами пользователей и групп, начинающимися с 5000, рекомендуется не повышать зарезервированные системой идентификаторы выше 1000, чтобы избежать конфликта с системами, которые сохраняют ограничение в 1000.
Список всех групп хранится в конфигурационный файл /etc/group.
Теневые пароли
В средах с несколькими пользователями очень важно использовать теневые пароли, предоставляемые пакетом shadow- utils, для повышения безопасности системных файлов аутентификации. По этой причине программа установки по умолчанию включает теневые пароли.
Ниже приведен список преимуществ теневых паролей по сравнению с традиционным способом хранения паролей в системах на базе UNIX:
Теневые пароли повышают безопасность системы, перемещая зашифрованные хеши паролей из общедоступного файла /etc/passwd в файл /etc/shadow, доступный для чтения только root пользователю.
Теневые пароли хранят информацию о старении пароля.
Теневые пароли позволяют применять некоторые политики безопасности, установленные в /etc/login.defs файле.
Большинство утилит, предоставляемых пакетом shadow-utils, работают должным образом независимо от того, включены или нет теневые пароли. Но поскольку информация о старении пароля хранится исключительно в файле /etc/shadow, некоторые утилиты и команды не будут работать без предварительного включения теневых паролей:
Утилита chage для настройки параметров старения пароля.
Утилита gpasswd для администрирования /etc/group файла.
Команда usermod с параметром -e, –expiredate или -f, –inactive.
Команда useradd с параметром -e, –expiredate или -f, –inactive.
Добавление новых учетных записей с помощью командной строки#
Централизованной идентификации и аутентификации пользователей не осуществляется.
Чтобы добавить нового пользователя в систему, зайдите как пользователь root и введите следующее в командной строке:
useradd options username
где options - это параметры командной строки, как описано в таблице ниже.
По умолчанию useradd команда создает заблокированную учетную запись пользователя. Чтобы разблокировать учетную запись, выполните следующую команду под root, чтобы назначить пароль:
passwd username
При желании установите политику устаревания паролей с помощью параметров командной строки useradd, которые представлены в таблице ниже.
Таблица. Общие параметры командной строки useradd
Вариант |
Пояснение |
|---|---|
-с comment |
Комментарий может быть заменен любой строкой. Этот параметр обычно используется для указания полного имени пользователя. |
-d home_directory |
Домашний каталог , который будет использоваться вместо стандартного /home/username. |
-e date |
Дата отключения учетной записи в формате YYYY-MM-DD. |
-f days |
Количество дней после истечения срока действия пароля до тех пор, пока учетная запись не будет отключена. Если задано значение 0, учетная запись отключается сразу же после истечения срока действия пароля. Если задано значение -1, учетная запись не будет отключена после истечения срока действия пароля. |
-g group_name |
Имя группы или номер для группы пользователя по умолчанию (основной). Группа должна существовать до того, как она будет указана здесь. |
-G group_list |
Список дополнительных (дополнительных, отличных от стандартных) названий групп или номеров групп, разделенных запятыми, членом которых является пользователь. Группы должны существовать до того, как они будут указаны здесь. |
-m |
Создайте домашний каталог, если он не существует. |
-M |
Не создавайте домашний каталог. |
-N |
Не создавайте личную группу пользователя для этого пользователя. |
-p password |
Пароль, зашифрованный с помощью функции crypt. |
-r |
Создайте системную учетную запись с идентификатором пользователя меньше 1000 и без домашнего каталога. |
-s |
Имя оболочки входа пользователя, которая по умолчанию имеет пустое значение. |
-u uid |
Числовое значение идентификатора пользователя, которое должно быть неотрицательным, уникальным и превышать 999 |
Добавление новой группы пользователей с помощью командной строки#
Чтобы добавить новую группу в систему, введите следующее в командной строке, как пользователь root:
groupadd options group_name
Где options - это параметры командной строки, как описано в таблице ниже.
Таблица. Общие параметры командной строки groupadd
Вариант |
Описание |
|---|---|
-f, --force |
При использовании с -g, --gid и gid уже существует, поэтому groupadd выберет другой уникальный gid для группы. |
-g, --gid |
Идентификатор группы, который должен быть уникальным и превышать 999. |
-K, --key key = value |
Переопределяет /etc/login.defs значений по умолчанию. |
-o, --non-unique |
Позволяет создавать группы с повторяющимся GID. |
-p, --password |
Зашифрованный пароль для новой группы, возвращаемый функцией crypt. |
-r |
Создайте системную группу с идентификатором GID меньше 1000 |
Добавление существующего пользователя в существующую группу
Используйте usermod утилиту для добавления уже существующего пользователя в уже существующую группу.
Различные варианты usermod оказывают различное влияние на основную группу пользователя и на его или ее дополнительные группы.
Чтобы переопределить основную группу пользователя, выполните следующую команду как пользователь root:
~] usermod -g group_name
Чтобы переопределить дополнительные группы пользователя, выполните следующую команду, как пользователь root:
~] usermod -G group_name1,group_name2,... user_name
Обратите внимание, что в этом случае все предыдущие дополнительные группы пользователя заменяются новой группой или несколькими новыми группами.
Чтобы добавить одну или несколько групп в дополнительные группы пользователя, выполните одну из следующих команд, как root:
~] usermod -aG group_name1,group_name2,... user_name
~] usermod --append -G group_name1,group_name2,... user_name
Внимание
Обратите внимание, что в этом случае новая группа добавляется к текущим дополнительным группам пользователя
Создание dump ядра после сбоя для последующего анализа#
Служба kdump устанавливается и активируется по умолчанию в новых установках SberLinux. В следующих разделах объясняется, что такое kdump и как установить kdump, если он не включен по умолчанию.
Настройка использования памяти kdump и целевого местоположения из командной строки#
Оценка размера kdump
При планировании и создании среды kdump - важно знать, сколько места требуется для файла аварийного dump.
Команда makedumpfile --mem-usage оценивает, сколько места требуется файлу аварийного dump. Он генерирует отчет об использовании памяти. Отчет поможет определить уровень dump и определить, какие страницы можно безопасно исключить.
Сценарий:
Выполните следующую команду, чтобы сгенерировать отчет об использовании памяти:
makedumpfile --mem-usage /proc/kcore
TYPE PAGES EXCLUDABLE DESCRIPTION
-------------------------------------------------------------
ZERO 501635 yes Pages filled with zero
CACHE 51657 yes Cache pages
CACHE_PRIVATE 5442 yes Cache pages + private
USER 16301 yes User process pages
FREE 77738211 yes Free pages
KERN_DATA 1333192 no Dumpable kernel data
Примечание
Команда makedumpfile --mem-usage сообщает о требуемой памяти в страницах. Необходимо рассчитать размер используемой памяти в зависимости от размера страницы ядра.
Настройка использования памяти kdump
Память резервируется во время загрузки системы. Размер памяти настраивается в файле конфигурации system Grand Unified Bootloader (GRUB) 2. Размер памяти зависит от значения параметра crashkernel, указанного в файле конфигурации, и размера системной физической памяти.
Параметр crashkernel может быть определен несколькими способами. Укажите значение crashkernel или настройте параметр auto. Параметр crashkernel=auto резервирует память автоматически, в зависимости от общего объема физической памяти в системе. При настройке ядро автоматически резервирует соответствующий объем требуемой памяти для ядра захвата. Это помогает предотвратить ошибки нехватки памяти (ООМ).
Примечание
Автоматическое выделение памяти для kdump варьируется в зависимости от аппаратной архитектуры системы и доступного объема памяти. Если в системе меньше минимального порога памяти для автоматического выделения, настройте объем зарезервированной памяти вручную.
Предварительные условия:
Права root пользователя.
Выполнены требования к kdump конфигурациям и целям.
Сценарий:
Отредактируйте /etc/default/grub файл.
Установите crashkernel= параметр. Например, чтобы зарезервировать 128 Мбайт памяти, используйте следующее:
crashkernel=128 М
Установите объем зарезервированной памяти в переменную в зависимости от общего объема установленной памяти. Синтаксис для резервирования памяти в переменную crashkernel=
crashkernel= 512M-2G: 64M, 2G-:128M
Приведенный выше пример резервирует 64 Мбайт памяти, если общий объем системной памяти составляет от 512 Мбайт до 2 Гбайт. Если общий объем памяти превышает 2 Гбайт, резервируется 128 Мбайт.
Некоторые системы требуют резервирования памяти с определенным фиксированным смещением, поскольку crashkernel резервирование выполняется очень рано, и требуется зарезервировать некоторую область для специального использования. Если задано смещение, то зарезервированная память начинается с него. Чтобы компенсировать зарезервированную память, используйте следующий синтаксис:
crashkernel=128M@16M
В приведенном выше примере kdump резервируется 128 Мбайт памяти, начиная с 16 Мбайт (физический адрес 0x01000000). Если параметр offset установлен в 0 или полностью опущен, kdump зарезервированная память автоматически смещается. Используйте этот синтаксис при настройке резервирования переменной памяти. В этом случае смещение всегда указывается последним (например, crashkernel=512M-2G:64M,2G-:128M@16M).
Используйте следующую команду для обновления файла конфигурации GRUB2:
grub2-mkconfig -o /boot/grub2/grub.cfg
Примечание
Альтернативный способ настроить память для kdump - добавить crashkernel=<SOME_VALUE> параметр к kernelopts переменной с помощью команды grub2-editenv, которая обновит все загрузочные записи. Или же используйте grubby утилиту для обновления одной загрузочной записи, нескольких загрузочных записей или всех загрузочных записей.
kdump с использованием системных ролей#
Параметры, используемые для системных ролей SberLinux dump ядра, следующие:
Переменная роли |
Описание |
|---|---|
kdump_path |
Путь, к которому записан vmcore. Если значение kdump_target не равно null, то путь указан относительно этой цели dump. В противном случае это должен быть абсолютный путь в корневой файловой системе. |
Можно установить основные параметры dump ядра на нескольких системах, используя системную роль dump ядра, запустив Ansible playbook.
Важно
Роль dump ядра полностью заменяет конфигурацию kdump управляемых хостов, заменяя файл /etc/kdump.conf. Кроме того, если применяется роль dump ядра, все предыдущие настройки kdump также заменяются, даже если они не указаны в переменных роли, путем замены /etc/sysconfig/kdump файла.
Предварительные условия:
Пакет Ansible Core установлен на управляющей машине.
Пакет sberlinux-system-roles установлен в системе. Запустите playbook.
Файл inventory в котором перечислены системы. Разверните на них kdump.
Сценарий:
Создайте новый файл playbook.yml со следующим содержимым:
--- - hosts: kdump-test
vars:
kdump_path: /var/crash
roles:
- sberlinux-system-roles.kdump
При необходимости проверьте синтаксис playbook.
ansible-playbook --syntax-check playbook.yml
Запустите playbook в инвентарном файле:
ansible-playbook -i inventory_file /path/to/file/playbook.yml
Устранение неполадок с помощью лог-файлов#
Службы, обрабатывающие сообщения системного журнала#
Следующие две службы обрабатывают syslog сообщения:
Демон systemd-journald.
Служба Rsyslog.
Демон systemd-journald собирает сообщения из различных источников и пересылает их Rsyslog для дальнейшей обработки. Демон systemd-journald собирает сообщения из следующих источников:
из ядра;
на ранней стадии процесса загрузки;
из стандартного вывода и вывода ошибок демонов при их запуске;
из Syslog.
Служба Rsyslog сортирует сообщения syslog по типу и приоритету и записывает их в файлы в каталоге /var/log. В каталоге /var/log постоянно хранятся сообщения журнала.
Подкаталоги для хранения сообщений системного журнала#
Следующие подкаталоги в /var/log каталоге хранят syslog сообщения:
/var/log/messages - все syslog сообщения, подкаталог содержит глобальный системный журнал, в котором пишутся сообщения с момента запуска системы, от ядра, различных служб, обнаруженных устройствах, сетевых интерфейсов и много другого;
/var/log/secure - сообщения и ошибки, связанные с безопасностью и аутентификацией;
/var/log/maillog - сообщения и ошибки, связанные с почтовым сервером;
/var/log/cron - файлы журналов, связанные с периодически выполняемыми задачами;
/var/log/boot.log - файлы журналов, связанные с запуском системы.
Чтобы гарантировать, что журналы с различных компьютеров в среде записываются централизованно на сервере ведения журнала, можно настроить приложение Rsyslog для записи журналов, соответствующих определенным критериям, из клиентской системы на сервер.
Служба ведения журнала Rsyslog:
Приложение Rsyslog в сочетании со systemd-journald службой обеспечивает локальную и удаленную поддержку ведения журнала в SberLinux. Демон rsyslogd непрерывно считывает syslog сообщения, полученные systemd-journald службой из журнала. rsyslogd затем фильтрует и обрабатывает эти syslog события и записывает их в rsyslog файлы журналов или пересылает другим службам в соответствии со своей конфигурацией.
Демон rsyslogd также обеспечивает расширенную фильтрацию, защищенную от шифрования ретрансляцию сообщений, модули ввода и вывода и поддержку транспортировки с использованием протоколов TCP и UDP.
Файл /etc/rsyslog.conf является основным файлом конфигурации для rsyslog, в нем можно указать правила, в соответствии с которыми rsyslogd обрабатывает сообщения. Можно классифицировать сообщения по их источнику, теме (объекту) и срочности (приоритету), а затем назначить действие, которое должно быть выполнено, когда сообщение соответствует этим критериям.
В файле /etc/rsyslog.conf, можно просмотреть список файлов журналов, поддерживаемых rsyslogd. Большинство файлов журнала находятся в /var/log/ каталоге. Некоторые приложения, такие как httpd и samba, хранят свои файлы журналов внутри /var/log/ подкаталога.
Дополнительные источники:
Справочные страницы: rsyslogd(8) и rsyslog.conf(5). Документация, установленная вместе с rsyslog-doc пакетом в /usr/share/doc/rsyslog/html/index.html файле.
Подробнее о настройках журналов см. в разделах «Подкаталоги для хранения сообщений системного журнала», «Просмотр логов с помощью командной строки» и «Начало работы с ведением журнала ядра».
Настройка Rsyslog в SberLinux#
Сервис Rsyslog?
Rsyslog - расширяемый сервис для управления логами с разнообразными возможностями. Среди его возможностей можно отметить поддержку фильтрации контента, а также передачу логов по сетям.
Основные возможности Rsyslog:
многопоточность;
TCP, SSL, TLS, RELP;
поддержка MySQL, PostgreSQL;
фильтрация журналов;
полностью настраиваемый формат вывода.
Как происходит логирование?
Все программы SberLinux ведут лог путем отправки сообщений об ошибках или своем состоянии с помощью syslog или просто записывая все сообщения в файл, который будет находиться в каталоге /var/log/.
Но важное значение имеет уровень подробности логирования. Можно настраивать подробность в каждой отдельной программе или с помощью syslog. Это поможет уменьшить использование дискового пространства для хранения логов.
Например, ядро определяет уровни (приоритеты) логов:
KERN_EMERG - система неработоспособна;
KERN_ALERT - нужно немедленно принять меры;
KERN_CRIT - критическая ошибка;
KERN_ERR - обычная ошибка;
KERN_WARNING - предупреждение;
KERN_NOTICE - замечание;
KERN_INFO - информационное сообщение;
KERN_DEBUG - сообщения отладки.
Настройка Rsyslog в SberLinux
Все настройки Rsyslog находятся в файле /etc/rsyslog.conf и других конфигурационных файлах из /etc/rsyslog.d/. Можно посмотреть, существуют ли у вас эти файлы, выполнив:
ls /etc/rsys*
rsyslog.conf rsyslog.d/
Основной конфигурационный файл - /etc/rsyslog.conf, в нем подключены все файлы из папки /etc/rsyslog.d/ с помощью директивы IncludeConfig в самом начале файла:
IncludeConfig /etc/rsyslog.d/*.conf
В этих файлах могут содержаться дополнительные настройки, например, аутентификация на Rsyslog сервере. В главном конфигурационном файле содержится много полезных настроек. Обычно он обеспечивает управление локальными логами по умолчанию, но для работы через сеть нужно добавить настройки.
Синтаксис конфигурационного файла прост:
$ переменная значение
Все директивы начинаются со знака доллара, содержат имя переменной, а дальше связанное с ней значение. Так выглядит каждая строка конфигурационного файла. В его первой части размещены общие настройки программы и загрузка модулей. Во второй - ваши правила сортировки и фильтрации лог файлов.
ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support $ModLoad immark # provides --MARK-- message capability
provides UDP syslog reception
$ModLoad imudp $UDPServerRun 514
provides TCP syslog reception
$ModLoad imtcp $InputTCPServerRun 514
В этом участке загружаются все необходимые модули программы. Существуют четыре типа модулей:
Модули ввода - можно рассматривать, как способ сбора информации из различных источников, начинаются с im.
Модули вывода - позволяют отправлять сообщения в файлы или по сети, или в базу данных, имя начинается на om;
Модули фильтрации - позволяют фильтровать сообщения по разным параметрам, начинаются с fm;
Модули parsing - предоставляют расширенные возможности для синтаксического анализа сообщения, начинаются с pm. Сначала загружается модуль imuxsock, который позволяет сервису получать сообщения из сокетов, а последующий загружаемый модуль imklog получает сообщения ядра. Модуль mark позволяет маркировать соединения или выводить сообщения о том, что syslog все еще работает. Например, можно дать указания rsyslog выводить сообщения каждые 20 минут:
MarkMessagePeriod 1200
Далее идут глобальные директивы:
ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
В этой строке указывается, что нужно использовать стандартный формат хранения времени, в секундах с 1970 года.
Дальше следует набор прав разрешений для файлов журналов, которые будут созданы в системе:
FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
После создания этих файлов их права можно менять, на те, которые необходимы.
Правила сортировки логов
Набор правил по умолчанию:
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
Каждое правило имеет свой синтаксис, сначала идет источник и приоритет, затем действие. Если источник и приоритет совпадают, сообщение отправляется в указанный файл. Например, можно отправить больше сообщений в лог системы /var/messages:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
В этой строке выберите все сообщения уровня info, кроме mail, authpriv и cron. Шаблон mail.none означает, что ни один уровень сообщений не нужно логировать. Соответственно, конструкция *.info - означает, что логируются сообщения от всех источников, но только с уровнем info, а (точка) . - означает все сообщения, со всеми уровнями.
Источник и приоритет нечувствительны к регистру. Также приоритеты уровней error, warn и panic больше не используются, так как считаются устаревшими.
События в системном журнале группируются по источникам. В целом, в качестве источников можно использовать:
auth;authpriv;cron;daemon;kern;lpr;mail;mark;news;security(эквивалентноauth);syslog;user;uucp;local0 ... local7.
Уровень событий задается приоритетом. А в качестве приоритетов можно применить:
emerg(раньшеpanic);alert;crit;error(раньшеerr);warn(раньшеwarning);notice;info;debug.
Для фильтрации логов могут использоваться не только источник и приоритет, но и более сложные выражения на основе условий и сравнений.
Можно выполнять фильтрацию сообщений с помощью синтаксиса:
:поле, сравнение, "значение" путь_к_файлу
В качестве операции сравнения можно использовать такие варианты:
contains — поле содержит указанное значение;
isequal — поле должно быть идентичным значению;
startswith — поле должно начинаться со значения;
regex — сравнивает поле с регулярным выражением.
Например, отфильтруйте сообщения только от определенной программы:
:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop
Кроме того, можно использовать более простой синтаксис, в виде выражения if. Вот основной синтаксис:
if $поле сравнение 'значение' then файл
Здесь используются те же самые компоненты. Например:
if $syslogtag == 'giomanager' then /var/log/giomanager.log
Настройка syslog для удаленного логирования
Чтобы отправить лог на удаленный сервер, нужно указать @ и ip адрес удаленной машины, на которой запущен rsyslog:
*.info;mail.none;authpriv.none;cron.none @xx.xx.xx.xx:514
Где 514 - это порт, на котором осуществляется rsyslog. Настройка rsyslog на прием логов заключается в запуске сервиса с модулями imtcp и imudp.
Чтобы получить логи с определенной машины, отфильтровать их из общего потока с помощью фильтров, выполните:
if $fromhost-ip contains '192.168.1.10' then /var/log/proxyserver.log
Без фильтров, сообщения с разных машин будут писаться в один общий лог системы Sberlinux в зависимости от того как они будут распределены.
Просмотр логов с помощью командной строки#
Журнал - это компонент systemd, который помогает просматривать файлы журналов и управлять ими. Он решает проблемы, связанные с традиционным ведением журнала, тесно интегрирован с остальной частью системы и поддерживает различные технологии ведения журнала и управление доступом к файлам журнала.
Используйте команду journalctl для просмотра сообщений в системном журнале с помощью командной строки, например:
$ journalctl -b | grep kvm
May 15 11:31:41 localhost.localdomain kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
May 15 11:31:41 localhost.localdomain kernel: kvm-clock: cpu 0, msr 76401001, primary cpu clock
…
В таблицах ниже представлены команды для просмотра системной информации, информации о конкретных услугах и журналы, связанные с конкретными загрузками.
Таблица. Просмотр системной информации
Команда |
Описание |
|---|---|
journalctl |
Показывает все собранные записи журнала. |
journalctl FILEPATH |
Показывает журналы, связанные с определенным файлом. Например, команда journalctl /dev/sda отображает журналы, связанные с файловой системой /dev/sda. |
journalctl -b |
Показывает журналы для текущей загрузки. |
journalctl -k -b -1 |
Показывает журналы ядра для текущей загрузки |
Таблица. Просмотр информации о конкретных услугах
Команда |
Описание |
|---|---|
journalctl -b _SYSTEMD_UNIT=foo |
Фильтры регистрируются, чтобы увидеть те, которые соответствуют сервису "foo"systemd. |
journalctl -b _SYSTEMD_UNIT=foo _PID=number |
Эта команда показывает журналы для этого совпадения systemd-units foo и PID number. |
journalctl -b _SYSTEMD_UNIT=foo _PID=number + _SYSTEMD_UNIT=foo1 |
Разделитель + (плюс) объединяет два выражения в логическое ИЛИ. Например, эта команда показывает все сообщения от процесса службы foo со знаком PID плюс все сообщения от службы foo1 (от любого из ее процессов). |
journalctl -b _SYSTEMD_UNIT=foo _SYSTEMD_UNIT=foo1 |
Эта команда показывает все записи, соответствующие любому выражению и относящиеся к одному и тому же полю. Здесь эта команда показывает журналы, соответствующие systemd-unit foo или systemd-unit foo1 |
Таблица. Просмотр журналов, связанных с конкретными загрузками
Команда |
Описание |
|---|---|
journalctl --list-boots |
Показывает табличный список номеров загрузки, их идентификаторов и временных меток первого и последнего сообщения, относящихся к загрузке. Используйте идентификатор в следующей команде для просмотра подробной информации. |
journalctl --boot=ID _SYSTEMD_UNIT=foo |
Отображает информацию об указанном идентификаторе загрузки |
Об устранении неполадок с помощью лог-файлов подробнее в разделе «Устранение неполадок с помощью лог-файлов».
Оболочки и инструменты командной строки#
Relax and Recover (ReaR) полностью поддерживается на 64-разрядной архитектуре. Базовая функциональность Relax and Recover (ReaR) полностью поддерживается rear версией пакета 2.6-9.el8 или более поздней. Резервное копирование и восстановление логических разделов (LPAR) на данный момент не поддерживается. ReaR поддерживает сохранение и восстановление структуры диска только на устройствах хранения данных с расширенным количеством ключей (ECKD) прямого доступа (DASD). Для этой цели не поддерживаются DASD-диски с фиксированным доступом (FBA) и диски SCSI, подключенные по протоколу Fibre Channel (FCP). В настоящее время доступен единственный метод вывода - начальная загрузка программы (IPL), который создает ядро и начальный диск оперативной памяти (initrd), совместимые с zIPL загрузчиком.
Управление программными пакетами#
Программные пакеты в SberLinux поставляются в виде rpm-пакетов или модулей (коллекций rpm-пакетов) через репозитории BaseOS и AppStream.
Репозиторий BaseOS#
BaseOS – это репозиторий, который содержит базовый набор программных пакетов, обеспечивающий основную функциональность операционной системы. Его содержимое доступно в виде rpm-пакетов.
Репозиторий AppStream#
Репозиторий AppStream содержит дополнительные приложения пользовательского пространства, языки различных сред выполнения, базы данных для поддержки различных рабочих нагрузок и пользовательских сценариев.
Примечание
AppStream – это интерфейс, обеспечивающий стандартизацию спецификации машиночитаемых метаданных программного обеспечения, а также инструменты их проверки и диагностики. Представляет собой каталог, содержащий метаинформацию о каждой версии модуля или программного пакета в XML или YAML формате.
Пакеты AppStream доступны в одном из двух форматов: rpm и модули (расширение формата rpm).
Модуль представляет собой набор программных пакетов, составляющих логическую единицу (например, приложение, его зависимости (библиотеки), набор дополнительных инструментов и документацию). Эти пакеты создаются, тестируются и выпускаются вместе.
Версии пакетов и модулей в AppStream поставляются и обновляются чаще, чем пакеты BaseOS. У каждой версии свой жизненный цикл. Это позволяет более гибко настраивать пользовательское пространство операционной системы, без ущерба стабильности работы базовой функциональности.
Модуль в AppStream может содержать несколько версий программных пакетов. Например, в модуле postgresql доступны все верси СУБД PostgreSQL: PostgreSQL 10 (по умолчанию) и PostgreSQL 9.6. В операционной системе может быть установлена только одна версия, но различные версии можно использовать в отдельных контейнерах.
Инструменты управления программным обеспечением#
Для управления программным обеспечением в SberLinux используются утилиты YUM и DNF (менеджеры пакетов). Менеджеры пакетов позволяют осуществлять управление программными пакетами и модулями, а также выполнять с ними полный набор операций, например, таких как установка, обновление, удаление, обработка зависимостей и тд.
Для утилиты YUM в SberLinux установка программного обеспечения поддерживается версией YUM tool (YUM v4), которая основана на технологии DNF.
YUM v4, используемый в SberLinux, совместим с YUM v3 при использовании из командной строки, редактировании или создании файлов конфигурации (подробнее в разделе «Настройка YUM и DNF»). Для установки программного обеспечения также используется команда yum и ее опции.
Совместимые пакеты YUM стали частью DNF и могут устанавливаться под теми же именами (которые являются символическими ссылками в рамках обеспечения совместимости), поэтому двоичные файлы, файлы конфигурации и каталоги расположены по умолчанию.
Устаревшие плагины YUM v3 несовместимы с YUM v4. Устаревший Python API, предоставляемый YUM v3, больше не доступен. Рекомендуется перенести плагины и скрипты на новый API, предоставляемый YUM v4 (DNF Python API), который является стабильным и полностью поддерживается.
Настройка YUM и DNF#
Информация о конфигурации для менеджеров пакетов YUM и DNF, а также связанных с ними утилит хранится в файлах /etc/yum.conf и /etc/dnf/dnf.conf в разделе [main] (единственный раздел в файлах). Пары ключ-значение в этом разделе влияют на работу пакетных меднеджеров с репозиториями. [main] содержит только те настройки, которые были явно заданы в данном разделе.
Для просмотра полной конфигурации (в том числе отображения настроек по умолчанию) используйте команду:
Для YUM:
yum config-manager --dump
Для DNF:
dnf config-manager --dump
Важно
Большинство команд в разделе применимы как для DNF, так и для YUM (для использования YUM замените в тексте команды dnf на yum).
Для команд, применимых только к DNF, в тексте используются дополнительные предупреждения.
Для изменения текущей конфигурации:
Откройте файл
/etc/yum.confили/etc/dnf/dnf.confв текстовом редакторе.Отредактируйте раздел
[main]в соотвествии с требуемыми изменениями.Сохраните файл.
Менеджеры пакетов позволяют использовать плагины для расширения функциональности и улучшения работы. Каждый устанавливаемый плагин может иметь свой собственный файл конфигурации в каталоге /etc/dnf/plugins/. Название файла конфигурации должно соотвествовать шаблону <plug-in_name>.conf, где <plug-in_name> - название подключаемого плагина. Чтобы отключить плагин необходимо в таком файле в режиме редактирования добавить:
[main]
enabled=False
Плагины в пакетных менеджерах загружаются по умолчанию, но есть возможность изменить стандарные настройки.
Для отключения всех подключаемых плагинов:
Откройте файл
/etc/yum.confили/etc/dnf/dnf.confв текстовом редакторе.Добавьте параметр
plugins=1(значение по умолчанию) в раздел `[main].Сохраните файл.
Для включения всех подключаемых плагинов необходимо параметру plugins установить значение 0.
Внимание
Отключать все плагины не рекомендуется. Некоторые плагины предоставляют важные сервисы менеджеров пакетов. В частности, плагины product-id и subscription-manager обеспечивают поддержку на основе сертификатов Content Delivery Network (CDN). Глобальное отключение плагинов предусмотрено в качестве опции для удобства и рекомендуется только при диагностике потенциальной проблемы с пакетными менеджерами.
Для отключения конкретного плагина:
Откройте файл
/etc/dnf/plugins/<plug-in_name>.confв текстовом редакторе.Добавьте параметр
enabled=Falseв раздел `[main].Сохраните файл.
Для отключения всех плагинов для конкретной команды добавьте параметр --noplugins при вводе. Например, чтобы отключить все плагины для команды update введите:
dnf --noplugins update
Для отключения определенных плагинов для конкретной команды добавьте при вводе параметр --disableplugin=<plugin-name>, где <plugin-name> – название плагина. Например, чтобы отключить плагин <plugin-name> для команды update введите:
dnf update --disableplugin=<plugin_name>
Для включения определенных плагинов для конкретной команды добавьте при вводе параметр --enableplugin=<plugin-name>. Например, чтобы включить плагин <plugin-name> для команды update введите:
dnf update --enableplugin=<plugin_name>
Поиск и отображение информации с использованием с YUM и DNF#
Менеджеры пакетов в SberLinux позволяют осуществлять поиск информации о программных пакетах и модулях, установленных в системе, а также в репозиториях AppStream и BaseOS.
Поиск программных пакетов#
С помощью менеджеров пакетов можно определить, какой пакет в репозиториях содержит необходимое программное обеспечение.
Для поиска пакетов в названии или в их кратком описании в репозиториях введите:
dnf search <term>
где <term> - название пакета или термин, который к нему относится.
Команда dnf search возвращает совпадения терминов в зоне поиска, указанной выше. Это ускоряет поиск и позволяет искать пакеты, название которых неизвестно, но известен связанный по смыслу термин.
Чтобы добавить в зону поиска полное описание пакетов введите:
dnf search --all <term>
Опция --all обеспечивает более исчерпывающий, но более медленный поиск.
Важно
Следующие команды применимы только для DNF.
Чтобы выполнить поиск по названию пакета в перечне пакетов в репозиториях введите:
dnf repoquery <package_name>
где <package_name> – название пакета.
Вывод команды также будет содержать версию этого пакета.
Для поиска пакета по файлу, который ему принадлежит, введите:
dnf provides <file_name>
где <file_name> – имя файла или путь к этому файлу.
Отображение перечня программных пакетов#
YUM и DNF можно использовать для отображения перечня пакетов и их версий, доступных в репозиториях. При необходимости список пакетов можно отфильтровать, оставив, например, только те пакеты, для которых доступны обновления.
Для вывода всех доступных пакетов, включая их архитектуру, версии и репозитории, из которых они установлены, введите:
dnf list --all
Знак @ перед указанием репозитория говорит о том, что пакет в данный момент установлен в системе.
Для того, чтобы отфильтровать список пакетов, вместо --all используйте параметры:
--installedдля формирования списка установленных пакетов в системе;--availableдля формирования списка пакетов, доступных для установки в репозиториях;--upgradesдля формирования списка пакетов, для которых доступны новые версии для установки.
Результаты работы команды можно дополнительно отфильтровать с использованием глобальных выражений в качестве аргументов. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Важно
Для DNF команда dnf repoquery является альтернативой команде dnf list --all.
Отображение перечня репозиториев#
Менеджеры пакетов позволяют получить список репозиториев, которые включены или отключены в операционной системе.
Для вывода списка всех включенных репозиториев введите:
dnf repolist
Для вывода списка отключенных репозиториев добавьте к команде выше параметр --disabled, для вывода списка включенных и отключенных репозиториев – параметр --all.
Чтобы отобразить дополнительную информацию о репозиториях, введите:
dnf repoinfo <repository_name>
где <repository_name> - название репозитория.
Результаты также можно дополнительно отфильтровать с использованием глобальных выражений. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Вывод информации о пакетах#
С помощью менежеров пакетов можно получать дополнительные сведения о пакетах, такие как версия, тип архитектуры, размер и описание.
Для вывода информации об одном или нескольких пакетах, установленных в системе, а также о его более новых версиях (при наличии в репозиториях), введите:
dnf info <package_name>
где <package_name> название пакета.
Важно
Для DNF в качестве альтернативы можно использовать команду dnf repoquery --info <package_name>, которая выведет информацию обо всех пакетах в репозитории с указанным <package_name>.
Дополнительно отфильтровать результаты можно с использованием глобальных выражений. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Вывод информации о группах пакетов#
Менеджеры пакетов позволяют получать информацию о группах пакетов в репозиториях и системе. При установке группы пакетов набор зависимых пакетов устанавливается за одно действие, но важно знать название нужной группы.
Примечание
Группа пакетов - это набор пакетов, которые объеденены в рамках выполнения общей функции (например, системные инструменты, звук и видео).
Для вывода списка установленных и доступных групп используйте:
dnf group list
Отфильтровать результаты команды dnf group list возможно с помощью параметров --installed и --available. Параметр --hidden при вводе команды позволит отобразить скрытые группы.
Для просмотра количества установленных и доступных групп введите:
dnf group summary
Для вывода информации о перечне пакетов, содержащихся в определенной группе (как обязательных, так и необязательных) введите:
dnf group info "<group_name>"
где <group_name> – название нужной группы.
Дополнительно результаты можно отфильтровать с использованием глобальных выражений. Подробнее в разделе «Использование глобальных выражений для дополнительной фильтрации».
Отображение информации о модулях и их содержимом#
С помощью менеджеров пакетов можно получить всю информацию о модулях и составе их пакетов, определить доступные модули и их версии в репозитории для того, чтобы, например, выбрать необходимую версию (поток) перед установкой.
Для того, чтобы вывести информацию о списке всех доступных модулей введите:
dnf module list
Для просмотра аналогичной информации для определенного модуля введите:
dnf module list <module_name>
где <module_name> - название нужного модуля.
Для того, чтобы определить в каком модуле содержится определенный пакет введите:
dnf module provides <package_name>
где <package_name> - название нужного пакета.
Для вывода информации о модуле, включая его описание, перечень профилей и список всех входящих в него пакетов, введите:
dnf module info <module_name>
где <module_name> - название нужного модуля.
Примечание
Профиль модуля - это список рекомендуемых пакетов, которые устанавливаются вместе для конкретного варианта использования, например, таких как разработка, минимальный или расширенный (надежный) вариант развертывания.
Для вывода перечня пакетов, соотвествующих каждому профилю, введите:
dnf module info --profile <module_name>
где <module_name> - название нужного модуля.
Использование глобальных выражений для дополнительной фильтрации#
С помощью добавления глобальных выражений в качестве аргументов можно фильтровать результаты выполнения dnf и yum команд.
При использовании глобальных выражений:
заключите глобальное выражение целиком в одинарные или двойные кавычки:
dnf module info --profile <module_name>экранируйте подстановочные знаки, поставив перед ними символ обратной косой черты ():
dnf provides \*/<file_name>где
<file_name>– имя используемого файла.
Установка программных пакетов#
Чтобы установить пакет и все зависимости этого пакета, используйте:
package-name
Замените package-name на необходимое название пакета.
Чтобы установить несколько пакетов и их зависимостей одновременно, используйте:
# yum install package-name-1 package-name-2
Замените package-name-1 и package-name-2 на необходимые названия пакетов.
Если известно имя двоичного файла, который нужно установить, но не имя пакета, используйте путь к двоичному файлу в качестве аргумента:
# yum install /usr/sbin/binary-file
Замените /usr/sbin/binary-file на путь к двоичному файлу.
yum просматривает списки пакетов, находит пакет, который предоставляет /usr/sbin/binary-file и запрашивает разрешение на установку.
Чтобы установить ранее загруженный пакет из локального каталога, используйте:
# yum install **/path/**
Замените /path/ на путь к пакету.
Важно
Оптимизируйте поиск пакетов, явно определив, как анализировать аргумент.
Следующая сценарий описывает, как установить группу пакетов по имени группы или с помощью идентификатора группы yum.
Сценарий:
Чтобы установить группу пакетов по имени группы, используйте:
# yum group install group-name
Или
# yum install @group-name
Замените group-name названием группы или группы необходимой среды.
Чтобы установить группу пакетов по идентификатору группы, используйте:
# yum group install
Замените groupId идентификатором группы.
Чтобы оптимизировать процесс установки и удаления, добавьте -n, -na, или -nevra суффиксы к y um install yum remove командам и, чтобы явно определить, как анализировать аргумент.
Чтобы установить пакет, используя его точное имя, используйте:
# yum install-n
Замените -n на необходимое имя пакета.
Чтобы установить пакет, используя его точное имя и архитектуру, используйте:
# yum install-na name.architecture
Замените name.architecture необходимым именем и архитектурой пакета.
Чтобы установить пакет, используя его точное имя, эпоху, версию, выпуск и архитектуру, используйте:
yum install-nevra name-epoch:version-release.architecture
Замените name-epoch:version-release.architecture необходимым именем, временем, версией, выпуском и архитектурой пакета.
Обновление программных пакетов#
Следующий сценарий описывает, как проверить доступные обновления для пакетов, установленных в системе, с помощью yum.
Сценарий:
Чтобы узнать, какие пакеты, установленные в системе, имеют доступные обновления, используйте:
yum check-update
Выходные данные возвращают список пакетов и их зависимостей, для которых доступно обновление.
Используйте следующий сценарий для обновления одного пакета и его зависимостей с помощью yum.
Чтобы обновить пакет, используйте:
package-name
Замените package-name на необходимое имя пакета.
Важно
При применении обновлений к ядру yum всегда устанавливает новое ядро, независимо от того, используется ли yum update команда или yum install.
Обновление группы пакетов с помощью YUM
Используйте следующий сценарий для обновления группы пакетов и их зависимостей с помощью yum.
Сценарий
Чтобы обновить группу пакетов, используйте:
yum group update group-name
Заменить название группы с именем группы пакетов.
Обновление всех пакетов и их зависимостей с помощью YUM
Используйте следующий сценарий для обновления всех пакетов и их зависимостей с помощью yum.
Сценарий:
Чтобы обновить все пакеты и их зависимости, используйте:
yum update
Обновление пакетов, связанных с безопасностью, с помощью YUM
Используйте следующий сценарий для обновления пакетов доступные пакеты, содержащие ошибки безопасности, используя yum.
Сценарий:
Чтобы перейти на последние доступные пакеты, содержащие ошибки безопасности, используйте:
yum update --security
Для обновления до последних пакетов исправлений безопасности используйте:
yum update-minimal --security
Автоматизация обновления программного обеспечения
Чтобы автоматически и регулярно проверять и загружать обновления пакетов, используйте DNF Automatic (Автоматический), который предоставляется dnf-automatic.
DNF Automatic (Автоматический) является альтернативным интерфейсом командной строки для yum, который подходит для автоматического и регулярного выполнения с использованием системных таймеров, заданий cron и других подобных инструментов.
DNF Automatic (Автоматический) синхронизирует метаданные пакета по мере необходимости, а затем проверяет наличие доступных обновлений. После этого инструмент может выполнить одно из следующих действий в зависимости от того, как оно настроено:
Выход.
Загрузку обновленных пакетов.
Загрузку и применение обновления.
О результатах операции сообщается с помощью выбранного механизма, такого как стандартный вывод или электронное письмо.
Установка автоматического DNF
Следующий сценарий описывает, как установить DNF Automatic инструмент.
Сценарий:
Для установки dnf-automatic, используйте:
yum install dnf-automatic
Этапы проверки:
Чтобы убедиться в успешной установке, подтвердите наличие пакета, выполнив следующую команду:
rpm -qi dnf-automatic
Файл автоматической конфигурации DNF
По умолчанию, DNF Automatic использует /etc/dnf/automatic.conf в качестве его конфигурационного файла для определения его поведения.
Файл конфигурации разделен на следующие тематические разделы:
Раздел [commands]. Устанавливает режим работы DNF Автоматический.
Раздел [emitters]. Определяет, как результаты сообщений DNF Automatic.
Раздел [command_email]. Предоставляет конфигурацию отправителя электронной почты для внешней команды, используемой для отправки электронной почты.
Раздел [email]. Предоставляет конфигурацию отправителя электронной почты.
Раздел [base]. Переопределяет настройки из основного конфигурационного файла yum.
При настройках файла /etc/dnf/automatic.conf по умолчанию DNF автоматически проверяет наличие доступных обновлений, загружает их и сообщает о результатах в виде стандартного вывода.
Важно
Настройки режима работы из раздела [commands] переопределяются настройками, используемыми блоком таймера systemd для всех блоков таймера, кроме dnf-automatic.timer.
Включение автоматического DNF
Сценарий:
Выберите, включите и запустите системный таймер, который соответствует потребностям:
systemctl enable --now <unit>
Где unit является одним из следующих таймеров:
dnf-automatic-download.timer
dnf-automatic-install.timer
dnf-automatic-notifyonly.timer
dnf-automatic.timer
Для загрузки доступных обновлений, используйте:
systemctl enable dnf-automatic-download.timer
systemctl start dnf-automatic-download.timer
Для загрузки и установки доступных обновлений, используйте:
systemctl enable dnf-automatic-install.timer
systemctl start dnf-automatic-install.timer
Для отчетности о доступных обновлениях, используйте:
systemctl enable dnf-automatic-notifyonly.timer
systemctl start dnf-automatic-notifyonly.timer
При необходимости используйте:
systemctl enable dnf-automatic.timer
systemctl start dnf-automatic.timer
Что касается загрузки и применения обновлений, этот блок таймера работает в соответствии с настройками в /etc/dnf/automatic.conf конфигурационный файл. Поведение по умолчанию аналогично dnf-automatic-download.timer: он загружает обновленные пакеты, но не устанавливает их.
Важно
Запустите DNF Automatic, выполнив /usr/bin/dnf-automatic файл непосредственно из командной строки или из пользовательского скрипта.
Чтобы убедиться, что таймер включен, выполните следующую команду:
systemctl status <systemd timer unit>
Дополнительные ресурсы:
Для получения более подробной информации о блоках таймера systemd см. руководство man dnf-automatic(8).
Обзор блоков таймера systemd, входящих в комплект поставки dnf-automatic
Блоки таймера systemd имеют приоритет и переопределяют настройки, касающиеся загрузки и применения обновлений в конфигурационном файле /etc/dnf/automatic.conf.
Например, если установлен следующий параметр в конфигурационный файл /etc/dnf/automatic.conf, но активирован dnf-automatic-notifyonly.timer unit, пакеты не будут загружены:
download_updates = yes.
В dnf-automatic пакет включает в себя следующие блоки таймера systemd, которые представлены в таблице.
Таблица. Блоки таймера systemd в dnf-automatic пакете
Блок таймера |
Функция |
Переопределяет настройки в /etc/dnf/automatic.conf файл? |
|---|---|---|
dnf-automatic-download.timer |
Загружает пакеты в кеш и делает их доступными для обновления. Примечание: Этот блок таймера не устанавливает обновленные пакеты. Чтобы выполнить установку, необходимо выполнить команду |
ДА |
dnf-automatic-install.timer |
Загружает и устанавливает обновленные пакеты. |
ДА |
dnf-automatic-notifyonly.timer |
Загружает только данные репозитория, чтобы поддерживать кеш репозитория в актуальном состоянии, и уведомляет о доступных обновлениях. Примечание: Этот блок таймера не загружает и не устанавливает обновленные пакеты. |
ДА |
dnf-automatic.timer |
Поведение этого таймера в отношении загрузки и применения обновлений определяется настройками в конфигурационном файле /etc/dnf/automatic.conf. Поведение по умолчанию такое же, как и для блока dnf-automatic-download.timer: оно только загружает пакеты, но не устанавливает их |
НЕТ |
Удаление программных пакетов#
Удаление пакетов с YUM
Используйте следующий сценарий, чтобы удалить пакет либо по имени группы, либо по идентификатору группы.
Сценарий:
Чтобы удалить определенный пакет и все зависимые пакеты, используйте:
yum remove package-name
Замените package-name на необходимое название пакета.
Чтобы удалить несколько пакетов и их зависимости одновременно, используйте:
yum remove package-name-1 package-name-2
Замените package-name-1 и package-name-2 на необходимые названия пакетов.
Важно
yum не может удалить пакет, не удалив зависимые пакеты.
Удаление группы пакетов с помощью YUM
Используйте следующий сценарий, чтобы удалить пакет либо по имени группы, либо по идентификатору группы.
Сценарий:
Чтобы удалить группу пакетов по имени группы, используйте:
yum group remove group-name
Или
yum remove @group-name
Замените group-name необходимым названием группы.
Чтобы удалить группу пакетов по идентификатору группы, используйте:
yum group remove
Замените groupId идентификатором группы.
Указание имени пакета во входных данных YUM
Чтобы оптимизировать процесс установки и удаления, добавьте -n, -na, или -nevra суффиксы к yum install yum remove командам и, чтобы явно определить, как анализировать аргумент:
Чтобы установить пакет с необходимым именем, используйте:
yum install-n
Замените -n на необходимое имя пакета.
Чтобы установить пакет с необходимым именем и архитектурой, используйте:
yum install-na name.architecture
Замените name.architecture необходимым именем и архитектурой пакета.
Чтобы установить пакет с необходимым именем, временем, версией, выпуском и архитектурой, используйте:
yum install-nevra name-epoch:version-release.architecture
Замените epoch:version-release.architecture необходимым именем, временем, версией, выпуском и архитектурой пакета.
Управление группами пакетов программного обеспечения#
Группа пакетов - это набор пакетов, которые служат общей цели (системные инструменты, звук и видео). При установке группы пакетов извлекается набор зависимых пакетов, что значительно экономит время.
Перечисление групп пакетов с помощью YUM
Используйте yum для просмотра установленных групп пакетов и фильтрации результатов листинга.
Сценарий:
Чтобы просмотреть количество установленных и доступных групп, используйте:
yum group summary
Чтобы перечислить все установленные и доступные группы, используйте:
yum group list
Важно
Отфильтруйте результаты, добавив параметры командной строки для команды yum group list (--hidden, --available).
Чтобы перечислить обязательные и необязательные пакеты, содержащиеся в определенной группе, используйте:
yum group info group-name
Замените group-name на необходимое название группы.
Важно
Отфильтруйте результаты, добавив глобальные выражения в качестве аргументов.
Установка группы пакетов с помощью YUM
Следующий сценарий описывает, как установить группу пакетов по имени группы или с помощью идентификатора группы yum.
Сценарий:
Чтобы установить группу пакетов по имени группы, используйте:
yum group install group-name
Или
yum install @group-name
Замените group-name необходимым названием группы.
Чтобы установить группу пакетов по идентификатору группы, используйте:
yum groupId install
Замените groupId идентификатором группы.
Удаление группы пакетов с помощью YUM
Используйте следующий сценарий, чтобы удалить пакет либо по имени группы, либо по идентификатору группы.
Сценарий:
Чтобы удалить группу пакетов по имени группы, используйте:
yum group remove group-name
Или
yum remove @group-name
Замените group-name полным названием группы.
Чтобы удалить группу пакетов по идентификатору группы, используйте:
yum groupId remove
Замените groupId идентификатором группы.
Указание глобальных выражений во входных данных YUM
yum команды позволяют фильтровать результаты, добавляя одно или несколько глобальных выражений в качестве аргументов. Избегайте глобальных выражений при передаче их в качестве аргументов команде yum.
Сценарий:
Чтобы убедиться, что глобальные выражения передаются yum по назначению, используйте один из следующих методов:
Заключите все глобальное выражение в двойные или одинарные кавычки.
yum provides "*/file-name".
Замените file-name необходимым именем файла.
Экранируйте подстановочные знаки, поставив перед ними символ обратной косой черты (\ слеш).
yum provides \*/file-name
Замените file-name необходимым именем файла.
Обработка истории управления пакетами#
Команда yum history позволяет просматривать информацию о временной шкале транзакции yum, даты и время их возникновения, количество затронутых пакетов, были ли эти транзакции успешными или были прерваны, и была ли изменена база данных RPM между транзакциями. Команда yum history также может быть использована для отмены или повторного выполнения транзакций.
Листинг сделок с YUM
Используйте следующий сценарий, чтобы перечислить последние транзакции, последние операции для выбранного пакета и сведения о конкретной транзакции.
Сценарий:
Чтобы отобразить список всех последних транзакций yum, используйте:
yum history
Чтобы отобразить список всех последних операций для выбранного пакета, используйте:
yum history list package-name
Замените package-name на необходимое имя пакета.
Важно
Отфильтруйте выходные данные команды, добавив глобальные выражения.
Чтобы проверить конкретную транзакцию, используйте:
yum history info transactionID
Замените transactionID на необходимый идентификатор транзакции.
Возврат транзакций с помощью YUM
Следующий сценарий описывает, как отменить выбранную транзакцию или последнюю транзакцию с помощью yum.
Сценарий:
Чтобы отменить конкретную транзакцию, используйте:
yum history undo transactionID
Замените transactionID на необходимый идентификатор транзакции.
Чтобы отменить последнюю транзакцию, используйте:
yum history undo last
Примечание
Команда yum history undo отменяет только те шаги, которые были выполнены во время транзакции. Если транзакция установила новый пакет, команда yum history undo удаляет его. Если транзакция удалила пакет, команда yum history undo переустанавливает его. Команда yum history undo также пытается откатить назад все обновленные пакеты до их предыдущих версий, если старые пакеты все еще доступны.
Повторяющиеся транзакции с YUM
Используйте следующий сценарий, чтобы повторить выбранную транзакцию или последнюю используемую транзакцию yum.
Сценарий:
Чтобы повторить определенную транзакцию, используйте:
yum history redo transactionID
Замените transactionID на необходимый идентификатор транзакции.
Чтобы повторить последнюю транзакцию, используйте:
yum history redo last
Примечание
команда yum history redo повторяет только те шаги, которые были выполнены во время транзакции.
Указание глобальных выражений во входных данных YUM
Команды yum позволяют фильтровать результаты, добавляя одно или несколько глобальных выражений в качестве аргументов.
Сценарий:
Чтобы убедиться, что глобальные выражения передаются по назначению yum, используйте один из следующих методов:
Заключите глобальное выражение (как на примере: "/file-name") в двойные или одинарные кавычки.
yum provides "*/file-name".
Замените file-name необходимым именем файла.
Экранируйте подстановочные знаки, поставив перед ними символ обратной косой черты (\ слеш).
yum provides \*/file-name
Замените file-name необходимым именем файла.
Полный список доступных разделов [repository] см. в [repository] OPTIONS разделе руководства man yum.conf(5).
Управление репозиториями программного обеспечения#
Информация о конфигурации для yum и связанных с ней утилит хранится в файле /etc/yum.conf. Этот файл содержит один или несколько разделов [repository], которые позволяют устанавливать параметры, зависящие от репозитория. Рекомендуется определять отдельные репозитории в новых или существующих .repo файлах в /etc/yum.repos.d/ каталоге.
Важно
Значения, которые определены в отдельных разделах [repository] файла /etc/yum.conf, переопределяют значения, установленные в разделе [main].
Конфигурационный файл /etc/yum.conf содержит разделы [repository], где repository - это уникальный идентификатор репозитория. Разделы [repository] позволяют определять отдельные репозитории yum.
Примечание
Не указывайте пользовательским репозиториям имена, используемые репозиториями SberLinux, чтобы избежать конфликтов.
Добавление репозитория YUM
Сценарий:
Чтобы определить новый репозиторий, сделайте следующие шаги:
Добавьте раздел [repository] в файл /etc/yum.conf.
Добавьте раздел [repository] в .repo файл в каталоге /etc/yum.repos.d/.
+
репозитории yum обычно предоставляют свой собственный .repo файл.
Чтобы добавить репозиторий в свою систему и включить его, используйте:
yum-config-manager --add-repo repository_URL
Замените repository_url URL-адресом, указывающим на репозиторий.
Включение репозитория YUM
После того как в систему добавлено хранилище yum, включите его, чтобы обеспечить установку и обновления.
Сценарий:
Чтобы включить репозиторий, используйте:
yum-config-manager --enable repositoryID
Замените repositoryID на необходимый идентификатор репозитория.
Отключение репозитория YUM
Отключите определенный репозиторий yum, чтобы предотвратить установку или обновление определенных пакетов.
Сценарий:
Чтобы отключить репозиторий yum, используйте:
yum-config-manager --disable repositoryID
Замените repositoryID на необходимый идентификатор репозитория.
Ключи находятся в папке /etc/pki/rpm-gpg/, чтобы пользователь не менял настройки операционной системы. В этом случае смена ключей для подписи незаметна для пользователя. При установке rpm-пакетов из этой папки пользователи могут выделять ключи для проверки подписи пакетов.
Systemd#
Системный администратор взаимодействует с systemd системным и сервисным менеджером для операционных систем Linux. Программный пакет systemd предоставляет инструменты и службы для контроля и отчетности о состоянии системы, для инициализации системы во время запуска и многое другое. Программный пакет systemd предоставляет ряд функций, таких как:
параллельный запуск системных служб во время загрузки;
активацию демонов по требованию;
логику управления сервисом на основе зависимостей.
Типы юнитов systemd#
В качестве представления системных ресурсов и сервисов systemd вводится понятие systemd units (по тексту юнит, см. «Термины и определения»). Юнит systemd выполняет или управляет определенной задачей, и является основным объектом для управления systemd. Ниже приведены следующие примеры различных типов юнитов systemd:
обслуживание;
цель;
устройство;
монтирование;
таймер;
другие типы, которые имеют отношение к системе инициализации.
Примечание
Для доступных типов юнитов, используйте:
systemctl -t help
Юнит systemd состоит из имени, типа и файла конфигурации, который определяет задачу юнита. Файлы конфигурации юнитов расположены в одном из каталогов, перечисленных в следующей таблице.
Таблица. Расположение юнит-файлов systemd
Каталог |
Описание |
|---|---|
/usr/lib/systemd/system/ |
юнит-файлы systemd, распространяемые вместе с установленными пакетами RPM. |
/run/systemd/system/ |
юнит-файлы systemd, созданные во время выполнения. Этот каталог имеет приоритет над каталогом с установленными файлами юнит-файла. |
/etc/systemd/system/ |
юнит-файл systemd, созданные, systemctl enable, а также юнит-файлы, добавленные для расширения службы. Этот каталог имеет приоритет над каталогом с юнит-файлами среды выполнения |
Systemd основные функции#
Конфигурация systemd по умолчанию определяется во время компиляции, конфигурация расположена в файле /etc/systemd/system.conf. Используйте этот файл для переопределения выбранных значений юнитов systemd по умолчанию. Например, чтобы переопределить значение ограничения времени ожидания по умолчанию, которое установлено равным 90 секундам, используйте параметр DefaultTimeoutStartSec для ввода требуемого значения в секундах.
DefaultTimeoutStartSec=required value
Управление системными службами с помощью systemctl#
Управление юнит-файлом с помощью systemctl#
Можно проверить любой юнит-файл, чтобы получить о нем подробную информацию и проверить состояние службы, независимо от того, включена она или запущена.
Сценарий:
Чтобы отобразить подробную информацию о юнит-файле, соответствующем системной службе, введите:
systemctl status <name>.service
Замените
на имя юнит-файла, который нужно проверить (например, gdm).
Эта команда отображает имя выбранного юнит-файла, за которым следует его краткое описание и описание журналов, заполняемых root пользователем. Доступная информация о сервисном юните представлена в таблице ниже.
Таблица. Доступная информация о сервисном юните
Поле |
Описание |
|---|---|
Loaded |
Информация о том, был ли загружен юнит, абсолютный путь к юнит-файлу и примечание о том, включен ли юнит |
Active |
Информация о том, работает ли юнит, за которой следует отметка времени |
Main PID |
PID соответствующей системной службы, за которым следует ее имя |
Status |
Дополнительная информация о соответствующей системной службе |
Process |
Дополнительная информация о связанных процессах |
CGroup |
Дополнительная информация о связанных контрольных группах (cgroups) |
Чтобы убедиться, что работает только определенный сервисный юнит, введите:
$ systemctl is-active <name>.service
Чтобы определить, включен ли конкретный юнит, введите:
$ systemctl is-enabled <name>.service
Примечание
Оба юнита systemctl is-active и systemctl is-enabled возвращают статус выхода 0, если указанный юнит-файл запущен или включен.
Чтобы определить, какие службы заказываются для запуска до указанного юнит-файла, введите:
systemctl list-dependencies --after <name>.service
Замените <name> на имя службы в команде.
Чтобы определить, какие службы заказываются для запуска после указанной единицы обслуживания, введите:
systemctl list-dependencies --before <name>.service
Замените
Сравнение сервисной утилиты с systemctl#
systemctl - команда управления менеджером системы Systemd.
service - команда управления Upstart.
В таблице ниже представлено сравнение утилиты service с systemd.
Таблица. Сравнение утилиты service с systemd
service |
systemctl |
Описание |
|---|---|---|
service name start |
systemctl start name.service |
Запуск сервиса |
service name stop |
systemctl stop name.service |
Остановка сервиса |
service name restart |
systemctl restart name.service |
Рестарт сервиса |
service name condrestart |
systemctl try-restart name.service |
Рестарт сервиса только если он запущен |
service name reload |
systemctl reload name.service |
Перезагрузка конфигурации |
service name status |
systemctl status name.servicesystemctl is-active name.service |
Проверяет запущен ли сервис |
service –status-all |
systemctl list-units –type service –all |
Отображает статус всех сервисов |
Список системных сервисов#
Как и любое другое приложение, эти службы системных сервисов используют системные ресурсы.
Сценарий:
Чтобы вывести список всех загруженных в данный момент юнит-файлов, выполните следующую команду::
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
----
systemd-vconsole-setup.service loaded active exited Setup Virtual Console
tog-pegasus.service loaded active running OpenPegasus CIM Server
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
46 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'
По умолчанию команда systemctl list-units отображает только активные объекты. Для каждого файла юнит-файла отображается команда, где:
UNIT: его полное название.
LOAD: информация о том, был ли загружен юнит-файл.
ACTIVE или SUB: состояние активации его высокоуровневого и низкоуровневого firewalld-filesystem.
DESCRIPTION: краткое описание.
Чтобы вывести список всех загруженных объектов независимо от их состояния, введите следующую команду с параметром –all из командной строки или:
systemctl list-units --type service --all
Чтобы перечислить состояние (включено или отключено) всех доступных сервисных устройств, введите:
$ systemctl list-unit-files --type service
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrtd.service enabled
...
wpa_supplicant.service disabled
ypbind.service disabled
208 unit files listed.
Для каждого сервисного подразделения эта команда отображает:
UNIT FILE: его полное название.
STATE: информация о том, включен или отключен юнит-файл.
Отображение статуса системной службы#
Чтобы отобразить юнит-файл, который systemd загрузила в систему, можно использовать команду cat. Например, чтобы увидеть файл модуля демона-планировщика atd, можно ввести следующее:
systemctl cat atd.service
Output
[Unit]
Description=ATD daemon
[Service]
Type=forking
ExecStart=/usr/bin/atd
[Install]
WantedBy=multi-user.target
Положительные и отрицательные сервисные зависимости#
Чтобы увидеть дерево зависимостей модуля, можно использовать команду list-dependencies:
systemctl list-dependencies sshd.service
При этом отобразится иерархическая схема зависимостей, с которой необходимо работать, чтобы запустить интересуемый модуль. Зависимости в этом контексте включают те модули, которые требуются или желательны для модулей выше.
Output
sshd.service
─system.slice
─basic.target
├─microcode.service
├─sberlinux-autorelabel-mark.service
├─sberlinux-autorelabel.service
├─sberlinux-configure.service
├─sberlinux-dmesg.service
├─sberlinux-loadmodules.service
├─paths.target
├─slices.target
. . .
Рекурсивные зависимости отображаются только для модулей .target, которые указывают состояние системы. Чтобы рекурсивно перечислить все зависимости, добавьте флажок –all.
Чтобы отобразить обратные зависимости (модули, зависящие от указанного модуля), можно добавить в команду флажок –reverse. Другие флажки –before и –after могут быть использованы для отображения модулей, которые зависят от указанного модуля, соответственно, перед ними и после.
Кроме systemd, существуют положительные и отрицательные зависимости между службами. Запуск конкретной службы может потребовать запуска одной или нескольких других служб (положительная зависимость) или остановки одной, или нескольких служб (отрицательная зависимость).
Когда запускается новая служба, все зависимости systemd разрешаются автоматически, без явного уведомления пользователя. Это означает, что если уже запускается служба совместно с другой службой с отрицательной зависимостью, первая служба автоматически останавливается.
Например, если запускается postfix служба и sendmail служба, systemd автоматически останавливает postfix, поскольку эти две службы конфликтуют и не могут запускаться на одном и том же порту.
Запуск системной службы#
Запустите системную службу в текущем сеансе с помощью команды start.
Предварительные условия:
Права root пользователя.
Сценарий:
Чтобы запустить выбранный юнит-файл, соответствующий системной службе, введите следующую команду как root пользователь:
systemctl start <name>.service
Замените
на имя юнит-файла, который запускаете (например, httpd.service).
Остановка системной службы#
Остановите системную службу в текущем сеансе, используйте команду stop.
Предварительные условия:
Права root пользователя.
Сценарий:
Чтобы остановить юнит-файл, соответствующий системной службе, введите следующую команду, как root пользователь:
systemctl stop <name>.service
Замените
на имя юнит-файла, который нужно остановить (например, на bluetooth).
Перезапуск системной службы#
Можно перезапустить системную службу в текущем сеансе с помощью команды restart:
Остановите выбранный юнит-файл в текущем сеансе и немедленно запустите его снова.
Перезапускайте юнит-файл только в том случае, если соответствующая служба уже запущена.
Перезагрузите конфигурацию системной службы, не прерывая ее выполнение.
Предварительные условия:
Права root пользователя.
Сценарий:
Перезапустите юнит-файл, соответствующий системной службе:
systemctl restart <name>.service
Замените
на имя юнит-файла, который нужно перезапустить (например, на httpd).
Примечание
Если выбранный юнит-файл не запущен, эта команда также запускает его.
Перезапустите юнит-файл, если соответствующая служба уже запущена:
systemctl try-restart <name>.service
В качестве альтернативы, перезагрузите конфигурацию, не прерывая выполнение службы:
systemctl reload <name>.service
Примечание
Системные службы, которые не поддерживают эту функцию, игнорируют эту команду. Чтобы перезапустить такие службы, используйте команды reload-or-restart или reload-or-try.
Включение системной службы#
Можно настроить службу на автоматический запуск во время загрузки системы. Команда enable считывает раздел [Install] выбранного юнит-файла и создает соответствующие символические ссылки на файл / usr/lib/systemd/system/name.service в /etc/systemd/system/ каталоге и его подкаталогах. Однако он не перезаписывает ссылки, которые уже существуют.
Предварительные условия:
Права root пользователя.
Сценарий:
Настройте юнит-файл, соответствующий системной службе, который будет автоматически запускаться во время загрузки:
systemctl enable <name>.service
Замените
на имя юнит-файла, который нужно включить (например, на httpd). При необходимости повторно включите системный блок:
systemctl reenable <name>.service
Эта команда отключает выбранный юнит-файл и немедленно включает его снова.
Отключение системной службы#
Можно запретить автоматический запуск юнит-файла во время загрузки. Команда disable считывает раздел [Install] выбранного юнит-файла и удаляет соответствующие символические ссылки на файл / usr/lib/systemd/system/name.service из /etc/systemd/system/ каталога и его подкаталогов.
Предварительные условия:
Права root пользователя.
Сценарий:
Чтобы настроить юнит-файл, соответствующий системной службе, чтобы он не запускался автоматически во время загрузки, введите команду, как root пользователь:
systemctl disable <name>.service
Замените
на имя юнит-файла, который нужно отключить (например, на bluetooth). При необходимости замаскируйте любой юнит-файл и запретите его запуск вручную или с помощью другой службы:
systemctl mask <name>.service
Эта команда заменяет файл / etc/systemd/system/name.service символической ссылкой на /dev/null, делая фактический юнит-файл недоступным systemd.
Чтобы отменить это действие и снять маску с юнит-файла, введите:
systemctl unmask <name>.service
Работа с целями systemd#
Цели systemd действуют как точки синхронизации во время запуска системы. Файлы целевых модулей, которые заканчиваются .target расширением файла, представляют systemd цели. Назначением целевых модулей является группировка различных systemd модулей через цепочку зависимостей.
Просмотр цели по умолчанию#
Можно отобразить цель по умолчанию с помощью systemctl команды или просмотреть /etc/systemd/system/default.target файл, представляющий целевую единицу по умолчанию.
Процедура
Определите, какая целевая единица используется по умолчанию:
$ systemctl get-default
graphical.target
Определите цель по умолчанию, используя символическую ссылку:
$ ls -l /usr/lib/systemd/system/default.target
Просмотр целевых модулей#
Можно отобразить все типы модулей или ограничить поиск текущими загруженными целевыми модулями. По умолчанию команда отображает только активные модули.
Процедура:
Список всех загруженных модулей независимо от их состояния:
$ systemctl list-units --type target --all
В качестве альтернативы, перечислите все загруженные в данный момент целевые устройства:
$ systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Encrypted Volumes
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network.target loaded active active Network
paths.target loaded active active Paths
remote-fs.target loaded active active Remote File Systems
sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
spice-vdagentd.target loaded active active Agent daemon for Spice guests
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
time-sync.target loaded active active System Time Synchronized
timers.target loaded active active Timers
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
17 loaded units listed.
Изменение цели по умолчанию#
Целевая единица по умолчанию представлена /etc/systemd/system/default.target файлом. Следующая процедура описывает, как изменить цель по умолчанию с помощью команды systemctl:
Процедура
Чтобы определить целевой модуль по умолчанию:
# systemctl get-default
Чтобы настроить систему на использование другого целевого устройства по умолчанию:
# systemctl set-default multi-user.target
rm /etc/systemd/system/default.target
ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
Команда заменяет /etc/systemd/system/default.target файл символической ссылкой на /usr/lib/systemd/system/name.target, где name — это имя целевого устройства, которое нужно использовать. Замените multi-user на имя целевого устройства, которое нужно использовать по умолчанию.
# systemctl set-default multi-user.target
rm /etc/systemd/system/default.target
ln -s /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target
Общие цели для set-default команды (см.таблицу ниже)
basic |
Целевой модуль, покрывающий базовую загрузку |
|---|---|
rescue |
Целевой модуль, который изолирует базовую систему и запускает спасательную оболочку |
multi-user |
Целевой модуль для настройки многопользовательской системы |
graphical |
Целевой модуль для настройки графического экрана входа в систему |
emergency |
Целевой модуль, который запускает аварийную оболочку на главной консоли |
sysinit |
Целевой модуль, который извлекает службы, необходимые для инициализации системы |
Сделайте Reboot.
# reboot
Дополнительные ресурсы:
С правочные страницы: systemd.special, bootup.
Изменение цели по умолчанию с помощью символической ссылки#
Можно изменить цель по умолчанию, создав символическую ссылку на нужную цель.
Процедура:
Определите целевой модуль по умолчанию:
# ls -l /etc/systemd/system/default.target
Обратите внимание, что в некоторых случаях /etc/systemd/system/default.target ссылка может не существовать, и systemd ищет целевой модуль по умолчанию в файлах /usr. В таких случаях определите целевой модуль по умолчанию с помощью следующей команды:
# ls -l /usr/lib/systemd/system/default.target
Удалите /etc/systemd/system/default.target ссылку:
# rm /etc/systemd/system/default.target
Создайте символическую ссылку:
# ln -sf /usr/lib/systemd/system/graphical.target /etc/systemd/system/default.target
Перезагрузите систему.
Этапы проверки
Проверьте только что созданный default.target (целевой модуль):
$ systemctl get-default
multi-user.target
Изменение текущей цели#
Когда установлен целевой модуль по умолчанию, текущая цель остается неизменной до следующей перезагрузки. Если нужно изменить целевой модуль в текущем сеансе без перезагрузки, используйте команду systemctl isolate.
Процедура:
Перейдите к другому целевому модулю в текущем сеансе:
# systemctl isolate multi-user.target
Эта команда запускает целевой модуль с именем multi-user и все зависимые модули, и немедленно останавливает все остальные.
Замените multi-user на имя целевого устройства, которое нужно использовать по умолчанию.
Этапы проверки:
Проверьте только что созданный default.target (целевой модуль):
$ systemctl get-default
multi-user.target
Загрузка в режиме восстановления#
Режим восстановления обеспечивает удобную однопользовательскую среду и позволяет восстанавливать систему в ситуациях, когда она не может завершить обычный процесс загрузки. В режиме восстановления система пытается смонтировать все локальные файловые системы и запустить некоторые важные системные службы, но не активирует сетевые интерфейсы и не позволяет одновременно войти в систему большему количеству пользователей.
Процедура:
Чтобы войти в режим восстановления, измените текущую цель в текущем сеансе:
# systemctl rescue
Broadcast message from root@localhost on pts/0 (Fri 2013-10-25 18:23:15 CEST):
The system is going down to rescue mode NOW!
Примечание
Эта команда похожа на systemctl isolate rescue.target, но она также отправляет информационное сообщение всем пользователям, которые в данный момент вошли в систему. Чтобы systemd не отправлял это сообщение, выполните следующую команду с параметром --no-wall:
systemctl --no-wall rescue
Загрузка в аварийном режиме#
Аварийный режим обеспечивает минимально возможную среду и позволяет восстановить систему в ситуациях, когда система не может войти в аварийный режим. В аварийном режиме система монтирует корневую файловую систему только для чтения, не пытается монтировать какие-либо другие локальные файловые системы, не активирует сетевые интерфейсы и запускает только несколько основных служб.
Процедура
Чтобы войти в аварийный режим, измените текущую цель:
# systemctl emergency
Важно
Эта команда похожа на systemctl isolate emergency.target, но она также отправляет информационное сообщение всем пользователям, которые в данный момент вошли в систему. Чтобы systemd не отправлял это сообщение, выполните следующую команду с параметром --no-wall:
systemctl --no-wall emergency
Завершение работы, приостановка и перевод системы в спящий режим#
В этом разделе содержатся инструкции по завершению работы, приостановке или переводу операционной системы в спящий режим.
Выключение системы#
Для выключения системы можно либо воспользоваться systemctl утилитой напрямую, либо вызвать эту утилиту через shutdown команду.
Преимущество использования shutdown команды:
Поддержка аргумента времени. Это особенно полезно для планового технического обслуживания. Кроме того, у пользователей появляется больше времени, чтобы отреагировать на предупреждение о запланированном завершении работы системы.
Возможность отменить выключение.
Выключение системы с помощью команды shutdown#
Следуя этой процедуре, используйте shutdown команду для выполнения различных операций. Выключите систему и выключите машину в определенное время, или выключите и остановите систему, не выключая машину, или отмените отложенное выключение.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы выключить систему и выключить машину в определенное время, используйте команду в следующем формате:
shutdown --poweroff hh:mm
Где hh:mm (чч:мм) — время в 24-часовом формате. Файл /run/nologin создается за 5 минут до выключения системы, чтобы предотвратить новые входы в систему.
Когда используется аргумент времени, к команде может быть добавлено необязательное сообщение на экране.
В качестве альтернативы, чтобы выключить и остановить систему после задержки, не выключая машину, используйте:
shutdown --halt +m
Где +m — время задержки в минутах. Ключевое слово now является псевдонимом для +0.
Чтобы отменить отложенное завершение работы, используйте:
shutdown -c
Выключение системы с помощью команды systemctl#
Следуя этой процедуре, используйте systemctl команду для выполнения различных операций. Можно либо выключить систему и выключить машину, либо выключить и остановить систему, не выключая машину.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы завершить работу системы и выключить машину, используйте команду в следующем формате:
systemctl poweroff
В качестве альтернативы, чтобы выключить и остановить систему, не выключая машину, используйте:
systemctl halt
Примечание
По умолчанию запуск любой из этих команд приводит к тому, что systemd отправляет информационное сообщение всем пользователям, которые в данный момент вошли в систему. Чтобы systemd не отправил это сообщение, запустите выбранную команду с параметром --no-wall.
Перезапуск системы#
Можно перезапустить систему, выполнив эту процедуру.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы перезапустить систему, выполните следующую команду:
systemctl reboot
Примечание
По умолчанию эта команда заставляет systemd отправлять информационное сообщение всем пользователям, которые в данный момент вошли в систему. Чтобы systemd не отправил это сообщение, запустите эту команду с параметром --no-wall.
Приостановка системы#
Можно приостановить работу системы, выполнив процедуру, описанную ниже.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы приостановить работу системы, выполните следующую команду:
systemctl suspend
Эта команда сохраняет состояние системы в ОЗУ и, за исключением модуля ОЗУ, отключает питание большинства устройств в машине. Когда машина снова включается, система восстанавливает свое состояние из ОЗУ без повторной загрузки.
Поскольку состояние системы сохраняется в ОЗУ, а не на жестком диске, восстановление системы из режима ожидания происходит значительно быстрее, чем из режима гибернации (выключение системы при сохранении ее состояния). Однако обратите внимание, что приостановленное состояние системы также уязвимо для перебоев в подаче электроэнергии.
Спящий режим системы#
Следуя этой процедуре, можно либо перевести систему в спящий режим, либо перевести ее в спящий режим и приостановить работу системы.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы перевести систему в спящий режим, выполните следующую команду:
systemctl hibernate
Эта команда сохраняет состояние системы на жестком диске и выключает машину. Когда машина снова включается, система восстанавливает свое состояние из сохраненных данных без повторной загрузки.
Поскольку состояние системы сохраняется на жестком диске, а не в ОЗУ, компьютеру не нужно подавать питание на модуль ОЗУ. Однако, как следствие, восстановление системы из режима гибернации происходит значительно медленнее, чем из режима ожидания.
В качестве альтернативы, чтобы перевести систему в спящий режим и приостановить работу, выполните следующую команду:
systemctl hybrid-sleep
Обзор команд управления питанием с помощью systemctl#
Можно использовать следующий список команд systemctl для управления питанием системы.
Обзор команд управления питанием systemctl (см. таблицу ниже):
Команда systemctl |
Описание |
|---|---|
systemctl halt |
Останавливает систему. |
systemctl poweroff |
Выключает систему. |
systemctl reboot |
Перезапускает систему. |
systemctl suspend |
Приостанавливает работу системы. |
systemctl hibernate |
Гибернирует систему. |
systemctl hybrid-sleep |
Гибернирует и приостанавливает работу системы. |
Работа с юнит-файлами systemd#
Эта глава включает описание юнитов systemd. В следующих разделах показано:
Создание пользовательских юнит-файлов.
Изменение существующих юнит-файлов.
Работа с юнитами systemd.
Юнит-файлы#
Юнит-файл содержит директивы конфигурации, которые описывают сам юнит и определяют его поведение. Несколько systemctl команд работают с юнитами в фоновом режиме. Для более точной настройки юнитов системный администратор должен отредактировать или создать юнит-файлы вручную. Расположение юнитов systemd предоставляет три основных каталога, в которых хранятся юниты в системе. Этот /etc/systemd/system/ каталог зарезервирован для юнитов, созданных или настроенных системным администратором.
Имена юнит-файлов имеют следующую форму:
unit_name . type_extension
Здесь unit_name обозначает имя юнит-файла, а type_extension определяет тип юнит-файла.
Например, в системе обычно есть sshd.service и sshd.socket устройство.
Юнит-файлы могут быть дополнены каталогом дополнительных файлов конфигурации. Например, чтобы добавить пользовательские параметры конфигурации в sshd.service, создайте sshd.service.d/custom.conf файл и вставьте в него дополнительные директивы. Дополнительные сведения о каталогах конфигурации см. в разделе «Изменение существующих юнит-файлов».
Многие разделы юнит-файла можно задать с помощью так называемых спецификаторов юнита — строк с подстановочными знаками, которые динамически заменяются параметрами юнита при загрузке юнит-файла. Это позволяет создавать общие юнит-файлы, которые служат шаблонами для создания экземпляров юнитов. См. раздел «Работа с юнитами systemd».
Файловая структура юнит-файлов#
Юнит-файлы обычно состоят из трех разделов:
Раздел [Unit]— содержит общие опции, не зависящие от типа объекта. Эти параметры предоставляют описание юнита, определяют поведение юнита и устанавливают зависимости для других юнит-файлов.
Раздел [Unit type]— если юнит имеет директивы для конкретного типа, они сгруппированы в разделе типов юнита. Например, служебные юнит-файлы содержит [Service] раздел.
Раздел [Install]— содержит информацию об установке юнитов, используемых systemctl enable и disable командами.
Важные параметры раздела [Unit]#
В следующей таблице перечислены важные параметры раздела [Unit].
Вариант |
Описание |
|---|---|
Description |
Содержательное описание устройства. Этот текст отображается, например, в выводе systemctl status команды |
Documentation |
Предоставляет список URI, ссылающихся на документацию по устройству |
After |
Определяет порядок запуска юнитов. Блок запускается только после того, как блоки, указанные в After, активны. В отличие от Requires, After явно не активирует указанные юниты. Опция Before имеет противоположную функциональность по сравнению с After. По своему действию Before аналогична After, но вставляет юнит до содержимого элемента. |
Requires |
Настраивает зависимости от других юнитов. Блоки, перечисленные в Requires, активируются вместе с блоком. Если какой-либо из требуемых блоков не запускается, блок не активируется |
Wants |
Настраивает более слабые зависимости, чем Requires. Если какое-либо из перечисленных устройств не запускается успешно, это не влияет на активацию устройства. Это рекомендуемый способ установки зависимостей пользовательских юнитов |
Conflicts |
Настраивает отрицательные зависимости, противоположные Requires |
Полный список параметров, настраиваемых в разделе [Unit], см. в руководстве man systemd.unit(5).
Важные параметры раздела [Service]#
В следующей таблице перечислены важные параметры раздела [Service].
Вариант |
Описание |
|---|---|
Type |
Настраивает тип запуска процесса, который влияет на функциональность ExecStart и связанные параметры. Один из: |
ExecStart |
Определяет команды или сценарии, которые должны выполняться при запуске устройства. ExecStartPre и ExecStartPost указывает пользовательские команды, которые будут выполняться до и после ExecStart. Type=oneshot позволяет указать несколько пользовательских команд, которые затем выполняются последовательно |
ExecStop |
Указывает команды или сценарии, которые должны выполняться при остановке устройства |
ExecReload |
Указывает команды или сценарии, которые должны выполняться при перезагрузке устройства |
Restart |
Если эта опция включена, служба перезапускается после выхода из ее процесса, за исключением чистой остановки systemctl командой |
RemainAfterExit |
Если установлено значение True, служба считается активной, даже если все ее процессы завершились. Значение по умолчанию — False. Эта опция особенно полезна, если служба Type=oneshot настроена (oneshot означает, что сервис должен выполнить разовую задачу и завершиться) |
Полный список параметров, настраиваемых в разделе [Service], см. в руководстве man systemd.service(5).
Важные параметры раздела [Install]#
В следующей таблице перечислены важные параметры раздела [Install].
Вариант |
Описание |
|---|---|
Alias |
Предоставляет разделенный пробелами список дополнительных имен для устройства. Большинство systemctl команд, за исключением systemctl enable, могут использовать псевдонимы вместо фактического имени устройства |
RequiredBy |
Список юнитов, которые зависят от включения. Когда этот юнит включен, юниты, перечисленные в RequiredBy, становятся Require зависимыми |
WantedBy |
Список юнитов, слабо зависящих от включения. Когда этот юнит включен, юниты, перечисленные в WantedBy, становятся Want зависимыми |
Also |
Задает список юнитов, которые необходимо установить или удалить вместе с юнитом |
DefaultInstance |
Эта опция ограничена созданными юнитами и указывает экземпляр по умолчанию, для которого включен юнит (см. раздел «Работа с юнитами systemd») |
Создание пользовательских юнитов#
Существует несколько вариантов использования создания юнитов с нуля: можно запустить пользовательский демон, создать второй экземпляр какой-либо существующей службы.
Процедура
Следующая процедура описывает общий процесс создания пользовательского сервиса:
Подготовьте исполняемый файл с пользовательской службой. Это может быть специально созданный сценарий или исполняемый файл, предоставленный поставщиком программного обеспечения. При необходимости подготовьте файл PID для хранения постоянного PID для основного процесса пользовательской службы. Также можно включить файлы среды для хранения переменных оболочки для службы. Убедитесь, что исходный сценарий является исполняемым (выполнив команду chmod a+x) и не интерактивным.
Создайте юнит-файл в /etc/systemd/system/ каталоге и убедитесь, что он имеет правильные права доступа к файлу. Выполните как root пользователь:
touch /etc/systemd/system/name.service
chmod 664 /etc/systemd/system/name.service
Замените name именем создаваемой службы. Обратите внимание, что файл должен быть исполняемым.
Откройте name.service файл, созданный на предыдущем шаге, и добавьте параметры конфигурации службы. Существует множество параметров, которые можно использовать в зависимости от типа службы.
Ниже приведен пример конфигурации устройства для сетевой службы:
[Unit]
Description=service_description
After=network.target
[Service]
ExecStart=path_to_executable
Type=forking
PIDFile=path_to_pidfile
[Install]
WantedBy=default.target
Где:
service_description — это информативное описание, которое отображается в файлах журнала и в выходных данных systemctl status команды.
Настройка After гарантирует, что служба запускается только после запуска сети. Добавьте через пробел список других соответствующих служб или целей.
path_to_executable обозначает путь к фактическому исполняемому файлу службы.
Type=forking используется для демонов, которые выполняют системный вызов fork. Основной процесс службы создается с PID, указанным в path_to_pidfile.
WantedBy указывает цель или цели, под которыми должна быть запущена служба. Думайте об этих целях как о замене старой концепции уровней выполнения.
Сообщите systemd о существовании нового name.service файла, выполнив следующую команду root пользователя:
systemctl daemon-reload
systemctl start name.service
Предупреждение: Всегда запускайте systemctl daemon-reload команду после создания новых юнит-файлов или изменения существующих юнит-файл. В противном случае команды systemctl start или systemctl enable могут завершиться ошибкой из-за несоответствия между состояниями systemd и фактических служебных юнит-файлов на диске. Обратите внимание, что в системах с большим количеством юнитов это может занять много времени, так как состояние каждого юнита должно быть сериализовано, а затем десериализовано во время перезагрузки.
Создание пользовательского юнит-файла с помощью второго экземпляра службы sshd#
Системным администраторам часто требуется настроить и запустить несколько экземпляров службы. Это делается путем создания копий исходных файлов конфигурации службы и изменения определенных параметров во избежание конфликтов с основным экземпляром службы. В следующей процедуре показано, как создать второй экземпляр службы.
Процедура
Создайте копию sshd_config файла, который будет использоваться вторым демоном:
# cp /etc/ssh/sshd{,-second}_config
Отредактируйте sshd-second_config файл, созданный на предыдущем шаге, чтобы назначить другой номер порта и файл PID второму демону:
Port 22220
PidFile /var/run/sshd-second.pid
Убедитесь, что выбранный порт не используется какой-либо другой службой. Файл PID может не существовать до запуска службы, он создается автоматически при запуске службы.
Создайте копию юнит-файла systemd для sshd службы:
# cp /usr/lib/systemd/system/sshd.service /etc/systemd/system/sshd-second.service
Измените sshd-second.service, созданный на предыдущем шаге, следующим образом:
Измените Description вариант:
Description=OpenSSH server second instance daemon
Добавьте sshd.service к службам, указанным в опции, чтобы второй экземпляр запускался только после того, как первый уже запущен:
After=syslog.target network.target auditd.service sshd.service
Первый экземпляр sshd включает генерацию ключей, поэтому удалите строку ExecStartPre=/usr/sbin/sshd-keygen.
Добавьте в команду -f /etc/ssh/sshd-second_config параметр sshd, чтобы использовался альтернативный файл конфигурации:
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
После вышеуказанных изменений sshd-second.service должен выглядеть следующим образом:
[Unit]
Description=OpenSSH server second instance daemon
After=syslog.target network.target auditd.service sshd.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D -f /etc/ssh/sshd-second_config $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
При использовании SELinux добавьте порт для второго экземпляра sshd в порты SSH, иначе второй экземпляр sshd будет отклонен для привязки к порту:
# semanage port -a -t ssh_port_t -p tcp 22220
Включите sshd-second.service, чтобы он запускался автоматически при загрузке:
# systemctl enable sshd-second.service
Убедитесь, что служба sshd-second.service запущена с помощью systemctl status команды.
Убедитесь, что порт включен правильно, подключившись к службе:
$ ssh -p 22220 user@server
Если межсетевой экран используется, убедитесь, что он правильно настроен, чтобы разрешить подключения ко второму экземпляру sshd.
Поиск описания службы systemd#
Можно найти описательную информацию о скрипте в строке, начинающейся с #description. Используйте это описание вместе с именем службы Description в опции раздела [Unit] юнит-файла. Заголовок LSB может содержать аналогичные данные в строках #Short-Description и #Description.
Поиск зависимостей службы systemd#
Заголовок LSB может содержать несколько директив, формирующих зависимости между службами. Большинство из них можно перевести в параметры юнита systemd, см. следующую таблицу.
Таблица. Параметры зависимости из заголовка LSB
Вариант младшего бита |
Описание |
Эквивалент файла юнита |
|---|---|---|
Provides |
Указывает имя загрузочного средства службы, на которое можно ссылаться в других сценариях инициализации (с префиксом $). Это больше не требуется, так как юнит-файлы относятся к другим юнитам по их именам файлов |
– |
Required-Start |
Содержит имена загрузочных средств необходимых служб. Имена загрузочных средств заменяются именами юнит-файлов соответствующих служб или целей, которым они принадлежат. Например, в случае postfix Required-Start зависимость от $network была преобразована в зависимость After от network.target |
After, Before |
Should-Start |
Представляет собой более слабые зависимости, чем Required-Start. Неудачные зависимости Should-Start не влияют на запуск службы |
After, Before |
Required-Stop,Should-Stop |
Сформировать отрицательные зависимости |
Conflicts |
Поиск целей службы по умолчанию#
Строка, начинающаяся с #chkconfig, содержит три числовых значения. Наиболее важным является первое число, представляющее уровни выполнения по умолчанию, на которых запускается служба. Сопоставьте эти уровни запуска с эквивалентными целями systemd. Затем перечислите эти цели в WantedBy опции в разделе [Install] юнит-файла. Например, postfix, ранее он запускался на уровнях запуска 2, 3, 4 и 5, что соответствует - multi-user.target и graphical.target. Обратите внимание, что graphical.target зависит от multiuser.target, поэтому нет необходимости указывать оба. Также можно найти информацию об уровнях запуска (по умолчанию и запрещенных) в строках #Default-Start и #Default-Stop в заголовке LSB.
Два других значения, указанные в строке #chkconfig, представляют собой приоритеты запуска и завершения работы сценария инициализации. Эти значения интерпретируются systemd, если он загружает сценарий инициализации, но эквивалентного юнит-файла нет.
Поиск файлов, используемых сервисом#
Сценарии инициализации требуют загрузки библиотеки функций из специального каталога и позволяют импортировать файлы конфигурации, среды и PID. Переменные среды указываются в строке, начинающейся с #config в заголовке скрипта инициализации, что соответствует EnvironmentFile параметру юнит-файла. Файл PID, указанный в строке сценария инициализации #pidfilePIDFile, импортируется в юнит-файл с параметром.
Ключевой информацией, которая не включена в заголовок сценария инициализации, является путь к исполняемому файлу службы и, возможно, некоторые другие файлы, необходимые для службы. В предыдущих версиях SberLinux сценарии инициализации использовали оператор case Bash для определения поведения службы при действиях по умолчанию, таких как start, stop или restart, а также при определенных пользователем действиях. В следующем отрывке из postfix сценария инициализации показан блок кода, который должен выполняться при запуске службы.
conf_check() {
[ -x /usr/sbin/postfix ] || exit 5
[ -d /etc/postfix ] || exit 6
[ -d /var/spool/postfix ] || exit 5
}
make_aliasesdb() {
if [ "$(/usr/sbin/postconf -h alias_database)" == "hash:/etc/aliases" ]
then
# /etc/aliases.db might be used by other MTA, make sure nothing
# has touched it since our last newaliases call
[ /etc/aliases -nt /etc/aliases.db ] ||
[ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] ||
[ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return
/usr/bin/newaliases
touch -r /etc/aliases.db "$ALIASESDB_STAMP"
else
/usr/bin/newaliases
fi
}
start() {
[ "$EUID" != "0" ] && exit 4
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 1
conf_check
# Start daemons.
echo -n $"Starting postfix: "
make_aliasesdb >/dev/null 2>&1
[ -x $CHROOT_UPDATE ] && $CHROOT_UPDATE
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockfile
echo
return $RETVAL
}
Расширяемость сценария инициализации позволила указать две пользовательские функции conf_check() и make_aliasesdb(), которые вызываются из start() функционального блока. При ближайшем рассмотрении в приведенном выше коде упоминаются несколько внешних файлов и каталогов: основной исполняемый файл службы /usr/sbin/postfix, каталоги /etc/postfix/ и /var/spool/postfix/ каталоги конфигурации, а также /usr/sbin/postconf/ каталог.
systemd поддерживает только предопределенные действия, но позволяет выполнять пользовательские исполняемые файлы с ExecStart, ExecStartPre, ExecStartPost, ExecStop и ExecReload. Вместе со /usr/sbin/postfix вспомогательными скриптами пользовательские исполняемые файлы выполняются при запуске службы. Преобразование сложных сценариев инициализации требует понимания назначения каждого оператора в сценарии. Некоторые операторы относятся к версии операционной системы, поэтому их не нужно переводить. С другой стороны, в новой среде могут потребоваться некоторые корректировки как в юнит-файле, так и в исполняемом файле службы и вспомогательных файлах.
Изменение существующих юнит-файлов#
Службы, установленные в системе, поставляются с юнит-файлами по умолчанию, которые хранятся в /usr/lib/systemd/system/ каталоге. Системные администраторы не должны изменять эти файлы напрямую, поэтому любая настройка должна ограничиваться файлами конфигурации в /etc/systemd/system/ каталоге.
Процедура:
В зависимости от степени требуемых изменений выберите один из следующих подходов:
Создайте каталог для дополнительных файлов конфигурации в /etc/systemd/system/. Этот метод рекомендуется для большинства случаев использования. Это позволяет расширить конфигурацию по умолчанию дополнительными функциями, при этом ссылаясь на исходный юнит-файл. Таким образом, изменения юнита по умолчанию, введенные при обновлении пакета, применяются автоматически.
Создайте копию исходного файла /usr/lib/systemd/system/ в /etc/systemd/system/ и внесите в него изменения. Копия переопределяет исходный файл, поэтому изменения, внесенные с обновлением пакета, не применяются. Этот метод удобен для внесения значительных изменений юнитов, которые должны сохраняться независимо от обновлений пакета.
Чтобы вернуться к конфигурации устройства по умолчанию, удалите созданные пользователем файлы конфигурации в формате /etc/systemd/system/.
Чтобы применить изменения к юнитам без перезагрузки системы, выполните:
systemctl daemon-reload
Опция daemon-reload перезагружает все юнит-файлы и воссоздает все дерево зависимостей, которое необходимо для немедленного применения любых изменений к файлу юнитов. В качестве альтернативы можно добиться того же результата с помощью следующей команды, которую необходимо выполнить как root пользователь:
init q
Если измененный юнит принадлежит работающей службе, эту службу необходимо перезапустить, чтобы принять новые настройки:
systemctl restart name.service
Например, чтобы расширить конфигурацию network службы, не изменяйте /etc/rc.d/init.d/network файл initscript. Вместо этого создайте новый каталог /etc/systemd/system/network.service.d/ и systemd файл. Затем поместите измененные значения в systemd файл. Поэтому созданный каталог должен называться: /etc/systemd/system/network.service.d/my_config.confsystemdnetworknetwork.servicenetwork.service.d
Расширение unit конфигурации по умолчанию#
В этом разделе описывается, как расширить юнит-файл по умолчанию дополнительными параметрами конфигурации.
Процедура:
Чтобы расширить юнит-файл по умолчанию дополнительными параметрами конфигурации, сначала создайте каталог конфигурации в формате /etc/systemd/system/. При расширении юнит-файла обслуживания выполните следующую команду как root пользователь:
mkdir /etc/systemd/system/name.service.d/
Замените name именем службы, которую нужно расширить. Приведенный выше синтаксис применим ко всем типам юнит-файлов.
Создайте файл конфигурации в каталоге, созданном на предыдущем шаге (обратите внимание, что имя файла должно заканчиваться суффиксом .conf):
touch /etc/systemd/system/name.service.d/config_name.conf
Замените config_name именем файла конфигурации. Этот файл придерживается обычной структуры юнит-файла, поэтому все директивы должны быть указаны в соответствующих разделах.
Например, чтобы добавить пользовательскую зависимость, создайте файл конфигурации со следующим содержимым:
[Unit]
Requires=new_dependency
After=new_dependency
Где new_dependency означает юнит-файл, который будет помечен как зависимость. Другим примером является файл конфигурации, который перезапускает службу после выхода из ее основного процесса с задержкой в 30 секунд:
[Service]
Restart=always
RestartSec=30
Рекомендуется создавать небольшие файлы конфигурации, ориентированные только на одну задачу. Такие файлы можно легко перемещать или связывать с каталогами конфигурации других служб.
Чтобы применить изменения, внесенные в устройство, выполните команду root пользователь:
systemctl daemon-reload
systemctl restart name.service
Пример. Расширение конфигурации httpd.service
Чтобы изменить юнит httpd.service таким образом, чтобы пользовательский сценарий оболочки автоматически выполнялся при запуске службы Apache, выполните следующие действия.
Создайте каталог и пользовательский файл конфигурации:
mkdir /etc/systemd/system/httpd.service.d/
При условии, что скрипт, который нужно запустить автоматически с Apache, находится по адресу /usr/local/bin/custom.sh, вставьте в custom_script.conf файл следующий текст: [Service]
ExecStartPost=/usr/local/bin/custom.sh
Чтобы применить изменения юнита, выполните:
systemctl daemon-reload
systemctl restart httpd.service
Важно
Файлы конфигурации из каталогов конфигурации /etc/systemd/system/ в /usr/lib/systemd/system/. Поэтому, если файлы конфигурации содержат параметр, который можно указать только один раз, например Description или ExecStart, значение по умолчанию для этого параметра переопределяется. Обратите внимание, что в выводе systemd-delta команды, такие единицы всегда помечаются как [EXTENDED], хотя в целом некоторые параметры фактически переопределяются.
Переопределение unit конфигурации по умолчанию#
В этом разделе описывается, как переопределить конфигурацию юнит-файла по умолчанию.
Процедура:
Чтобы внести изменения, которые сохранятся после обновления пакета, содержащего юнит-файл, сначала скопируйте файл в /etc/systemd/system/ каталог. Для этого выполните следующую команду как root пользователь:
cp /usr/lib/systemd/system/name.service /etc/systemd/system/name.service
Где name означает название юнит-файла, который нужно изменить. Приведенный выше синтаксис применим ко всем типам юнит-файлов.
Откройте скопированный файл в текстовом редакторе и внесите необходимые изменения. Чтобы применить изменения, выполните как root пользователь:
systemctl daemon-reload systemctl restart name.service
Изменение лимита времени ожидания#
Например, чтобы увеличить лимит тайм-аута для httpd сервиса:
Процедура:
Скопируйте httpd юнит-файл в /etc/systemd/system/ каталог:
cp /usr/lib/systemd/system/httpd.service /etc/systemd/system/httpd.service
Откройте файл /etc/systemd/system/httpd.service и укажите TimeoutStartUSec значение в разделе [Service]:
...
[Service]
...
PrivateTmp=true
TimeoutStartSec=10
[Install]
WantedBy=multi-user.target
...
Перезагрузите systemd демон:
systemctl daemon-reload
При необходимости проверьте новое значение тайм-аута:
systemctl show httpd -p TimeoutStartUSec
Примечание
Чтобы глобально изменить лимит тайм-аута, введите DefaultTimeoutStartSec в /etc/systemd/system.conf файле.
Мониторинг переопределенных юнит-файлов#
В этом разделе описывается, как отобразить перечень переопределенных или измененных юнит-файлов.
Процедура:
Чтобы отобразить обзор переопределенных или измененных юнит-файлов, используйте следующую команду:
systemd-delta
Например, вывод приведенной выше команды может выглядеть следующим образом:
[EQUIVALENT] /etc/systemd/system/default.target → /usr/lib/systemd/system/default.target
[OVERRIDDEN] /etc/systemd/system/autofs.service → /usr/lib/systemd/system/autofs.service
--- /usr/lib/systemd/system/autofs.service 2014-10-16 21:30:39.000000000 -0400
+ /etc/systemd/system/autofs.service 2014-11-21 10:00:58.513568275 -0500
@@ -8,7 +8,8 @@
EnvironmentFile=-/etc/sysconfig/autofs
ExecStart=/usr/sbin/automount $OPTIONS --pid-file /run/autofs.pid
ExecReload=/usr/bin/kill -HUP $MAINPID
-TimeoutSec=180
+TimeoutSec=240
+Restart=Always
[Install]
WantedBy=multi-user.target
[MASKED] /etc/systemd/system/cups.service → /usr/lib/systemd/system/cups.service
[EXTENDED] /usr/lib/systemd/system/sssd.service → /etc/systemd/system/sssd.service.d/journal.conf
4 overridden configuration files found.
Работа с юнитами systemd#
Во время выполнения можно создать несколько юнит-файлов из одного файла конфигурации шаблона. Символ @ используется для обозначения шаблона и связывания с ним юнит-файлов. Созданные юнит-файлы можно запустить из другого юнит-файла (с помощью Requires или Wants опций) или с помощью systemctl start команды. Созданные юнит-файлы называются следующим образом:
template_name@instance_name.service
Где template_name обозначает имя файла конфигурации шаблона. Замените instance_name именем экземпляра юнит-файла. Несколько экземпляров могут указывать на один и тот же файл шаблона с параметрами конфигурации, общими для всех экземпляров юнит-файлов. Имя юнит-шаблона имеет вид:
unit_name@.service
Например, следующий Wants параметр в юнит-файле:
Wants=getty@ttyA.service getty@ttyB.service
Этот параметр заставляет systemd искать заданные юнит-файлы. Если такие юниты не найдены, часть между @ и суффиксом типа игнорируется, и systemd ищет getty@.service файл, считывает из него конфигурацию и запускает службы.
Например, getty@.service шаблон содержит следующие директивы:
[Unit]
Description=Getty on %I
...
[Service]
ExecStart=-/sbin/agetty --noclear %I $TERM
...
Когда экземпляры getty@ttyA.service и getty@ttyB.service создаются из приведенного выше шаблона, Description = разрешается как Getty на ttyA и Getty на ttyB.
Важные спецификаторы systemd unit (юнитов)#
Подстановочные знаки, называемые спецификаторами unit (также - юнитов), можно использовать в любом файле конфигурации юнита. Спецификаторы юнитов заменяют определенные параметры юнитов и интерпретируются во время выполнения. В следующей таблице перечислены спецификаторы, которые особенно полезны для юнит-шаблонов.
Таблица. Важные спецификаторы systemd юнитов
Спецификатор юнитов |
Значение |
Описание |
|---|---|---|
%n |
Полное наименование юнита |
Обозначает имя юнита с удаленным тип-суффиксом. Для созданных юнитов %p означает часть имени юнита перед символом "@". |
%i |
Имя экземпляра |
Является частью имени созданного объекта между символом "@" и тип-суффиксом. Имеет то же значение, но также заменяет запрещенные символы для кодов ASCII. |
%H |
Имя хоста |
Обозначает имя хоста работающей системы на момент загрузки конфигурации устройства. |
%t |
Каталог рабочей среды |
Представляет каталог рабочей среды, который предназначен /run для root-пользователя или представляет значение переменной XDG_RUNTIME_DIR для непривилегированных пользователей |
Полный список спецификаторов юнитов см. в руководстве man systemd.unit(5).
Оптимизация systemd для сокращения времени загрузки#
Существует список файлов systemd unit (юнитов), которые включены по умолчанию. Системные службы, определенные этими юнит-файлами, автоматически запускаются при загрузке, что влияет на время загрузки.
В этом разделе описывается:
Инструменты для проверки производительности загрузки системы.
Назначение юнитов systemd, включенных по умолчанию, и обстоятельства, при которых можно безопасно отключить такие юниты systemd, чтобы сократить время загрузки.
Проверка производительности загрузки системы#
Чтобы проверить производительность загрузки системы, можно использовать команду systemd-analyze. Эта команда имеет множество доступных опций. Однако в этом разделе рассматриваются только те из них, которые могут быть важны для настройки systemd, чтобы сократить время загрузки.
Предварительные условия
Прежде чем приступить к проверке systemd, чтобы настроить время загрузки, можно просмотреть список всех включенных служб:
Сценарий:
Введите:
$ systemctl list-unit-files --state=enabled
Чтобы проанализировать общее время загрузки:
Сценарий:
Для получения общей информации о времени, затраченном на последнюю успешную загрузку, используйте:
$ systemd-analyze
Чтобы проанализировать время инициализации юнит-файлов:
Сценарий:
Для получения информации о времени инициализации каждого юнита systemd используйте:
$ systemd-analyze blame
В выходных данных перечислены устройства в порядке убывания в соответствии со временем, затраченным на инициализацию во время последней успешной загрузки.
Для определения критических юнит-файлов:
Сценарий:
Чтобы определить юнит-файлы, инициализация которых заняла больше всего времени при последней успешной загрузке, используйте:
$ systemd-analyze critical-chain
На выходе красным цветом выделяются юнит-файлы, которые критически замедляют загрузку.

Рисунок. Выходные данные команды systemd-analyze critical-chain
Руководство по выбору служб, которые можно безопасно отключить#
Если время загрузки слишком велико, можно сократить его, отключив некоторые службы, включенные при загрузке по умолчанию.
Чтобы перечислить такие службы, выполните:
$ systemctl list-unit-files --state=enabled
Чтобы отключить службу, выполните:
systemctl disable service_name
Однако некоторые службы должны оставаться включенными, чтобы операционная система была безопасной и функционировала.
Можно использовать приведенную ниже таблицу в качестве руководства по выбору служб, которые можно безопасно отключить. В таблице перечислены все службы, включенные по умолчанию при минимальной установке SberLinux, и для каждой службы указано, можно ли безопасно отключить эту службу. В таблице также содержится дополнительная информация об обстоятельствах отключения службы или о причине, по которой не нужно отключать службу.
Таблица. Службы, включенные по умолчанию при минимальной установке SberLinux
Название службы |
Возможность отключения |
Дополнительная информация |
|---|---|---|
auditd.service |
ДА |
Отключите auditd.service только в том случае, если не нужны сообщения аудита от ядра. Если отключится auditd.service, файл /var/log/audit/audit.log не создается. Следовательно, не получится ретроактивно просмотреть некоторые часто просматриваемые действия или события, такие как вход пользователя в систему, запуск службы или смена пароля. Также обратите внимание, что auditd состоит из двух частей: части ядра и самой службы. Используя команду systemctl disable auditd, отключите только службу, но не часть ядра. Чтобы полностью отключить системный аудит, установите audit=0 в командной строке ядра. Чтобы отобразить параметры командной строки ядра, заданные для текущей загруженной системы, используйте любую из следующих команд: sysctl -a sysctl -a |
autovt@.service |
НЕТ |
Конфигурация по умолчанию устанавливается во время компиляции и настраивается только тогда, когда необходимо отклониться от этих значений по умолчанию, поэтому ее отключать не нужно. По умолчанию, autovt@.service связан с getty@.service . Запросы на вход запускаются динамически, когда пользователь переключается на неиспользуемые виртуальные терминалы, и этот параметр определяет, сколько учетных записей gettys доступно VTS. |
crond.сервис |
ДА |
Имейте в виду, что никакие элементы из crontab не будут запускаться, если crond.service будет отключена |
dbus-org.fedoraproject.FirewallD1.service |
ДА |
Символическая ссылка на firewalld.service |
dbus-org.freedesktop.NetworkManager.service |
ДА |
Символическая ссылка на NetworkManager.service |
dbus-org.freedesktop.nm-dispatcher.service |
ДА |
Символическая ссылка на NetworkManager-dispatcher.service |
firewalld.service |
ДА |
Отключите firewalld.service только в том случае, если не нужен межсетевой экран |
getty@.service |
НЕТ |
Отключать небезопасно, поскольку доступ к консоли - это то, к чему обращается пользователь, когда другие средства доступа к серверу не работают |
import-state.service |
ДА |
Отключите import-state.service только в том случае, если не нужно загружаться из сетевого хранилища |
irqbalance.service |
ДА |
Отключите irqbalance.service только если задействован один процессор. Не отключайте irqbalance.service в системах с несколькими процессорами |
kdump.servicedmodules.service |
ДА |
Эта служба не запускается до тех пор, пока каталог /etc/rc.modules/etc/sysconfig/modules существует, а значит он не запускается при минимальной установке SberLinux |
lvm2-monitor.service |
ДА |
Отключите lvm2-monitor.service только в том случае, если не используете диспетчер логических томов (LVM) |
microcode.service |
НЕТ |
Не отключайте службу, поскольку она предоставляет обновления программного обеспечения микрокода в CPU |
NetworkManager-dispatcher.service |
ДА |
Отключите NetworkManager-dispatcher.service только в том случае, если не нужны уведомления об изменениях конфигурации сети (например, в статических сетях) |
NetworkManager-wait-online.service |
ДА |
Отключите NetworkManager-wait-online.service только в том случае, если не нужно рабочее сетевое подключение, доступное сразу после загрузки. Если служба включена, система не завершит загрузку до того, как сетевое подключение заработает. Это может значительно увеличить время загрузки |
NetworkManager.service |
ДА |
Отключите NetworkManager.service только в том случае, если не нужно подключение к сети |
nis-domainname.service |
ДА |
Отключите nis-domainname.service только в том случае, если не используете службу сетевой информации (NIS) |
rhsmcertd.service |
НЕТ |
- |
rngd.service |
ДА |
Отключите rngd.service только в том случае, если не нужно много энтропии в системе или нет какого-либо аппаратного генератора. Обратите внимание, что служба необходима в средах, требующих высокой энтропии, таких как системы, используемые для генерации сертификатов X.509 (например, сервер FreeIPA) |
rsyslog.service |
ДА |
Отключите rsyslog.service только в том случае, если не нужны постоянные журналы или systemd-journaldперешел в постоянный режим |
selinux-autorelabel-mark.service |
ДА |
Отключите selinux-autorelabel-mark.service только в том случае, если не используете SELinux |
sshd.service |
ДА |
Отключите sshd.service только в том случае, если не нужны удаленные входы в систему с помощью сервера OpenSSH. |
sssd.service |
ДА |
Отключите sssd.service только в том случае, если нет пользователей, которые входят в систему по сети (например, с помощью LDAP или Kerberos). Рекомендуется отключить все sssd-* юниты, если отключите sssd.service. Можно настроить SSSD для преобразования пользовательских домашних каталогов в нижний регистр. Это помогает лучше интегрироваться с чувствительностью к регистру среды ОС. Опция в override_homedir разделе [nss] файла распознает /etc/sssd/sssd.conf значение шаблона. При использовании %h как части определения SSSD заменяется %h домашним каталогом пользователя override_homedir%h в нижнем регистре |
syslog.service |
ДА |
Псевдоним для rsyslog.service |
tuned.service |
ДА |
Отключите tuned.service только в том случае, если действительно нужно использовать настройку производительности |
lvm2-lvmpolld.socket |
ДА |
Отключите lvm2-lvmpolld.socket только в том случае, если не используете диспетчер логических томов (LVM) |
dnf-makecache.timer |
ДА |
Отключите dnf-makecache.timer только в том случае, если не нужно, чтобы метаданные пакета обновлялись автоматически |
unbound-anchor.timer |
ДА |
Отключите unbound-anchor.timer только в том случае, если не требуется ежедневного обновления корневого ключа для якоря доверия, отвечающего за расширение безопасности DNS (DNSSEC). Этот якорь доверия используется несвязанным распознавателем и библиотекой распознавателей для проверки DNSSEC |
Чтобы найти дополнительную информацию о службе, выполните одну из следующих команд:
$ systemctl cat <service_name>
$ systemctl help <service_name>
Команда systemctl cat предоставляет содержимое служебного файла, расположенного в файле /usr/lib/systemd/system/
Для получения дополнительной информации введите:
systemctl help
Команда systemctl help показывает справочную страницу конкретной службы.
Дополнительные ресурсы:
Справочные страницы: systemctl(1), systemd(1), systemd-delta(1), systemd.directives(7), systemd.unit(5), systemd.service(5), systemd.target(5), systemd.kill(5).
Домашняя страница systemd
Введение в управление учетными записями пользователей и групп#
Контроль пользователей и групп является ключевым элементом системного администрирования SberLinux. Каждый пользователь SberLinux имеет отдельные учетные данные для входа и может быть назначен различным группам для настройки их системных привилегий.
Знакомство с пользователями и группами#
Пользователь, создающий файл, является владельцем этого файла и владельцем группы этого файла. Файлу назначаются отдельные разрешения на чтение, запись и выполнение для владельца, группы и тех, кто находится за пределами этой группы. Владелец файла может быть изменен только root пользователем. Права доступа к файлу могут быть изменены как root пользователем, так и владельцем файла. Обычный пользователь может изменить групповое право собственности на файл и на группу, членом которой является.
Каждому пользователю присваивается уникальный числовой идентификационный номер, называемый идентификатором пользователя (UID). Каждая группа связана с идентификатором группы (GID). Пользователи внутри группы имеют одинаковые разрешения на чтение, запись и выполнение файлов, принадлежащих этой группе.
Настройка зарезервированных идентификаторов пользователей и групп#
Можно найти зарезервированные идентификаторы пользователей и групп в setup пакете. Чтобы просмотреть зарезервированные идентификаторы пользователей и групп, используйте:
cat /usr/share/doc/setup*/uidgid
Рекомендуется назначать идентификаторы новым пользователям и группам, начиная с 5000, так как зарезервированный диапазон может увеличиться в будущем.
Чтобы идентификаторы, назначаемые новым пользователям, по умолчанию начинались с 5000, измените параметры UID_MIN и GID_MIN в /etc/login.defs файле.
Сценарий:
Чтобы идентификаторы, назначаемые новым пользователям, по умолчанию начинались с 5000:
Откройте файл /etc/login.defs в редакторе по выбору.
Найдите строки, которые определяют минимальное значение для автоматического выбора идентификатора пользователя.
# Min/max values for automatic uid selection in userad
#
UID_MIN 1000
Измените UID_MIN значение, чтобы оно начиналось с 5000.
# Min/max values for automatic uid selection in useradd
#
UID_MIN 5000
Найдите строки, которые определяют минимальное значение для автоматического выбора GID.
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
Измените GID_MIN значение, чтобы оно начиналось с 5000.
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 1000
Динамически назначаемые UID и GID для обычных пользователей начинаются с 5000.
Примечание
Идентификаторы UID и GID пользователей и групп, созданные до изменения значений UID_MIN и GID_MIN, не изменяются. Это позволит новой группе пользователей иметь тот же идентификатор 5000+, что UID и GID.
Частные группы пользователей#
SberLinux использует конфигурацию системы user private group (UPG), что упрощает управление группами UNIX. Личная группа пользователей создается всякий раз, когда в систему добавляется новый пользователь. Частная группа пользователей имеет то же имя, что и пользователь, для которого она была создана, и этот пользователь является единственным членом частной группы пользователей.
UPG упрощают совместную работу над проектом между несколькими пользователями. Кроме того, конфигурация системы UPG позволяет безопасно устанавливать разрешения по умолчанию для вновь созданного файла или каталога, поскольку это позволяет как пользователю, так и группе, в которую входит этот пользователь, вносить изменения в файл или каталог.
Список всех групп хранится в файле конфигурации /etc/group.
Управление пользователями из командной строки#
Добавление нового пользователя из командной строки#
В этом разделе описано, как использовать useradd утилиту для добавления нового пользователя.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы добавить нового пользователя, используйте команду:
useradd *options* *username*
Замените эти параметры параметрами командной строки для useradd команды и замените username именем пользователя.
Пример. Добавление нового пользователя:
Чтобы добавить пользователя maria с идентификатором пользователя 5000, используйте:
+
useradd -u 5000 maria
Этапы проверки:
Чтобы проверить, добавлен ли новый пользователь, воспользуйтесь id утилитой.
# id maria
Результат:
uid=5000(maria) gid=5000 (maria) groups=5000(maria)
Дополнительные ресурсы:
Справочная страница: man useradd.
Добавление новой группы из командной строки#
В этом разделе описано, как использовать groupadd утилиту для добавления новой группы.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы добавить новую группу, используйте:
# groupadd options group-name
Замените параметры параметрами командной строки для groupadd команды и замените group-name именем группы.
Пример. Добавление новой группы:
Чтобы добавить группу sysadminsс идентификатором группы 5000, используйте:
+
groupadd -g 5000 sysadmins
Этапы проверки:
Чтобы проверить, добавлена ли новая группа, воспользуйтесь tail утилитой.
# tail /etc/group
Результат:
sysadmins:x:5000:
Дополнительные ресурсы:
Справочная страница: groupadd.
Добавление пользователя в дополнительную группу из командной строки#
Можно добавить пользователя в дополнительную группу, чтобы управлять разрешениями или разрешать доступ к определенным файлам или устройствам.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы добавить группу в дополнительные группы пользователя, используйте:
# usermod --append -G group-name username
Замените group-name на необходимое имя группы, а username на имя пользователя.
Пример. Добавление пользователя в дополнительную группу:
Чтобы добавить пользователя sysadmin в группу system-administrators, используйте:
usermod --append -G system-administrators sysadmin
Этапы проверки:
Чтобы убедиться, что новые группы добавлены в дополнительные группы пользователя sysadmin, используйте:
# groups sysadmin
Выходные данные:
sysadmin : sysadmin system-administrators
Создание каталога группы#
В соответствии с конфигурацией системы UPG можно применить разрешение set-group identification (бит setgid) к каталогу. Этот бит setgid упрощает управление групповыми проектами, которые совместно используют каталог. Когда бит setgid применяется к каталогу, файлы, созданные в этом каталоге, автоматически присваиваются группе, которой принадлежит этот каталог. Любой пользователь, имеющий разрешение на запись и выполнение в этой группе, может создавать, изменять и удалять файлы в каталоге.
В этом разделе описывается, как создавать групповые каталоги.
Предварительные условия:
Права root пользователя.
Процедура:
Создайте каталог:
# mkdir directory-name
Замените directory-name именем необходимого каталога.
Создайте группу:
# groupadd group-name
Замените group-name на название необходимой группы.
Добавьте пользователей в группу:
# usermod --append -G group-name username
Замените group-name на имя необходимой группы, а username - на имя пользователя.
Свяжите пользователя и группу, владеющих каталогом, с группой group-name:
# chown :group-name directory-name
Замените group-name именем необходимой группы и замените directory-name именем необходимого каталога.
Установите разрешения на запись, чтобы разрешить пользователям создавать и изменять файлы и каталоги, и установите setgid бит, чтобы это разрешение применялось в каталоге с именем каталога:
# chmod g+rwxs directory-name
Замените directory-name именем каталога.
Теперь все члены group-name группы могут создавать и редактировать файлы в directory-name каталоге. Вновь созданные файлы сохраняют право собственности группы group-name.
Этапы проверки:
Чтобы проверить правильность установленных разрешений, используйте:
# ls -ld directory-name
Замените directory-name необходимым именем каталога.
Результат:
drwxrwsr-x. 2 root group-name 6 Nov 25 08:45 directory-name
Редактирование групп пользователей с помощью командной строки#
Пользователь принадлежит к определенному набору групп, которые позволяют логически собирать пользователей с одинаковым доступом к файлам и папкам. Можно редактировать основные и дополнительные группы пользователей из командной строки, чтобы изменить права доступа пользователя.
Основные и дополнительные группы пользователей#
Группа - это организация, которая объединяет несколько учетных записей пользователей для общей цели, такой как предоставление доступа к определенным файлам.
В Linux группы пользователей могут выступать в качестве основных или дополнительных. Основные и дополнительные группы обладают следующими свойствами:
Первичная группа
У каждого пользователя всегда есть только одна основная группа.
Можно изменить основную группу пользователя.
Дополнительные группы
Можно добавить существующего пользователя в существующую дополнительную группу, чтобы управлять пользователями с теми же правами безопасности и доступа внутри группы.
Пользователи могут быть членами нулевой или нескольких дополнительных групп.
Список основных и дополнительных групп пользователя#
Можно составить список групп пользователей, чтобы узнать, к каким основным и дополнительным группам они принадлежат.
Процедура:
Отобразите имена основной и любой дополнительной группы пользователя:
$ groups user-name
Замените user-name именем пользователя. Если не укажете имя пользователя, команда отобразит членство в группе для текущего пользователя. Первая группа - это основная группа, за которой следуют необязательные дополнительные группы.
Пример. Список групп для пользователя maria:
$ groups maria
Выходные данные:
maria : maria wheel developer
Пользователь maria имеет основную группу maria и является членом дополнительных групп wheel и developer.
Изменение основной группы пользователя#
Можно изменить основную группу существующего пользователя на новую группу.
Предварительные условия:
Права root пользователя.
Новая группа должна существовать
Процедура:
Измените основную группу пользователя:
# usermod -g group-name user-name
Замените group-name именем новой основной группы и замените user-name именем пользователя.
Важно
Когда меняете основную группу пользователя, команда также автоматически изменяет групповое право собственности на все файлы в домашнем каталоге пользователя на новую основную группу. Установите вручную групповое право собственности на файлы за пределами домашнего каталога пользователя.
Пример. Пример изменения основной группы пользователя:
Если пользователь maria принадлежит к основной группе maria1, и нужно изменить основную группу пользователя на maria2, используйте:
usermod -g maria2 maria
Этапы проверки:
Убедитесь, что основная группа пользователя изменена:
$ groups maria
Выходные данные:
maria : maria2
Добавление пользователя в дополнительную группу из командной строки#
Можно добавить пользователя в дополнительную группу, чтобы управлять разрешениями или разрешать доступ к определенным файлам или устройствам.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы добавить группу в дополнительные группы пользователя, используйте:
# usermod --append -G group-name username
Замените group-name на имя группы, а username на имя пользователя.
Пример. Добавление пользователя в дополнительную группу
Чтобы добавить пользователя sysadmin в группу system-administrators, используйте:
usermod --append -G system-administrators sysadmin
Этапы проверки:
Чтобы убедиться, что новые группы добавлены в дополнительные группы пользователя sysadmin, используйте:
# groups sysadmin
Выходные данные:
sysadmin : sysadmin system-administrators
Удаление пользователя из дополнительной группы#
Можно удалить существующего пользователя из дополнительной группы, чтобы ограничить его права доступа или доступ к файлам и устройствам.
Предварительные условия:
Права root пользователя.
Процедура:
Удалите пользователя из дополнительной группы:
# gpasswd -d user-name group-name
Замените user-name именем пользователя и замените group-name именем дополнительной группы.
Пример. Удаление пользователя из дополнительной группы
Если пользователь maria имеет основную группу maria2 и принадлежит к дополнительным группам wheel и developers, и нужно удалить этого пользователя из группы developers, используйте:
gpasswd -d maria developers
Этапы проверки:
Убедитесь, что пользователь maria удален из дополнительной группы разработчиков:
$ groups maria
Выходные данные:
maria : maria2 wheel
Изменение всех дополнительных групп пользователя#
Можно перезаписать список дополнительных групп, членом которых пользователь должен остаться.
Предварительные условия:
Права root пользователя.
Дополнительные группы должны существовать.
Процедура:
Перезапишите список дополнительных групп пользователя:
# usermod -G group-names username
Замените group-names на названия одной или нескольких дополнительных групп. Чтобы добавить пользователя сразу в несколько дополнительных групп, разделяйте названия групп запятыми без пробелов. Например: wheel, developer.
Замените username именем пользователя.
Примечание
Если пользователь в данный момент является членом группы, которая не указана, команда удаляет пользователя из группы.
Пример. Изменение списка дополнительных групп пользователя
Если пользователь maria имеет основную группу maria2 и принадлежит к дополнительной группе wheel, и чтобы пользователь принадлежал еще к трем дополнительным группам developer, sysadmin, и security, используйте:
usermod -G wheel,developer,sysadmin,security maria
Этапы проверки:
Убедитесь, что список дополнительных групп задан правильно:
# groups maria
Выходные данные:
maria : maria2 wheel developer sysadmin security
Дополнительные ресурсы:
Справочные страницы: man useradd(8), man passwd(1), и man usermod(8).
Управление доступом sudo#
Системные администраторы могут предоставлять доступ sudo, чтобы разрешить не root пользователям выполнять административные команды, которые обычно зарезервированы для root пользователя. В результате не root пользователи могут выполнять такие команды, не входя в учетную запись root пользователя.
Авторизация пользователей в sudoers#
Файл /etc/sudoers указывает, какие пользователи могут запускать команды с помощью команды sudo. Правила могут применяться как к отдельным пользователям, так и к группам пользователей. Также можно использовать псевдонимы, чтобы упростить определение правил для групп хостов, команд и даже пользователей. Псевдонимы по умолчанию определены в первой части файла /etc/sudoers.
Когда пользователь пытается использовать права sudo доступа для выполнения команды, которая не разрешена в файле /etc/sudoers, система записывает содержащееся сообщение журнала username : user NOT in sudoers.
Файл /etc/sudoers по умолчанию содержит информацию и примеры авторизации. Активируйте конкретное примерное правило, удалив символ # комментария из начала строки. Раздел авторизации, относящийся к пользователю, отмечен следующим введением:
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
Можно использовать следующий формат для создания новых sudoers авторизации и изменять существующие авторизации:
username hostname=path/to/command
Где:
username- это имя пользователя или группы, например, user1 или %group1.
hostname - это имя хоста, к которому применяется правило.
path/to/command - это полный абсолютный путь к команде. Можно ограничить пользователя выполнением команды только с определенными параметрами и аргументами, добавив эти параметры после пути к команде. Если не указано никаких параметров, пользователь может использовать команду со всеми параметрами.
Можно заменить любую из этих переменных на ALL, чтобы применить правило ко всем пользователям, хостам или командам.
Важно
С правилами, снимающими любые ограничения, такими как ALL ALL=(ALL) ALL, все пользователи могут запускать все команды как все пользователи на всех хостах. Это может привести к угрозам безопасности.
Можно указать аргументы отрицательно, используя ! команду. Например, !root используется для указания всех пользователей, кроме root пользователя. Обратите внимание, что использование списков разрешений для разрешения определенных пользователей, групп и команд более безопасно, чем использование списков блокировки для запрета определенных пользователей, групп и команд. Используя списки разрешений, блокируйте новых неавторизованных пользователей или группы.
Важно
Избегайте использования отрицательных правил для команд, поскольку пользователи могут обойти такие правила, переименовав команды с помощью alias команды.
Система считывает файл /etc/sudoers от начала до конца. Поэтому, если файл содержит несколько записей для пользователя, записи применяются по порядку. В случае конфликтующих значений система использует последнее совпадение, даже если это не самое конкретное совпадение.
Предпочтительный способ добавления новых правил sudoers - это создание новых файлов в каталоге /etc/sudoers.d/ вместо ввода правил непосредственно в файл /etc/sudoers. Это связано с тем, что содержимое этого каталога сохраняется во время обновления системы. Кроме того, легче исправить любые ошибки в отдельных файлах, чем в файле /etc/sudoers. Система считывает файлы в каталоге /etc/sudoers.d, когда доходит до следующей строки в файле /etc/sudoers:
#includedir /etc/sudoers.d
Обратите внимание, что номерной знак # в начале этой строки является частью синтаксиса и не означает, что строка является комментарием. Имена файлов в этом каталоге не должны содержать .(точки) и не должны заканчиваться ~(тильдой).
Предоставление доступа sudo пользователю#
Системные администраторы могут предоставлять sudo доступ, позволяющий не root пользователям выполнять административные команды. Команда sudo предоставляет пользователям административный доступ без использования пароля root пользователя.
Когда пользователям необходимо выполнить административную команду, они могут это сделать с помощью команды sudo. Эта команда дает пользователю некоторые права root пользователя.
Существуют следующие ограничения:
Только пользователи, перечисленные в конфигурационном файле /etc/sudoers, могут использовать sudo команду.
Команда выполняется в командной строке пользователя, а не в командной строке root пользователя.
Предварительные условия:
Права root пользователя.
Процедура:
Как пользователь root, откройте /etc/sudoers файл.
# visudo
Файл /etc/sudoers определяет политики, применяемые командой sudo.
В файле /etc/sudoers найдите строки, которые предоставляют доступ sudo пользователям в административной wheel группе.
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
Убедитесь, что строка, начинающаяся с %wheel, не имеет перед собой символа комментария #.
Сохраните все изменения и выйдите из редактора.
Добавьте пользователей, которым нужно предоставить доступ sudo, в административную группу wheel.
Замените username на имя пользователя.
# usermod --append -G wheel username
Этапы проверки:
Убедитесь, что пользователь добавлен в административную группу wheel:
# id username
uid=5000(username) gid=5000(_username) groups=5000(username),10(wheel)
Разрешение непривилегированным пользователям запускать определенные команды#
Можно настроить политику, которая позволяет непривилегированному пользователю запускать определенную команду на определенной рабочей станции. Чтобы настроить эту политику, необходимо создать и отредактировать файл в справочник sudoers.d.
Предварительные условия:
Права root пользователя.
Процедура:
Как root, создайте новый sudoers.d каталог под /etc/:
# mkdir -p /etc/sudoers.d/
Создайте новый файл в каталоге /etc/sudoers.d:
# visudo -f /etc/sudoers.d/file-name
Замените file-name именем файла, который нужно создать. Файл откроется автоматически.
Добавьте следующую строку во вновь созданный файл:
username hostname = /path/to/the/command
Замените username на имя пользователя.
Замените hostname именем хоста.
Замените /path/to/the/command на абсолютный путь к команде (например, на /usr/bin/yum).
Сохраните все изменения и выйдите из редактора.
Пример. Предоставление непривилегированному пользователю возможности устанавливать программы с помощью yum
Разрешите пользователю maria устанавливать программы на рабочую станцию localhost.localdomain с помощью утилит yum с привилегиями sudo, используйте:
Как root, создайте новый каталог sudoers.d в /etc/:
# mkdir -p /etc/sudoers.d/
Создайте новый файл в каталоге /etc/sudoers.d:
# visudo -f /etc/sudoers.d/maria
Файл откроется автоматически.
Добавьте файл /etc/sudoers.d/maria в следующую строку:
maria localhost.localdomain = /usr/bin/yum
Убедитесь, что два пути к командам разделены , (запятой), за которой следует пробел.
При необходимости, чтобы получать уведомления по электронной почте каждый раз, когда пользователь maria пытается использовать привилегии sudo, добавьте в файл следующие строки:
Defaults mail_always
Defaults mailto="email@domain.ru"
Чтобы проверить, может ли пользователь maria выполнить yum команду с привилегиями sudo, переключите учетную запись:
# su maria -
Введите sudo yum команду:
$ sudo yum
[sudo] password for maria:
Введите пароль sudo для пользователя maria. Система отобразит список команд yum и разделов (опций):
...
usage: yum [options] COMMAND
...
Если получено сообщение maria is not in the sudoers file. This incident will be reported., значит настройка была выполнена неправильно. Убедитесь, что процедура root выполнена правильно и по инструкциям.
Изменение и сброс root пароля#
Если существующий root-пароль забыт или больше не удовлетворяет пользователя, можно изменить или сбросить этот пароль, как с root полномочиями, так и без root-полномочий.
Изменение пароля root в качестве пользователя root#
В этом разделе описывается, как использовать команду passwd для изменения пароля root от имени пользователя root.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы изменить пароль root, используйте:
# passwd
Изменение или сброс забытого пароля root в качестве пользователя без полномочий root#
В этом разделе описывается, как использовать команду passwd для изменения или сброса забытого пароля root в качестве пользователя, не являющегося root-пользователем.
Предварительные условия:
Можно войти в систему как обычный пользователь, без root прав.
Получена административная wheel группа.
Процедура:
Чтобы изменить или сбросить пароль root от имени пользователя, не являющегося пользователем root, принадлежащего к wheel группе, используйте:
$ sudo passwd root
Будет предложено ввести текущий не root пароль, прежде чем появится возможность изменить пароль root.
Сброс пароля root при загрузке#
Если не получается войти в систему, как обычный пользователь или отсутствует непринадлежность к административной группе wheel, можно сбросить пароль root при загрузке, переключившись в специализированную среду chroot jail.
Процедура:
Перезагрузите систему и на экране загрузки GRUB 2 нажмите клавишу e, чтобы прервать процесс загрузки. Появятся параметры загрузки ядра.
load_video
set gfx_payload=keep
insmod gzio
linux ($root)/vmlinuz-4.18.0-80.e18.x86_64 root=/dev/mapper/sberlinux-root ro crash\
kernel=auto resume=/dev/mapper/sberlinux-swap rd.lvm.lv/swap rhgb quiet
initrd ($root)/initramfs-4.18.0-80.e18.x86_64.img $tuned_initrd
Перейдите к концу строки, которая начинается с linux.
linux ($root)/vmlinuz-4.18.0-80.e18.x86_64 root=/dev/mapper/sberlinux-root ro crash\
kernel=auto resume=/dev/mapper/sberlinux-swap rd.lvm.lv/swap rhgb quiet
Нажмите Ctrl+e, чтобы перейти к концу строки.
Добавьте rd.break в конец строки, которая начинается с linux.
linux ($root)/vmlinuz-4.18.0-80.e18.x86_64 root=/dev/mapper/sberlinux-root ro crash\
kernel=auto resume=/dev/mapper/sberlinux-swap rd.lvm.lv/swap rhgb quiet rd.break
Нажмите Ctrl+x для запуска системы с измененными параметрами. В switch_root появится подсказка.
Перемонтируйте файловую систему как доступную для записи:
mount -o remount,rw /sysroot
Файловая система в каталоге монтируется как доступная только для чтения/ sysroot. Переустановка файловой системы как доступной для записи позволяет изменить пароль.
Войдите в среду chroot:
chroot /sysroot
Появится подсказка sh-4.4#.
Сбросьте root пароль:
passwd
Следуйте инструкциям, отображаемым в командной строке, чтобы завершить смену root пароля.
Включите процесс повторной маркировки SELinux при следующей загрузке системы:
touch /.autorelabel
Выйдите из chroot окружения:
exit
Выйдите из командной строки switch_root:
exit
Дождитесь завершения процесса повторной маркировки SELinux. Обратите внимание, что повторная маркировка большого диска может занять много времени. По завершении процесса система автоматически перезагружается.
Этапы проверки:
Чтобы убедиться, что пароль root успешно изменен, войдите в систему как обычный пользователь и откройте терминал.
Запустите интерактивную оболочку от имени пользователя root:
$ su
Введите свой новый пароль root.
Выведите имя пользователя, связанное с текущим действующим идентификатором пользователя:
whoami
Результат:
root
Управление правами доступа к файлам#
Права доступа к файлам определяют способность учетных записей пользователей и групп просматривать, изменять, получать доступ и выполнять содержимое файлов и каталогов.
Каждый файл или каталог имеет три уровня владения:
Пользователь-владелец (u).
Владелец группы (g).
Другие (o).
Каждому уровню владения могут быть назначены следующие разрешения:
Чтение (r).
Запись (w).
Выполнение (x).
Обратите внимание, что разрешение на выполнение для файла позволяет выполнить этот файл. Разрешение на выполнение для каталога позволяет получить доступ к содержимому каталога, но не выполнить его.
Когда создается новый файл или каталог, ему автоматически назначается набор разрешений по умолчанию. Разрешения по умолчанию для файла или каталога зависят от двух факторов:
Базовое разрешение.
Маска режима создания пользовательского файла (umask).
Базовые права доступа к файлам#
Разрешение |
Символьное значение |
Восьмеричное значение |
|---|---|---|
Отсутствие разрешения |
— |
0 |
Выполнение |
–x |
1 |
Запись |
-w- |
2 |
Запись и выполнение |
-wx |
3 |
Чтение |
r– |
4 |
Чтение и выполнение |
r-x |
5 |
Чтение и запись |
rw- |
6 |
Чтение, запись, выполнение |
rwx |
7 |
Базовым разрешением для каталога является 777(drwxrwxrwx), которое предоставляет всем разрешения на чтение, запись и выполнение. Это означает, что владелец каталога, группа и другие пользователи могут просматривать содержимое каталога, создавать, удалять и редактировать элементы внутри каталога, а также переходить в него.
Обратите внимание, что отдельные файлы в каталоге могут иметь свои собственные разрешения, которые могут помешать редактировать их, несмотря на неограниченный доступ к каталогу.
Базовым разрешением для файла является 666(-rw-rw-rw-), оно предоставляет всем права на чтение и запись. Это означает, что владелец файла, группа и другие пользователи могут читать и редактировать файл.
Пример. Разрешения для файла
Если файл имеет следующие разрешения:
$ ls -l
-rwxrw----. 1 sysadmins sysadmins 2 Mar 2 08:43 file
Где:
- < одинарное тире> указывает, что это файл.
rwx указывает, что владелец файла имеет разрешения на чтение, запись и выполнение файла.
rw- указывает, что группа имеет разрешения на чтение и запись, но не на выполнение файла.
— указывает, что другие пользователи не имеют прав на чтение, запись или выполнение файла.
. <точка> указывает, что для файла задан контекст безопасности SELinux.
Пример. Разрешения для каталога
Если каталог имеет следующие разрешения:
$ ls -dl directory
drwxr-----. 1 sysadmins sysadmins 2 Mar 2 08:43 directory
d указывает, что это каталог.
rwx указывает, что владелец каталога имеет разрешения на чтение, запись и доступ к содержимому каталога.
Как владельцу каталога, можно перечислять элементы (файлы, подкаталоги) внутри каталога, получать доступ к содержимому этих элементов и изменять их.
r– указывает, что группа имеет разрешения на чтение, но не на запись или доступ к содержимому каталога.
Как члену группы, которой принадлежит каталог, можно перечислить элементы внутри каталога. Без получения доступа к информации об элементах в каталоге или возможности их изменить.
— указывает, что другие пользователи не имеют прав на чтение, запись или доступ к содержимому каталога.
Как лицу, не являющееся владельцем пользователя или группы каталога, отсутствует возможность перечислять элементы в каталоге, получать доступ к информации об этих элементах или изменять их.
.<точка> указывает, что для каталога установлен контекст безопасности SELinux.
Примечание
Базовое разрешение, которое автоматически назначается файлу или каталогу, и не является разрешением по умолчанию в конце файла или каталога. Когда создается файл или каталог, базовое разрешение изменяется с помощью umask. Комбинация базового разрешения и umask создает разрешение по умолчанию для файлов и каталогов.
Маска пользовательского режима создания файлов#
Маска режима создания пользовательского файла (umask) - переменная, управляющая тем, как устанавливаются права доступа к файлам для вновь созданных файлов и каталогов. umask автоматически удаляет разрешения из базового значения разрешений, чтобы повысить общую безопасность системы Linux. Маска создания файла (umask) может быть установлена с использованием восьмеричной или символической записи.
Число |
Символьное значение |
Восьмеричное значение |
|---|---|---|
Чтение, запись и выполнение |
rwx |
0 |
Чтение и запись |
rw- |
1 |
Чтение и выполнение |
r-x |
2 |
Чтение |
r– |
3 |
Запись и выполнение |
-wx |
4 |
Запись |
-w- |
5 |
Выполнение |
–x |
6 |
Отсутствие разрешения |
— |
7 |
umask для обычного пользователя это 0002. Значение по умолчанию umask для root пользователь является 0022.
Первая цифра в umask представляет специальные разрешения (sticky bit,). Последние три цифры umask представляют разрешения, которые удалены у пользователя-владельца (u), владелец группы (g), и другие (o) соответственно.
Права доступа к файлам по умолчанию#
Числа по умолчанию устанавливаются автоматически для всех вновь создаваемых файлов и каталогов. Значение разрешений по умолчанию определяется путем применения umask к базовому разрешению.
Числовое обозначение |
Символьное обозначение |
Описание |
|---|---|---|
400 |
-r-------- |
Владелец файла может только читать файл. Для всех остальных все действия с файлом запрещены |
644 |
-rw-r–r– |
Все пользователи могут читать файл. Владелец может изменять файл |
660 |
-rw-rw---- |
Владелец и группа могут читать и изменять файл. Для всех остальных все действия с файлом запрещены |
664 |
-rw-rw-r– |
Все могут читать файл. Владелец и группа могут изменять |
666 |
-rw-rw-rw- |
Все могут читать и изменять файл |
700 |
-rwx------ |
Владелец может читать, изменять и запускать файл. Для всех остальных все действия с файлом запрещены |
744 |
-rwxr–r– |
Все могут читать файл. Владелец может также изменять и запускать файл |
755 |
-rwxr-xr-x |
Все могут читать и запускать файл. Владелец может также изменять файл |
777 |
-rwxrwxrwx |
Все пользователи могут читать, изменять и записывать файл |
Пример. Разрешения по умолчанию для каталога, созданного обычным пользователем
Когда обычный пользователь создает новый каталог (directory), для umask устанавливается значение 002(rwxrwxr-x), а для базовых разрешений созданного каталога устанавливается значение 777(rwxrwxrwx). Каталог получает разрешения по умолчанию и для 775(drwxrwxr-x). Полученные, в результате этого, разрешения представлены в таблице ниже.
Параметр |
Символьное значение |
Восьмеричное значение |
|---|---|---|
Базовое разрешение |
rwxrwxrwx |
777 |
umask |
rwxrwxr-x |
002 |
Разрешение по умолчанию |
rwxrwxr-x |
775 |
Это означает, что владелец каталога и группа могут перечислять содержимое каталога, создавать, удалять и редактировать элементы внутри каталога, а также переходить в него. Все остальные пользователи могут только перечислить содержимое каталога и перейти в него.
По соображениям безопасности обычные файлы не могут иметь разрешение на выполнение по умолчанию, даже если для umask установлено значение 000(rwxrwxrwx ). Однако каталоги могут быть созданы с разрешениями на выполнение.
Изменение прав доступа к файлам с использованием символьных значений#
Можно использовать утилиту chmod с символьными значениями (комбинация букв и знаков) для изменения прав доступа для файла или каталога.
Можно назначить следующие разрешения:
Чтение (r)
Запись (w)
Выполнение (x)
Разрешения могут быть назначены следующим уровням владения:
Пользователь-владелец (u)
Владелец группы (g)
Другое (o)
Все (а)
Чтобы добавить или удалить разрешения, используйте следующие знаки:
+ < знак плюс > - чтобы добавить разрешения поверх существующих разрешений;
- < знак минус > - чтобы удалить разрешения из существующего разрешения;
= < знак равно > - чтобы удалить существующие разрешения и явно определить новые.
Процедура:
Чтобы изменить разрешения для файла или каталога, используйте:
$ chmod <level><operation><permission> file-name
Замените
на уровень владения, для которого нужно установить разрешения. Замените на один из знаков. Замените на разрешения, которые нужно назначить. Замените file-name именем файла или каталога. Например, чтобы предоставить всем права на чтение, запись и выполнение (rwx) my-script.sh, используйте команду chmod a=rwx my-script.sh.
Этапы проверки:
Чтобы просмотреть разрешения для определенного файла, используйте:
$ ls -l file-name
Замените file-name именем файла.
Чтобы просмотреть разрешения для определенного каталога, используйте:
$ ls -dl directory-name
Замените directory-name именем каталога.
Чтобы просмотреть разрешения для всех файлов в определенном каталоге, используйте:
$ ls -l directory-name
Замените directory-name именем каталога.
Пример. Изменение разрешений для файлов и каталогов
Чтобы изменить права доступа к файлам my-file.txt от **-rw-rw-r–**до -rw------, используйте:
Отобразите текущие разрешения для my-file.txt
$ ls -l my-file.txt
-rw-rw-r--. 1 username username 0 Feb 24 17:56 my-file.txt
Удалите разрешения на чтение, запись и выполнение (rwx) файла у владельца группы (g) и других пользователей (o):
$ chmod перейти= my-file.txt
Обратите внимание, что любое разрешение, которое не указано после знака равенства (=), автоматически запрещается.
Убедитесь, что разрешения для my-file.txt были установлены правильно:
$ ls -l my-file.txt
-rw-------. 1 username username 0 Feb 24 17:56 my-file.txt
Чтобы изменить права доступа к файлам my-directory от drwxrwx— до drwxrwxr-x, используйте:
Отобразите текущие разрешения для my-directory:
$ ls -dl my-directory
drwxrwx---. 2 username username 4096 Feb 24 18:12 my-directory
Добавьте доступ на чтение и выполнение для всех пользователей:
$ chmod o+rx my-directory
Убедитесь, что разрешения для my-directory и его содержимое были установлены правильно:
$ ls -dl my-directory
drwxrwxr-x. 2 username username 4096 Feb 24 18:12 my-directory
Изменение прав доступа к файлам с помощью восьмеричных значений#
Можно использовать утилиту chmod с восьмеричными значениями (числами) для изменения прав доступа к файлам для файла или каталога.
Процедура:
Чтобы изменить права доступа к файлам для существующего файла или каталога, используйте:
$ chmod octal_value file-name
Замените file-name именем файла или каталога. Замените octal_value на восьмеричное значение.
Управление umask#
Можно использовать umask утилиту для отображения, установки или изменения текущего значения umask или значения по умолчанию.
Отображение текущего значения umask#
Можно использовать umask утилиту для отображения текущего значения umask в символьном или восьмеричном режиме.
Процедура:
Чтобы отобразить текущее значение umask в символьном режиме, используйте:
$ umask -S
Чтобы отобразить текущее значение umask в восьмеричном режиме, используйте:
$ umask
Примечание
При отображении umask в восьмеричном режиме он отображается в виде четырехзначного числа (0002 или 0022). Первая цифра umask представляет специальный бит (sticky bit, SGID bit, or SUID bit). Если первая цифра установлена равной 0, специальный бит не устанавливается.
Отображение umask bash по умолчанию#
Существует несколько оболочек, которые можно использовать, например bash, ksh, zsh и tcsh. Эти оболочки могут вести себя как оболочки для входа в систему или без входа в систему. Можно вызвать оболочку входа в систему, открыв собственный терминал или терминал с графическим интерфейсом.
Чтобы определить, выполняется ли команда в командной оболочке для входа или без входа, используйте команду echo $0.
Пример. Определение того, работаете ли пользователь в оболочке bash для входа в систему или без входа в систему
Если на выходе из echo $0 команда возвращает bash, выполните команду в оболочке без входа в систему.
$ echo $0
bash
umask для оболочки без входа в систему устанавливается в конфигурационный файл /etc/bashrc
Если на выходе из echo $0 команда возвращает -bash, выполните команду в оболочке входа в систему.
# echo $0
-bash
umask для оболочки входа в систему устанавливается в конфигурационный файл etc/profile.
Процедура:
Для отображения значения bash umask по умолчанию для оболочки без входа в систему используйте:
$ grep umask /etc/bashrc
Результат:
# By default, we want umask to get set. This sets it for non-login shell.
umask 002
umask 022
Чтобы отобразить bash umask по умолчанию для оболочки входа в систему, используйте:
$ grep umask /etc/profile
Результат:
# By default, we want umask to get set. This sets it for login shell
umask 002
umask 022
Установка umask с использованием символьных значений#
Можно использовать umask утилита с символическими значениями (комбинация букв и знаков) для установки umask для текущего сеанса командной строки
Можно назначить следующее разрешения:
Чтение (r)
Запись (w)
Выполнение (x)
Разрешения могут быть назначены следующим уровням владения:
Пользователь - владелец (u)
Владелец группы (g)
Другое (o)
Все (a)
Чтобы добавить или удалить разрешения, используйте следующее знаки:
+ < знак плюс > - чтобы добавить разрешения поверх существующих разрешений;
- < знак минус > - чтобы удалить разрешения из существующего разрешения;
= < знак равенства > - чтобы удалить существующие разрешения и явно определить новые.
Примечание
Любое разрешение, которое не указано после знака равенства (=), автоматически запрещается.
Процедура:
Чтобы установить umask для текущего сеанса командной строки, используйте:
$ umask -S <level><operation><permission>
Замените < level > на уровень владения, для которого нужно установить umask. Замените < operation > на один из знаков. Замените < permission > на разрешения, которые нужно назначить. Например, чтобы установить значение umask u=rwx, g=rwx, o=rwx, используйте umask -S a=rwx.
Примечание
Действителен только для текущего сеанса командной строки.
Установка umask с использованием восьмеричных значений#
Можно использовать umask утилиту с восьмеричными значениями (числами) для установки umask для текущего сеанса оболочки.
Процедура:
Чтобы установить umask для текущего сеанса командной строки, используйте:
octal_value
Примечание
umask действителен только для текущего сеанса командной строки.
Изменение umask по умолчанию для оболочки без входа в систему#
Можно изменить значение по умолчанию bash umask для обычных пользователей путем изменения досье /etc/bashrc.
Предварительные условия:
Права root пользователя.
Процедура:
Как пользователь root, откройте файл /etc/bashrc в редакторе.
Измените следующие разделы, чтобы установить новую bash umask по умолчанию:
if [ $UID -gt 199 ] && [ "id -gn" = "id -un" ]; then
umask 002
else
umask 022
fi
Замените восьмеричное значение umask ( 002 ) по умолчанию другим восьмеричным значением.
Сохраните изменения и выйдите из редактора.
Изменение umask по умолчанию для оболочки входа в систему#
Можно изменить значение по умолчанию bash umask для пользователя root, изменив досье /etc/profile.
Предварительные условия:
Права root пользователя.
Процедура:
Как пользователь root, откройте файл /etc/profile в редакторе.
Измените следующие разделы, чтобы установить новую bash umask по умолчанию:
if [ $UID -gt 199 ] && [ "/usr/bin/id -gn" = "/usr/bin/id -un" ]; then
umask 002
else
umask 022
fi
Замените восьмеричное значение umask ( 022 ) по умолчанию другим восьмеричным значением.
Сохраните изменения и выйдите из редактора.
Изменение umask по умолчанию для конкретного пользователя#
Можно изменить umaskпо умолчанию для конкретного пользователя, изменив .bashrc для этого пользователя.
Процедура:
Добавьте строку, указывающую восьмеричное значение umask, в файл .bashrc для конкретного пользователя.
$ echo 'umask octal_value' >> /home/username/.bashrc
Замените octal_value на восьмеричное значение и замените username именем пользователя.
Установка разрешений по умолчанию для вновь созданных домашних каталогов#
Можно изменить режимы разрешений для домашних каталогов вновь созданных пользователей, изменив файл /etc/login.defs.
Процедура:
Как пользователь root, откройте файл /etc/login.defs в редакторе.
Измените следующий раздел, чтобы установить новый HOME_MODE режим:
# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
# home directories.
# If HOME_MODE is not set, the value of UMASK is used to create the mode.
HOME_MODE 0700
Замените восьмеричное значение по умолчанию (0700) другим восьмеричным значением. Выбранный режим будет использоваться для создания разрешений для домашнего каталога.
Если установлен параметр HOME_MODE, сохраните изменения и выйдите из редактора.
Если параметр HOME_MODE не задан, измените UMASK, чтобы установить режим для вновь созданных домашних каталогов:
# Default initial "umask" value used by login(1) on non-PAM enabled systems.
# Default "umask" value for pam_umask(8) on PAM enabled systems.
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
# home directories if HOME_MODE is not set.
# 022 is the default value, but 027, or even 077, could be considered
# for increased privacy. There is no One True Answer here: each sysadmin
# must make up their mind.
UMASK 022
Замените восьмеричное значение по умолчанию (022) другим восьмеричным значением.
Сохраните изменения и выйдите из редактора.
Использование dnstap в SberLinux#
Утилита dnstap предоставляет расширенный способ отслеживания и регистрации сведений о входящих запросах имен. Он записывает отправленные сообщения из namedслужбы. В этом разделе объясняется, как записывать DNS-запросы с помощью dnstap.
Запись DNS-запросов с использованием dnstap в SberLinux#
Сетевые администраторы могут записывать DNS-запросы для сбора информации о веб-сайте или IP-адресе вместе с состоянием домена.
Предварительные условия:
Обновите пакеты BIND.
Важно
Если уже установлена BIND и запущена его версия, добавление новой версии BIND приведет к перезаписи существующей версии.
Процедура:
Ниже приведены шаги для записи DNS-запросов:
Отредактируйте файл /etc/named.conf в блоке options, чтобы включить dnstap и настройте целевой файл:
options
{
# ...
dnstap { all; }; # Configure filter
dnstap-output file "/var/named/data/dnstap.bin";
# ...
};
# end of options
( all | auth | client | forwarder | resolver | update ) [ ( query | response ) ];
Фильтр dnstap содержит несколько определений, разделенных символом в ; в dnstap { } блоке.
Ниже приведен синтаксис для каждого правила:
auth - ответ или ответ авторитетной зоны.
client - внутренний запрос или ответ клиента.
forwarder - переадресованный запрос или ответ от него.
resolver - итеративный запрос разрешения или ответ.
update - динамические запросы на обновление зоны.
all - любой из вышеперечисленных вариантов.
query | response - если ключевое слово запроса или ответа не указано, будут записаны оба.
В следующем примере запрашиваются только ответы авторизации auth, клиентские запросы client queries, запросы и ответы динамических обновлений updates:
Example:
dnstap {auth response; client query; update;};
Настройте периодическое развертывание для активных журналов.
В следующем примере содержимое отредактированного пользователем скрипта запускается один раз в день. Число 3 означает файлы журнала резервного копирования, ограниченные этим номером. Поскольку файл удаляется, он никогда не достигает суффикса .2.
Example:
sudoedit /etc/cron.daily/dnstap
#!/bin/sh
rndc dnstap -roll 3
mv /var/named/data/dnstap.bin.1 \ /var/log/named/dnstap/dnstap-$(date -I).bin
# use dnstap-read to analyze saved logs
sudo chmod a+x /etc/cron.daily/dnstap
Используйте утилиту dnstap-read для обработки и анализа журналов в удобочитаемом формате.
В следующем примере подробный вывод dnstap печатается в формате файла YAML.
Example:
dnstap-read -y [file-name]
Управление списком контроля доступа#
У каждого файла и каталога может быть только один пользователь-владелец и один владелец группы одновременно. Если нужно предоставить пользователю разрешения на доступ к определенным файлам или каталогам, которые принадлежат другому пользователю или группе, сохраняя при этом другие файлы и каталоги закрытыми, можно использовать списки управления доступом Linux (ACL).
Отображение текущего списка контроля доступа#
Можно использовать утилиту getfacl для отображения текущего списка управления доступом.
Процедура:
Чтобы отобразить текущий список управления доступом для определенного файла или каталога, используйте:
$ getfacl file-name
Замените file-name именем файла или каталога.
Настройка списка контроля доступа#
Можно использовать утилиту setfacl для установки ACL для файла или каталога.
Предварительные условия:
Права root пользователя.
Процедура:
Чтобы задать список управления доступом для файла или каталога, используйте:
# setfacl -m u:username: symbolic_valuefile-name
Замените username с указанием имени пользователя, symbolic_value с символическим значением, и file-name с именем файла или каталога.
Пример. Изменение разрешений для группового проекта
В следующем примере описывается, как изменить разрешения для файла group-project, принадлежащего пользователю root, который принадлежит к корневой группе, чтобы этот файл был:
Никем не исполняемым.
Пользователь mikhail имел бы разрешения rw-.
У пользователя maria были бы соответствующие —разрешения.
У других пользователей были бы соответствующие r–разрешения.
Процедура:
# setfacl -m u:mikhail:rw- group-project
# setfacl -m u:maria:--- group-project
Этапы проверки:
Чтобы убедиться, что у пользователя mikhail есть rw-разрешение, у пользователя maria есть —разрешение и у других пользователей есть r–разрешение, используйте:
$ getfacl group-project
Результат:
# file: group-project
# owner: root
# group: root user:mikhail:rw- user:maria:--- group::r-- mask::rw- other::r--
Использование пакета Chrony для настройки NTP#
Точное хронометрирование важно в ИТ по ряду причин. Например, в сети требуются точные временные метки в пакетах и журналах. В системах Linux NTP протокол реализуется демоном, работающим в пользовательском пространстве.
Демон пользовательского пространства обновляет системные часы, запущенные в ядре. Системные часы могут отслеживать время с помощью различных источников синхронизации. Обычно используется счетчик отметок времени (TSC). TSC - это регистр процессора, который подсчитывает количество циклов с момента последнего сброса. Он работает очень быстро, имеет высокое разрешение и не имеет никаких перебоев.
NTP протокол реализуется chronyd демоном, доступным из репозиториев в chrony пакете.
В следующих разделах описано, как использовать chrony suite для настройки NTP.
Знакомство с chrony#
chrony - это реализация Network Time Protocol (NTP). Существует возможность использовать chrony:
для синхронизации системных часов с NTPсерверами;
для синхронизации системных часов с эталонными часами, например, с GPS-приемником;
для синхронизации системных часов с ручным вводом времени;
в качестве NTPv4(RFC 5905) сервера или однорангового узла для предоставления службы времени другим компьютерам в сети.
chrony хорошо работает в широком диапазоне условий, включая прерывистые сетевые подключения, сильно перегруженные сети, изменение температуры (обычные компьютерные часы чувствительны к температуре) и системы, которые не работают непрерывно или выполняются на виртуальной машине.
Типичная точность между двумя машинами, синхронизированными через Интернет, составляет несколько миллисекунд, а для машин в локальной сети - десятки микросекунд. Аппаратные временные метки или аппаратные эталонные часы могут повысить точность между двумя машинами, синхронизированными до уровня субмикросекунд.
chrony состоит из chronyd демона (который запускается в пространстве пользователя) и программы командной строки chronyc (которая может использоваться для мониторинга производительности chronyd и изменения различных рабочих параметров во время ее запуска).
Демоны chrony, chronyd, могут контролироваться и управляться утилитой командной строки chronyc. Эта утилита предоставляет командную строку, которая позволяет вводить ряд команд для запроса текущего состояния chronyd и внесения изменений в его конфигурацию. По умолчанию chronyd принимает только команды от локального экземпляра chronyc, но его можно настроить для приема команд мониторинга также от удаленных хостов. Удаленный доступ должен быть ограничен.
Использование chronyc для управления chronyd#
В этом разделе описывается, как управлять chronyd с помощью утилиты командной строки chronyc.
Процедура
Чтобы внести изменения в локальный экземпляр chronyd использования утилиты командной строки chronyc в интерактивном режиме, введите следующую команду как root пользователь:
chronyc
Утилита chronyc должна выполняться так, как если бы root пользователь использовал некоторые из ограниченных команд. Командная строка chronyc будет отображаться следующим образом:
chronyc>
Чтобы перечислить все команды, введите help.
Альтернативно, утилита также может быть вызвана в неинтерактивном командном режиме, если вызывается вместе с командой следующим образом:
chronyc command
Важно
Изменения, внесенные с помощью chronyc, не являются постоянными, они будут потеряны после chronyd перезагрузки. Для постоянных изменений внесите изменения в /etc/chrony.conf.
Переход на chrony#
ntp больше не поддерживается. chrony включен по умолчанию. По этой причине может потребоваться миграция с ntp на chrony.
Для миграции с ntp на chrony используйте соответствующие имена программ, файлов конфигурации и служб, представленные в таблице ниже.
Таблица. Соответствующие названия программ, файлов конфигурации и служб при переходе с ntp на chrony
имя ntp |
имя chrony |
|---|---|
/etc/ntp.conf |
/etc/chrony.conf |
/etc/ntp/keys |
/etc/chrony.keys |
ntpd |
chronyd |
ntpq |
chronyc |
ntpd.service |
chronyd.service |
ntp-wait.service |
chrony-wait.service |
Утилиты ntpdate и sntp, которые включены в ntp дистрибутив, можно заменить с chronyd помощью -q опции или -t опции. Конфигурация может быть задана в командной строке , чтобы избежать чтения /etc/chrony.conf. Например, вместо запуска ntpdate ntp.example.ru chronyd можно было бы запустить как:
# chronyd -q 'server ntp.example.ru iburst'
2018-05-18T12:37:43Z chronyd version 3.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2018-05-18T12:37:43Z Initial frequency -2.630 ppm<
2018-05-18T12:37:48Z System clock wrong by 0.003159 seconds (step)
2018-05-18T12:37:48Z chronyd exiting
Утилита ntpstat, которая ранее была включена в ntp пакет и поддерживалась только ntpd, поддерживает оба ntpd и chronyd. Она доступна в ntpstat пакете.
Скрипт миграции
Вызываемый скрипт Python ntp2chrony.py включен в документацию chrony пакета (/usr/share/doc/chrony). Скрипт автоматически преобразует существующую ntp конфигурацию в chrony. Он поддерживает наиболее распространенные директивы и параметры в ntp.conf файле. Любые строки, которые игнорируются при преобразовании, включаются в качестве комментариев в сгенерированный chrony.conf файл для проверки. Ключи, которые указаны в файле ntp ключей, но не помечены как доверенные ключи в ntp.conf, включаются в сгенерированный chrony.keys файл в качестве комментариев.
По умолчанию скрипт не перезаписывает никаких файлов. Если /etc/chrony.conf или /etc/chrony.keys уже существует, этот -b параметр можно использовать для переименования файла в качестве резервной копии. Скрипт поддерживает и другие опции. Опция –help выводит все поддерживаемые параметры.
Примером вызова скрипта со значением по умолчанию ntp.conf, указанным в ntp пакете, является следующий скрипт:
# python3 /usr/share/doc/chrony/ntp2chrony.py -b -v
Reading /etc/ntp.conf
Reading /etc/ntp/crypto/pw
Reading /etc/ntp/keys
Writing /etc/chrony.conf
Writing /etc/chrony.keys
Единственная директива, игнорируемая в этом случае - это disable monitor, которая имеет эквивалент chrony в noclientlog директиве, но она была включена по умолчанию ntp.conf для смягчения атак с усилением (DDoS атак).
Сгенерированный chrony.conf файл обычно включает в себя ряд allow директив, соответствующих строкам ограничения ntp.conf. Если нет необходимости запускать chronyd от NTP имени сервера, удалите все allow директивы с chrony.conf.
Использование Chrony#
В следующих разделах описано, как установить, запустить и остановить chronyd, а также проверить, синхронизирован ли он. В разделах также описывается, как вручную настроить системные часы.
Управление chrony#
Следующая процедура описывает, как установить, запустить, остановить и проверить состояние chronyd.
Процедура
Chrony suite установлен по умолчанию в SberLinux. Чтобы убедиться, что это так, выполните следующую команду, как root пользователь:
yum install chrony
Расположение по умолчанию для демона chrony является /usr/sbin/chronyd следующим. Утилита командной строки будет установлена на /usr/bin/chronyc.
Чтобы проверить состояние 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
Для запуска chronyd выполните следующую команду, как root пользователь:
systemctl start chronyd
Чтобы обеспечить автоматический запуск chronyd при запуске системы, выполните следующую команду, как root пользователь:
systemctl enable chronyd
Чтобы остановить chronyd, выполните следующую команду, как root пользователь:
systemctl stop chronyd
Чтобы предотвратить автоматический запуск chronyd при запуске системы, выполните следующую команду, как root пользователь:
systemctl disable chronyd
Проверка синхронизации chrony#
Следующая процедура описывает, как проверить, синхронизируется ли chrony при использовании tracking, sources и sourcestats команд.
Процедура:
Чтобы проверить chrony отслеживая, выполните следующую команду:
$ 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.
Чтобы проверить источники chrony, выполните следующую команду:
$ 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). В этом случае дополнительные строки заголовка отображаются как напоминание о значениях столбцов.
В 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). В этом случае дополнительные строки заголовка отображаются как напоминание о значениях столбцов.
Ручная настройка системных часов#
Следующая процедура описывает, как вручную настроить системные часы.
Процедура:
Чтобы немедленно перевести системные часы в иное значение, минуя любые текущие настройки, выполните следующую команду, как root пользователь:
chronyc makestep
Если используется директива rtcfile, то часы реального времени не следует настраивать вручную. Случайные корректировки помешали бы chrony измерить скорость, с которой смещаются часы реального времени.
Настройка chrony для системы в изолированной сети#
Для сети, которая никогда не подключена к Интернету, один компьютер выбирается в качестве главного сервера времени. Остальные компьютеры являются либо прямыми клиентами ведущего, либо клиентами клиентов. На главном сервере файл дрейфа должен быть установлен вручную со средней скоростью дрейфа системных часов. Если мастер будет перезагружен, он получит время от окружающих систем и вычислит среднее значение для установки своих системных часов. После этого он возобновляет применение корректировок на основе файла дрейфа. Файл дрейфа будет обновляться автоматически, когда settime используется команда.
Следующая процедура описывает, как настроить chrony для asystem в изолированной сети.
Процедура:
В системе, выбранной в качестве основной, используя текстовый редактор, запущенный с правами root, отредактируйте /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, с которого клиентам разрешено подключаться.
В системах, выбранных в качестве прямых клиентов ведущего, используя текстовый редактор, работающий как root, отредактируйте /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. Это гарантирует, что локальная ссылка активна только на сервере с наименьшим идентификатором ссылки, а другие серверы синхронизированы с ним. Когда сервер выйдет из строя, его заменит другой.
Настройка удаленного доступа к мониторингу#
chronyc может получить доступ chronyd двумя способами:
Интернет-протокол, IPv4 или IPv6.
Доменный сокет Unix, который доступен локально с помощью прав root или chrony.
По умолчанию, chronyc подключается к доменному сокету Unix. Путь по умолчанию таков /var/run/chrony/chronyd.sock. Если соединение не удается установить, такое может произойти, когда chronyc работает под управлением пользователя без root прав, то chronyc попытается подключиться к адресу локального хоста 127.0.0.1, а затем к петлевому адресу ::1.
Из сети разрешены только следующие команды мониторинга, которые не влияют на поведение chronyd:
activity
manual list
rtcdata
smoothing
sources
sourcestats
tracking
waitsync
Набор хостов, с которых chronyd принимаются эти команды, может быть настроен со cmdallow помощью директивы в файле конфигурации chronyd или cmdallow команды в chronyc. По умолчанию команды принимаются только с локального хоста (127.0.0.1 или ::1).
Все остальные команды разрешены только через доменный сокет Unix. При отправке по сети chronyd выдает сообщение об ошибке Not authorised, даже если оно отправлено с локального хоста.
Следующая процедура описывает, как получить удаленный доступ к chronyd с помощью chronyc.
Процедура:
Разрешите доступ как с IPv4, так и с IPv6-адресов, добавив в файл /etc/chrony.conf следующее:
bindcmdaddress 0.0.0.0
или
bindcmdaddress ::
Разрешите команды с удаленного IP-адреса, сети или подсети с помощью cmdallow директивы.
Добавьте в файл /etc/chrony.conf следующее содержимое:
cmdallow nn.nn.nn.nn/mm
Откройте порт 323 в межсетевом экране для подключения из удаленной системы:
firewall-cmd --zone=public --add-port=323/udp
При необходимости откройте порт 323 для постоянного подключения, используя –permanent опцию:
firewall-cmd --permanent --zone=public --add-port=323/udp
Если постоянно открыли порт 323, перезагрузите конфигурацию межсетевого экрана:
firewall-cmd --reload
Управление синхронизацией времени с помощью системных ролей SberLinux#
Можно управлять синхронизацией времени на нескольких целевых машинах, используя роль timesync. Роль timesync устанавливает и настраивает реализацию NTP или PTP для работы в качестве клиента NTP или подчиненного устройства PTP, чтобы синхронизировать системные часы с серверами NTP или ведущими устройствами PTP (grandmaster PTP) в доменах PTP.
Обратите внимание, что использование роли timesync также облегчает переход на chrony, поскольку можно использовать один и тот же playbook во всех версиях SberLinux, независимо от того, использует ли система ntp или chrony для реализации протокола NTP.
Предупреждение: Роль timesync заменяет конфигурацию заданной или обнаруженной службы поставщика на управляемом узле. Предыдущие настройки будут потеряны, даже если они не указаны в переменных роли. Единственная сохраненная настройка - это выбор поставщика, если переменная timesync_ntp_provider не определена.
В следующем примере показано, как применить роль timesync в ситуации только с одним пулом серверов.
Пример. Примерный сборник задач, применяющий роль синхронизации времени для одного пула серверов
---
- hosts: timesync-test
vars:
timesync_ntp_servers:
- hostname: 2.sberlinux.pool.ntp.ru
pool: yes
iburst: yes
roles:
- sberlinux-system-roles.timesync
Chrony с отметкой времени HW#
Аппаратная временная метка - это функция, поддерживаемая некоторыми контроллерами сетевых интерфейсов (NIC), которая обеспечивает точную временную метку входящих и исходящих пакетов. NTP временные метки обычно создаются ядром и chronyd с использованием системных часов. Однако, когда включена временная метка HW, сетевой адаптер использует свои собственные часы для генерации временных меток, когда пакеты входят или выходят из канального уровня или физического уровня. При использовании с NTP аппаратными временными метками можно значительно повысить точность синхронизации. Для достижения наилучшей точности, как NTP серверы, так и NTP клиенты должны использовать аппаратные временные метки. В идеальных условиях может быть возможна точность в несколько микросекунд.
Другим протоколом для синхронизации времени, использующим аппаратную временную метку, является PTP.
В отличие от NTP, PTP полагается на помощь в сетевых коммутаторах и маршрутизаторах. Если необходимо достичь наилучшей точности синхронизации, используйте PTP в сетях, где есть коммутаторы и маршрутизаторы с PTP поддержкой, и отдавайте предпочтение NTP сетям, в которых таких коммутаторов и маршрутизаторов нет.
В следующих разделах описано, как:
Проверить поддержку аппаратных временных меток.
Включить аппаратную временную метку.
Настроить интервал опроса клиента.
Включить режим чередования.
Настроить сервер для большого количества клиентов.
Проверить временные метки оборудования.
Настроить мост PTP-NTP.
Проверка поддержки аппаратной временной метки#
Чтобы проверить, что аппаратная временная метка с NTP поддерживается интерфейсом, используйте ethtool -T команду. Интерфейс может быть использован для аппаратных временных меток с NTP ethtool если перечисляет SOF_TIMESTAMPING_TX_HARDWARESOF_TIMESTAMPING_TX_SOFTWARE и возможности, а также режим фильтрации HWTSTAMP_FILTER_ALL.
Включение аппаратной отметки времени#
Чтобы включить аппаратную временную метку, используйте директиву hwtimestamp в файле /etc/chrony.conf. Директива может либо указывать один интерфейс, либо использовать подстановочный знак для включения аппаратных временных меток на всех интерфейсах, которые его поддерживают. Используйте спецификацию подстановочных знаков в случае, если никакое другое приложение, например ptp4l из linuxptp пакета, не использует аппаратную временную метку в интерфейсе. В файле 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) или иметь прямое подключение к нему. Это обеспечит высокоточную синхронизацию в сети.
Настройте ptp4l и программы phc2sys из linuxptp пакеты для использования одного интерфейса для синхронизации системных часов с помощью PTP.
Настройте chronyd, чтобы указать системное время, используя другой интерфейс:
Пример. Настройка chronyd для предоставления системного времени с использованием другого интерфейса
bindaddress hh.hh.hh.hh
hwtimestamp eth1
local stratum 1
Использование защищенной связи между двумя системами с помощью OpenSSH#
SSH (Secure Shell) - это протокол, который обеспечивает безопасную связь между двумя системами с использованием архитектуры клиент-сервер и позволяет пользователям удаленно входить в системы хост-сервера. В отличие от других протоколов удаленной связи, таких как FTP или Telnet, SSH шифрует сеанс входа в систему, что не позволяет злоумышленникам собирать незашифрованные пароли от соединения.
SberLinux включает в себя базовые OpenSSH пакеты: общий openssh пакет, openssh-server пакет и openssh-clients пакет. Обратите внимание, что для OpenSSH пакетов требуется OpenSSL пакет openssl-libs, который устанавливает несколько важных криптографических библиотек, позволяющих OpenSSH обеспечивать зашифрованную связь.
SSH и OpenSSH#
SSH (Secure Shell) - это программа для входа в удаленную машину и выполнения команд на этой машине. Протокол SSH обеспечивает безопасную зашифрованную связь между двумя ненадежными хостами по небезопасной сети. Можно пересылать соединения X11 и произвольные порты TCP/IP по защищенному каналу.
Протокол SSH устраняет угрозы безопасности, такие как перехват связи между двумя системами и олицетворение конкретного хоста, когда используете его для удаленного входа в оболочку или копирования файлов. Это связано с тем, что SSH-клиент и сервер используют цифровые подписи для проверки своих удостоверений личности. Кроме того, все коммуникации между клиентской и серверной системами зашифрованы.
Ключ хоста аутентифицирует хосты по протоколу SSH. Ключи хоста - это криптографические ключи, которые генерируются автоматически при первой установке OpenSSH или при первой загрузке хоста.
OpenSSH - это реализация протокола SSH, поддерживаемого Linux, UNIX и аналогичными операционными системами. Он включает в себя основные файлы, необходимые как для клиента OpenSSH, так и для сервера. Пакет OpenSSH состоит из следующих инструментов пользовательского пространства:
ssh - это программа удаленного входа в систему (SSH-клиент).
sshd - это SSH-демон OpenSSH.
scp - это безопасная программа удаленного копирования файлов.
sftp - это безопасная программа передачи файлов.
ssh-agent - является агентом аутентификации для кеширования закрытых ключей.
ssh-add - добавляет идентификаторы закрытых ключей к ssh-agent.
ssh-keygen - генерирует, управляет и преобразует ключи аутентификации для ssh.
ssh-copy-id - это скрипт, который добавляет локальные открытые ключи к authorized_keys файлу на удаленном SSH-сервере.
ssh-keyscan - собирает открытые ключи хоста SSH.
В настоящее время существуют две версии SSH: версия 1 и более новая версия 2. Он имеет усовершенствованный алгоритм обмена ключами, который не уязвим для эксплойтов, известных в версии 1.
OpenSSH, как одна из основных криптографических подсистем SberLinux, использует общесистемные криптополитики. Это гарантирует, что слабые наборы шифров и криптографические алгоритмы будут отключены в конфигурации по умолчанию. Чтобы изменить политику, администратор должен либо использовать update-crypto-policies команду для настройки параметров, либо вручную отказаться от общесистемных политик шифрования.
Пакет OpenSSH использует два набора файлов конфигурации: один для клиентских программ (то есть, ssh, scp, и sftp), а другой для сервера (sshd демона).
Общесистемная информация о конфигурации SSH хранится в каталоге /etc/ssh/. Специфичная для пользователя информация о конфигурации SSH хранится в домашнем каталоге пользователя ~/.ssh/.
Oсновные криптокомпоненты SberLinux
Криптоядро SberLinux состоит из следующих компонентов, которые обеспечивают низкоуровневые криптографические алгоритмы (шифры, хеши, коды аутентификации сообщений и т.д.), криптографически безопасные генераторы случайных чисел и реализации безопасных протоколов связи, такие как TLS и SSH.
Компонент |
Криптографический модуль |
Описание |
|---|---|---|
OpenSSL |
ДА |
Библиотека криптографического инструментария общего назначения, включающая реализации TLS и DTLS |
GnuTLS |
ДА |
Криптографический инструментарий, ориентированный на простую в использовании реализацию TLS и DTLS |
NSS |
ДА |
Библиотека криптографического инструментария браузера Firefox; следует жизненному циклу Firefox ESR с асинхронными обновлениями и включением или удалением функций |
libgcrypt |
ДА |
Криптографическая библиотека GnuPG |
kernel |
ДА |
Внутренняя криптографическая библиотека ядра Linux |
OpenSSH |
Нет. Не реализует никаких FIPS-140-2- соответствующая криптография, он использует модуль OpenSSL |
Клиентские и серверные приложения SSH операционной системы |
libssh |
Нет. Не реализует никаких FIPS-140-2- соответствующая криптография, он использует модуль OpenSSL |
Защищенная библиотека связи, реализующая протокол SSH |
Libreswan |
Нет. Не реализует никаких FIPS-140-2- соответствующая криптография, он использует модуль NSS |
Клиентские и серверные приложения IPSec операционной системы |
Вместе с этим:
Существует поддержка {left,right}pubkey= для addconn и whack утилит.
Существует функция самотестирования ключа (KDF).
Существует список разрешенных системных вызовов для seccomp фильтра.
Существует возможность показа ключа аутентификации хоста (showhostkey) при помощи:
* алгоритма цифровой подписи с эллиптической кривой **(ECDSA) pubkeys**; * опции **--pem**печати открытого ключа почты с улучшенной конфиденциальностью (PEM) в кодировке;Существует протокол обмена ключами Интернета версии 2 (IKEv2):
* Расширяемый протокол аутентификации – поддержка безопасности транспортного уровня (EAP-TLS); * Поддержка аутентификации только по EAP;Демон обмена ключами pluto через Интернет (IKE) с:
поддержкой maxbytes и maxpacket счетчиков;
значением по умолчанию replay-window на 128;
значением по умолчанию either или yes;
В SberLinux введена общесистемная регистрация модулей PKCS #11 используя p11-kit и pkcs11.conf(5). Таким образом, приложения, использующие основные криптомодули, такие как OpenSSH, wget, curl и другие, не требуют дополнительной настройки для использования смарт-карт. Кроме того, ссылки на объекты указаны последовательно во всех файлах конфигурации приложения SberLinux.
Создание пользовательской общесистемной криптографической политики
Можно создать полностью индивидуальную общесистемную криптографическую политику для своей системы.
Создайте файл политики:
cd /etc/crypto-policies/policies/
sudo touch MYPOLICY.pol
Этот файл также может быть создан путем копирования предопределенной политики из 4 доступных уровней политики.
Например;
sudo cp /usr/share/crypto-policies/policies/DE
Отредактируйте файл в соответствии с требованиями:
sudo vi /etc/crypto-policies/policies/MYPOLICY.pol
После редактирования примените политику с помощью команды:
sudo update-crypto-policies --set MYPOLICY
Перезагрузите систему, чтобы изменения вступили в силу.
sudo reboot
Проверка общесистемных криптографических политик
Команда update-crypto-policies используется для управления общесистемной криптографической политикой.
Этот пакет обычно предустановлен.
Если он недоступен, установите его с помощью команды:
sudo yum -y install crypto-policies-scripts
Дерево зависимостей:
Dependencies resolved.
=======================================
Package Arch Version
Repo Size
=======================================
Upgrading:
crypto-policies noarch 20211116-1.gitae470d6.el8
baseos 63 k
crypto-policies-scripts
noarch 20211116-1.gitae470d6.el8
baseos 82 k
Transaction Summary
=======================================
Upgrade 2 Packages
Total download size: 145 k
Downloading Packages:
После установки проверьте текущую общесистемную криптографическую политику с помощью команды:
sudo update-crypto-policies --show DEFAULT
Установка/изменение общесистемных криптографических политик
Общесистемная криптографическая политика может быть переключена на предпочтительную с помощью команды update-crypto-policies.
Синтаксис используемой команды следующий:
sudo update-crypto-policies --set <POLICY>
Например, при переходе к политике FUTURE команда будет следующей:
sudo update-crypto-policies --set FUTURE
После установки политики перезагрузите систему:
sudo reboot
Тестирование общесистемной криптографической политики
Каждая политика имеет свой собственный набор правил.
Проверьте политику:
sudo update-crypto-policies --show
FUTURE
Проверьте политику с помощью команды cURL, приведенной ниже:
curl https://sha1-intermediate.badssl.com
Вывод покажет, что сертификат SHA-1 был запрещен.
Это доказывает, что политика FUTURE работает так, как необходимо.
Исключение приложения из общесистемных криптополитик
Общесистемные криптополитики заставляют службу или приложение следовать установленным политикам.
Однако можно исключить приложение из общесистемных криптографических политик.
Это можно сделать, настроив наборы шифров и протоколы непосредственно в приложении.
Также можно удалить системную ссылку из /etc/crypto-policies/back-ends на приложение и заменить ее настроенными политиками.
Например:
curl https://example.ru --ciphers ‘@SECLEVEL=0:DES-CBC3-SHA:RSA-DES-CBC3-SHA’
Также можете использовать wget и указать оба параметра –secure-protocol и –ciphers.
Например:
wget --secure-protocol=TLSv1_1 --ciphers=”SECURE128″ https://example.ru
Настройка общесистемных криптографических политик с помощью подполитик
Настройку набора включенных криптографических алгоритмов или протоколов можно сделать двумя способами: применить пользовательские подполитики поверх существующей общесистемной криптографической политики или определить политику с нуля.
Перейдите в каталог ниже:
cd /etc/crypto-policies/policies/modules/
Создайте нужные подполитики.
sudo touch MYCRYPTO-1.pmod SCOPES-AN
Откройте созданную подполитику для редактирования:
sudo vi SCOPES-AND-WILDCARDS.pmod
Добавьте параметры для изменения существующей общесистемной криптографической политики.
Например:
# Отключить шифр AES-128, все режимы
cipher = -AES-128-*
# Отключить CHACHA20-POLY1305 для протокола TLS (OpenSSL, GnuTLS, NSS и OpenJDK)
cipher@TLS = -CHACHA20-POLY1305
# Разрешить использование группы FFDHE-1024 для протокола SSH (libssh и OpenSSH)
group@SSH = FFDHE-1024+
# Отключить все шифры режима CBC для протокола SSH (libssh и OpenSSH)
cipher@SSH = -*-CBC
# Разрешить шифр AES-256-CBC в приложениях, использующих libssh
cipher@libssh = AES-256-CBC+
Также можно редактировать другой файл:
sudo vi MYCRYPTO-1.pmod
min_rsa_size = 3072
hash = SHA2-384 SHA2-512 SHA3-384 SHA3-512
После сохранения изменений примените модули:
sudo update-crypto-policies --set DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
Setting system policy to DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
Note: System-wide crypto policies are applied on application start-up.
It is recommended to restart the system for the change of policies
to fully take place.
Чтобы изменения были применены, перезагрузите систему.
sudo reboot
После загрузки системы проверьте новую политику и подполитику:
update-crypto-policies --show
DEFAULT:MYCRYPTO-1:SCOPES-AND-WILDCARDS
Настройка и запуск сервера OpenSSH#
Используйте следующую процедуру для базовой конфигурации, которая может потребоваться для среды и для запуска сервера OpenSSH. Обратите внимание, что после установки SberLinux по умолчанию sshd демон уже запущен, и ключи хоста сервера создаются автоматически.
Предварительные условия:
Пакет openssh-server установлен.
Процедура:
Запустите sshd демон в текущем сеансе и настройте его на автоматический запуск во время загрузки:
systemctl start sshd
systemctl enable sshd
Чтобы указать адреса, отличные от адресов по умолчанию 0.0.0.0 (IPv4) или ::(IPv6) для директивы ListenAddress в файле конфигурации /etc/ssh/sshd_config, и использовать более медленную динамическую конфигурацию сети, добавьте зависимость от network-online.target целевого устройства в файл sshd.service. Для достижения этой цели создайте файл /etc/systemd/system/sshd.service.d/local.conf со следующим содержимым:
[Unit]
Wants=network-online.target
After=network-online.target
Проверьте, соответствуют ли параметры сервера OpenSSH в файле конфигурации /etc/ssh/sshd_config требованиям сценария.
При необходимости измените приветственное сообщение, отображаемое сервером OpenSSH перед аутентификацией клиента, отредактировав файл /etc/issue, например:
Welcome to ssh-server.example.ru
Warning: By accessing this server, you agree to the referenced terms and conditions.
Убедитесь, что параметр Banner не закомментирован в /etc/ssh/sshd_config и его значение содержит /etc/issue:
# less /etc/ssh/sshd_config | grep Banner
Banner /etc/issue
Обратите внимание, что для изменения сообщения, отображаемого после успешного входа в систему, необходимо отредактировать файл /etc/motd на сервере.
Перезагрузите systemd конфигурацию и перезапустите sshd, чтобы применить изменения:
# systemctl daemon-reload**
# systemctl restart sshd
Проверка:
Убедитесь, что демон sshd запущен:
# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-11-18 14:59:58 CET; 6min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1149 (sshd)
Tasks: 1 (limit: 11491)
Memory: 1.9M
CGroup: /system.slice/sshd.service
└─1149 /usr/sbin/sshd -D -oCiphers=aes128-ctr,aes256-ctr,aes128-cbc,aes256-cbc -oMACs=hmac-sha2-256,
Nov 18 14:59:58 ssh-server-example.ru systemd[1]: Starting OpenSSH server daemon...
Nov 18 14:59:58 ssh-server-example.ru sshd[1149]: Server listening on 0.0.0.0 port 22.
Nov 18 14:59:58 ssh-server-example.ru sshd[1149]: Server listening on :: port 22.
Nov 18 14:59:58 ssh-server-example.ru systemd[1]: Started OpenSSH server daemon.
Подключитесь к SSH-серверу с помощью SSH-клиента.
# ssh user@ssh-server-example.ru
ECDSA key fingerprint is SHA256:dXbaS0RG/UzlTTku8GtXSz0S1++lPegSy31v3L/FAEc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ssh-server-example.ru' (ECDSA) to the list of known hosts.
user@ssh-server-example.ru's password:
Настройка сервера OpenSSH для аутентификации на основе ключей#
Чтобы повысить безопасность системы, примените проверку подлинности на основе ключей, отключив проверку подлинности по паролю на сервере OpenSSH.
Предварительные условия:
Пакет openssh-server установлен.
Демон sshd запущен на сервере.
Процедура:
Откройте конфигурацию /etc/ssh/sshd_config в текстовом редакторе, например:
# vi /etc/ssh/sshd_config
Измените параметр PasswordAuthentication на no:
PasswordAuthentication no
В системе, отличной от новой установки по умолчанию, проверьте, что PubkeyAuthentication no не была установлена и ChallengeResponseAuthentication директива установлена на no. Если подключение осуществляется удаленно, не используя консоль или внеполосный доступ, протестируйте процесс входа на основе ключа, прежде чем отключать проверку подлинности по паролю.
Чтобы использовать аутентификацию на основе ключа в домашних каталогах, подключенных к NFSuse_nfs_home_dirs, включите логическое значение SELinux:
# setsebool -P use_nfs_home_dirs 1
Перезагрузите демон sshd, чтобы применить изменения:
# systemctl reload sshd
Создание пары ключей SSH#
Способ определить, использует ли система криптографические хеши для хранения паролей - это посмотреть файл /etc/shadow (с root доступом). Каждая строка отформатирована следующим образом: user:password:last-changed:minimum-age:maximum-age:warning-period:inactivity-period:expiration-date:reserved. Поле пароля может начинаться с $num$ (т.е. хеш md5 в поле пароля выглядит как $1$01234567$b5lh2mHyD2PdJjFfALlEz1, где он начинается с $1$). Это означает, что система использует криптографический хеш. Формат поля пароля во всех современных системах - $id$salt$hash. Идентификатор указывает, какой тип криптографического хеша используется. salt - это случайно сгенерированная строка, которая объединяется с ключом (простым текстовым паролем) для защиты от предварительно вычисленных таблиц известных хешей. Хеш - это криптографический хеш, созданный из salt и ключа/ пароля. Если поле пароля начинается с $num$, значит, используются криптографические хеши.
Обозначения:
$1$ означает, что используется MD5;
$2 $ или $2a$ означает, что используется blowfish;
$5$ означает, что используется SHA-256;
$6$ означает, что используется SHA-512.
Используйте эту процедуру для создания пары ключей SSH в локальной системе и копирования сгенерированного открытого ключа на сервер OpenSSH. Если сервер настроен соответствующим образом, можно войти на сервер OpenSSH без указания какого-либо пароля.
Важно
Выполните следующие действия от имени root, так как только root-пользователь сможет использовать ключи.
Процедура:
Чтобы сгенерировать пару ключей ECDSA для версии 2 протокола SSH, введите:
$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/joesec/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/joesec/.ssh/id_ecdsa.
Your public key has been saved in /home/joesec/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:Q/x+qms4j7PCQ0qFd09iZEFHA+SqwBKRNaU72oZfaCI joesec@localhost.example.ru
The key's randomart image is:
+---[ECDSA 256]---+
|.oo..o=++ |
|.. o .oo . |
|. .. o. o |
|....o.+... |
|o.oo.o +S . |
|.=.+. .o |
|E.*+. . . . |
|.=..+ +.. o |
| . oo*+o. |
+----[SHA256]-----+
Также можно сгенерировать пару ключей RSA, используя опцию -t rsa с командой ssh-keygen, или пару ключей Ed25519, введя команду ssh-keygen -t ed25519.
Скопируйте открытый ключ на удаленную машину:
$ ssh-copy-id joesec@ssh-server-example.ru
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
joesec@ssh-server-example.ru's password:
...
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'joesec@ssh-server-example.ru'" and check to make sure that only the key(s) you wanted were added.
Теперь попробуйте войти в систему с помощью: ssh joesec@ssh-server-example.ru и проверьте, что были добавлены только те ключи, которые необходимы. Если не используете программу ssh-agent в своем сеансе, предыдущая команда копирует самый последний измененный открытый ключ ~/.ssh/id.pub*, если он еще не установлен. Чтобы указать другой файл с открытым ключом или установить приоритет ключей в файлах над ключами, кешированными в памяти ssh-агентом, используйте команду ssh-copy-id с опцией -i.
Важно
Если переустановите систему и появится необходимость сохранения пары ключей, создайте резервную копию каталога ~/.ssh/. После переустановки скопируйте его обратно в свой домашний каталог. Можно сделать это для всех пользователей системы, включая root-пользователя.
Проверка:
Войдите на сервер OpenSSH без указания какого-либо пароля:
$ ssh joesec@ssh-server-example.ru
Welcome message.
...
Last login: Mon Nov 18 18:28:42 2019 from ::1
Использование ключей SSH, хранящихся на смарт-карте#
SberLinux позволяет использовать ключи RSA и ECDSA, хранящиеся на смарт-карте, в клиентах OpenSSH. Используйте эту процедуру, чтобы включить аутентификацию с использованием смарт-карты вместо использования пароля.
Предварительные условия:
На стороне клиента установлен пакет opensc и запущена служба pcscd.
Процедура:
Перечислите все ключи, предоставляемые модулем OpenSC PKCS #11, включая их URI PKCS #11, и сохраните выходные данные в файле keys.pub:
$ ssh-keygen -D pkcs11: > keys.pub
$ ssh-keygen -D pkcs11:
ssh-rsa AAAAB3NzaC1yc2E...KKZMzcQZzx pkcs11:id=%02;object=SIGN%20pubkey;token=SSH%20key;manufacturer=piv_II?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so
ecdsa-sha2-nistp256 AAA...J0hkYnnsM= pkcs11:id=%01;object=PIV%20AUTH%20pubkey;token=SSH%20key;manufacturer=piv_II?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so
Чтобы включить аутентификацию с помощью смарт-карты на удаленном сервере (example.ru), передайте открытый ключ на удаленный сервер. Используйте команду ssh-copy-id с keys.pub, созданную на предыдущем шаге:
$ ssh-copy-id -f -i keys.pub username@example.ru
Для подключения к example.ru используя ключ ECDSA из выходных данных команды ssh-keygen -D на шаге 1, можно использовать только подмножество URI, которое однозначно ссылается на ключ, например:
$ ssh -i "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so" example.ru
Enter PIN for 'SSH key':
[example.ru] $
При необходимости используйте ту же строку URI в файле ~/.ssh/config, чтобы сделать конфигурацию постоянной:
$ cat ~/.ssh/config
IdentityFile "pkcs11:id=%01?module-path=/usr/lib64/pkcs11/opensc-pkcs11.so"
$ ssh example.ru
Enter PIN for 'SSH key':
[example.ru] $
Поскольку OpenSSH использует оболочку p11-kit-proxy, а модуль OpenSC PKCS #11 зарегистрирован в PKCS#11 Kit, можно упростить предыдущие команды:
$ ssh -i "pkcs11:id=%01" example.ru
Enter PIN for 'SSH key':
[example.ru] $
Если пропустите id= часть URI PKCS #11, OpenSSH загрузит все ключи, доступные в прокси-модуле. Это может уменьшить объем требуемого набора текста:
$ ssh -i pkcs11: example.ru
Enter PIN for 'SSH key':
[example.ru] $
Безопасность OpenSSH#
Следующие советы помогут повысить безопасность при использовании OpenSSH. Обратите внимание, что изменения в файле конфигурации /etc/ssh/sshd_config OpenSSH требуют перезагрузки демона sshd для вступления в силу:
# systemctl reload sshd
Примечание
Большинство изменений конфигурации усиления безопасности снижают совместимость с клиентами, которые не поддерживают современные алгоритмы или наборы шифров.
Отключение небезопасных протоколов подключения
Чтобы сделать SSH действительно эффективным, предотвратите использование небезопасных протоколов подключения, которые заменяются пакетом OpenSSH. В противном случае пароль пользователя может быть защищен с помощью SSH только на один сеанс, чтобы быть захваченным позже при входе в систему с помощью Telnet. По этой причине рассмотрите возможность отключения небезопасных протоколов, таких как telnet, rsh, rlogin и ftp. Включение аутентификации на основе ключа и отключение аутентификации на основе пароля
Отключение паролей для аутентификации и разрешение использовать только пары ключей уменьшает вероятность атаки, а также может сэкономить время пользователей. На клиентах сгенерируйте пары ключей с помощью инструмента ssh-keygen и используйте утилиту ssh-copy-id для копирования открытых ключей с клиентов на сервере OpenSSH. Чтобы отключить проверку подлинности на основе пароля на сервере OpenSSH, отредактируйте /etc/ssh/sshd_config и измените параметр PasswordAuthentication на no:
PasswordAuthentication no
Ключевые типы
Хотя команда ssh-keygen по умолчанию генерирует пару ключей RSA, можно указать ей генерировать ключи ECDSA или Ed25519, используя опцию -t. ECDSA (алгоритм цифровой подписи с эллиптической кривой) обеспечивает лучшую производительность, чем RSA, при эквивалентной силе симметричного ключа. Он также генерирует более короткие ключи. Алгоритм открытого ключа Ed25519 представляет собой реализацию скрученных кривых Эдвардса, которая является более безопасной, а также более быстрой, чем RSA, DSA и ECDSA.
OpenSSH автоматически создает ключи хоста сервера RSA, ECDSA и Ed25519, если они отсутствуют. Чтобы настроить создание ключа хоста в SberLinux, используйте sshd-keygen@.service созданный сервис. Например, чтобы отключить автоматическое создание типа ключа RSA:
# systemctl mask sshd-keygen@rsa.service
Чтобы исключить определенные типы ключей для подключений по SSH, закомментируйте соответствующие строки в /etc/ssh/sshd_config и перезагрузите службу sshd. Например, разрешить только ключи хоста Ed25519:
# HostKey /etc/ssh/ssh_host_rsa_key
# HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
Порт, отличающийся от порта по умолчанию
По умолчанию демон sshd прослушивает TCP-порт 22. Изменение порта снижает подверженность системы атакам, основанным на автоматическом сканировании сети, и, таким образом, повышает безопасность за счет скрытности. Можно указать порт, используя директиву Port в файле конфигурации /etc/ssh/sshd_config.
Также необходимо обновить политику SELinux по умолчанию, чтобы разрешить использование порта, отличного от порта по умолчанию. Для этого используйте инструмент semanage из пакета policycoreutils-python-utils:
# semanage port -a -t ssh_port_t -p tcp port_number
Кроме того, обновите конфигурацию межсетевого экрана:
# firewall-cmd --add-port port_number/tcp
# firewall-cmd --runtime-to-permanent
В предыдущих командах замените port_number на новый номер порта, указанный с помощью директивы Port.
Нет root входа в систему
Если конкретный вариант использования не требует возможности входа в систему от имени пользователя root, следует рассмотреть возможность установки директивы конфигурации PermitRootLogin в значение no в файле /etc/ssh/sshd_config. Отключив возможность входа в систему от имени пользователя root, администратор может проверить, какие пользователи выполняют привилегированные команды после того, как они войдут в систему как обычные пользователи, а затем получат права root пользователя.
В качестве альтернативы установите для PermitRootLogin значение запретить-пароль:
PermitRootLogin prohibit-password
Это обеспечивает принудительное использование аутентификации на основе ключей вместо использования паролей для входа в систему от имени root пользователя и снижает риски за счет предотвращения атак методом перебора.
Использование расширения X Security
Сервер X в клиентах SberLinux не предоставляет расширение X Security. Следовательно, клиенты не могут запрашивать другой уровень безопасности при подключении к ненадежным SSH-серверам с переадресацией X11.
Большинство приложений в любом случае не могут запускаться с включенным этим расширением.
По умолчанию для параметра ForwardX11Trusted в файле /etc/ssh/ssh_config.d/ установлено значение yes, и нет никакой разницы между командами ssh -X remote_machine (ненадежный хост) и ssh -Y remote_machine (доверенный хост).
Если сценарий вообще не требует функции переадресации X11, установите директиве X11Forwarding в файле конфигурации /etc/ssh/sshd_config значение no.
Ограничение доступа к определенным пользователям, группам или доменам
Директивы AllowUsers и AllowGroups в файле конфигурации сервера /etc/ssh/sshd_config позволяют разрешить только определенным пользователям, доменам или группам подключаться к серверу OpenSSH. Можно объединить AllowUsers и AllowGroups для более точного ограничения доступа, например:
AllowUsers *@192.168.1.*,*@10.0.0.*,!*@192.168.1.2
AllowGroups example-group
Предыдущие строки конфигурации принимают соединения от всех пользователей из систем в подсетях 192.168.1.* и 10.0.0.*, за исключением системы с адресом 192.168.1.2. Все пользователи должны быть в группе example-group. Сервер OpenSSH запрещает все другие подключения.
Обратите внимание, что использование списков разрешений (директивы, начинающиеся с Allow) более безопасно, чем использование списков блокировок (параметры, начинающиеся с Deny), поскольку списки разрешений блокируют также новых неавторизованных пользователей или группы.
Изменение общесистемных криптографических политик
OpenSSH использует общесистемные криптографические политики SberLinux, а уровень общесистемной криптографической политики по умолчанию предлагает безопасные настройки для текущих моделей угроз. Чтобы сделать криптографические настройки более строгими, измените текущий уровень политики:
# update-crypto-policies --set FUTURE
Setting system policy to FUTURE
Чтобы отказаться от общесистемных криптополитик для сервера OpenSSH, раскомментируйте строку с переменной CRYPTO_POLICY= в файле /etc/sysconfig/sshd. После этого изменения значения, указанные в модулях Ciphers, MACs, KexAlgorithms и GSSAPIKexAlgorithms в файле /etc/ssh/sshd_config, не переопределяются. Обратите внимание, что эта задача требует глубоких знаний в настройке криптографических опций.
Подключение к удаленному серверу с помощью узла перехода SSH#
Используйте эту процедуру для подключения локальной системы к удаленному серверу через промежуточный сервер, также называемый jump host.
Предварительные условия:
Узел перехода принимает SSH-соединения из локальной системы.
Удаленный сервер принимает SSH-соединения только от узла перехода.
Процедура:
Определите узел перехода, отредактировав файл ~/.ssh/config в локальной системе, например:
Host jump-server1 > HostName jump1.example.ru
Параметр Host определяет имя или псевдоним для хоста, который можно использовать в командах ssh. Значение может соответствовать реальному имени хоста, но также может быть любой строкой.
Параметр HostName задает фактическое имя хоста или IP-адрес узла перехода.
Добавьте конфигурацию перехода на удаленный сервер с помощью директивы ProxyJump в файл ~/.ssh/config в локальной системе, например:
Host remote-server
HostName remote1.example.ru
ProxyJump jump-server1
Используйте свою локальную систему для подключения к удаленному серверу через jump server:
$ ssh remote-server
Предыдущая команда эквивалентна команде удаленного сервера ssh -J jump-server1, если отпустить шаги настройки 1 и 2.
Примечание
Можно указать больше переходных серверов, а также пропустить добавление определений хостов в файл конфигурации, при предоставлении их полных имен хостов, например:
ssh -J jump1.example.ru, jump2.example.ru, jump3.example.ru, remote1.example.ru
Измените обозначение только для имени хоста в предыдущей команде, если имена пользователей или SSH-порты на серверах перехода отличаются от имен и портов на удаленном сервере, например:
$ ssh -J johndoe@jump1.example.ru:75, johndoe@jump2.example.ru:75,johndoe@johndoe@jump3.example.ru:75 joesec@remote1.example.ru:220
Подключение к удаленным машинам с ключами SSH с помощью ssh-agent#
Чтобы избежать ввода парольной фразы каждый раз, когда инициируете SSH-соединение, можно использовать утилиту ssh-agent для кеширования закрытого SSH-ключа. Закрытый ключ и кодовая фраза остаются в безопасности.
Предварительные условия:
Существует удаленный хост с запущенным SSH-демоном, к которому можно подключиться по сети.
Известен IP-адрес или имя хоста, а также учетные данные для входа на удаленный хост.
Сгенерирована пара ключей SSH с парольной фразой и передали открытый ключ на удаленную машину.
Процедура:
При необходимости убедитесь, что можно использовать ключ для аутентификации на удаленном хосте:
Подключитесь к удаленному хосту с помощью SSH:
$ ssh example.user1@198.51.100.1 hostname
Введите пароль, который задан при создании ключа, чтобы предоставить доступ к закрытому ключу.
$ ssh example.user1@198.51.100.1 hostname
host.example.ru
Запустите ssh-агент.
$ eval $(ssh-agent)
Agent pid 20062
Добавьте ключ в ssh-агент.
$ ssh-add ~/.ssh/id_rsa
Enter passphrase for ~/.ssh/id_rsa:<
Identity added: ~/.ssh/id_rsa (example.user0@198.51.100.12)
Проверка:
При необходимости войдите в систему при помощи SSH.
$ ssh example.user1@198.51.100.1
Last login: Mon Sep 14 12:56:37 2020
Обратите внимание, что не нужно было вводить кодовую фразу.
Введение в Python#
Версии Python#
Широко используются две несовместимые версии Python, Python 2.x и Python 3.x.
В таблице ниже представлены версии Python в SberLinux.
Таблица. Версии Python в SberLinux
Version |
Package to install |
Command examples |
|---|---|---|
Python 3.6 |
python3 |
python3, pip3 |
Python 2.7 |
python2 |
python2, pip2 |
Python 3.8 |
python38 |
python3.8, pip3.8 |
Python 3.9 |
python39 |
python3.9, pip3.9 |
Python 3.11 |
python311 |
python3.11, pip3.11 |
Каждая из версий Python распространяется в отдельном модуле, можно настроить и устанавливать несколько модулей параллельно в одной и той же системе.
Модули python38 и python39 не включают в себя те же привязки к системным инструментам (RPM, DNF, SELinux и другие), которые предусмотрены для модуля python36. Поэтому используйте python36 в тех случаях, когда необходима максимальная совместимость с базовой операционной системой или двоичная совместимость. В уникальных случаях, когда системные привязки необходимы вместе с более поздними версиями различных модулей Python, используйте модуль python36 в сочетании с вышестоящими модулями Python сторонних производителей, установленными через pip в среде venv или virtualenv Python.
Установка и использование Python#
В SberLinux Python 3 распространяется в версиях 3.6, 3.8 и 3.9, 3.10, 3.11 предоставляемых модулями python36, python38, python39, python310 и python311 в репозитории AppStream.
Установка Python 3#
Можно установить 8 модулей параллельно, включая модули python27, python36, python38, python39, python310 и python311. Обратите внимание, что параллельная установка не поддерживается для нескольких потоков одним модулем.
Можно установить Python 3+, включая пакеты для версии ether, параллельно с 3.6 в одной и той же системе, за исключением модуля mode_wsgi. Система может установить два HTTP-сервера Apache, подключенных к сети пакетов python3-mode_wsgi, python38-mode_wsgi, python39-mod_wsgi, python310-mode_wsgi и python311-mode_wsgi.
Процедура:
Чтобы установить Python 3.6 для модуля python36, введите:
# yum install python3
Поток модуля python36:3.6 включается автоматически.
Чтобы установить Python 3.8 для модуля python38, введите:
# yum install python38
Поток модуля Python38:3.8 включается автоматически.
Чтобы установить Python 3.9 для модуля python39, введите:
# yum install python39
Поток модуля Python39:3.9 включается автоматически.
Чтобы установить Python 3.11 для модуля python310, введите:
# yum install python311
Поток модуля Python310:3.11 включается автоматически.
Python 3.11 и созданные для него пакеты могут быть установлены параллельно с Python 3.9, Python 3.8 и Python 3.6 в одной системе.
Обратите внимание, что, в отличие от предыдущих версий, Python 3.11 распространяется в виде стандартных пакетов RPM, а не модуля.
Для установки пакетов из python3.11 стека используйте, например:
# попробуйте установить python3.11
# попробуйте установить python3.11-pip
Для запуска интерпретатора используйте, например:
$ python3.11
$ python3.11 -m pip - справка
Обзор шагов:
Чтобы проверить версию Python, установленную в системе, используйте версию python для требуемой версии Python.
Python 3.6:
$ python3 --version
Python 3.8:
$ python3.8 --version
Python 3.9:
$ python3.9 --version
Python 3.11:
$ python3.11 --version
Установка дополнительных пакетов Python 3#
Пакеты с дополнительными модулями для Python 3.6 обычно используют python3- префикс, пакеты для Python 3.8 включают python38- префикс, а пакеты для Python 3.9 включают python39- префикс. Всегда включайте префикс при установке дополнительных пакетов Python, как показано в примерах ниже.
Процедура:
Чтобы установить модуль запросов для Python 3.6, используйте:
# yum install python3-requests
Чтобы установить расширение Cython на Python 3.8, используйте:
# yum install python38-Cython
Чтобы установить установщик пакета pip из Python 3.9, используйте:
# yum install python39-pip
Установка дополнительных инструментов Python 3 для разработчиков#
Дополнительные инструменты Python для разработчиков распространяются через репозиторий Code Ready Linux Builder в соответствующем модуле python3x-devel.
Модуль python38-devel содержит пакет python 38-pytest и его зависимости: пакеты pyparsing, atomic writes, attrs, packaging, py, more-itertools, pluggy и wcwidth.
Модуль python39-devel содержит пакет python 39-pytest и его зависимости: пакеты pyparsing, attrs, packaging, py, more-itertools, pluggy, wcwidth, iniconfig и pybind11. Модуль python 39-devel также содержит пакеты python 39-debug и python 39-Cython.
Примечание
Репозиторий Code Ready Linux Builder и его содержимое не поддерживаются SberLinux.
Чтобы установить пакеты из модуля python39-devel, используйте следующую процедуру.
Процедура:
Включите репозиторий Code Ready Linux Builder:
# subscription-manager repos --enable codeready-builder-for-sberlinux-8-x86_64-rpms
Включите python39-devel модуль:
# yum module enable python39-devel
Установите python 39-pytest пакет:
# yum install python39-pytest
Чтобы установить пакеты из модуля python38-devel, замените python 39- на python 38- в приведенных выше командах.
Установка Python 2#
Некоторые приложения и скрипты еще не были полностью перенесены на Python 3 и требуют запуска Python 2. SberLinux допускает параллельную установку Python 3 и Python 2. Если нужна функциональность Python 2, установите модуль python27, который доступен в репозитории AppStream.
Предупреждение: Python 3 является основным направлением разработки проекта Python. Поддержка Python 2 постепенно прекращается. Модуль python27 имеет более короткий период поддержки, чем SberLinux.
Процедура:
Чтобы установить Python 2.7 из модуля python27, используйте:
# yum install python2
Поток модуля python27:2.7 включается автоматически.
Пакеты с дополнительными модулями для Python 2 обычно используют python2- префикс. Всегда включайте префикс при установке дополнительных пакетов Python, как показано в примерах ниже.
Чтобы установить модуль запросов для Python 2, используйте:
# yum install python2-requests
Чтобы установить расширение Cython на Python 2, используйте:
# yum install python2-Cython
Этапы проверки:
Чтобы проверить версию Python, установленную в системе, используйте:
$ python2 --version
Примечание
По замыслу можно устанавливать модули SberLinux параллельно, включая модули python27, python36, python38 и python39.
Переход с Python 2 на Python 3#
Можно перенести свой прежний код, написанный на Python 2, на Python 3.
Для получения дополнительной информации о том, как перенести большие базы кода на Python 3, см. Консервативное руководство по переносу Python 3.
Обратите внимание, что после этой миграции исходный код Python 2 становится интерпретируемым интерпретатором Python 3 и остается интерпретируемым и для интерпретатора Python 2.
Использование Python#
При запуске интерпретатора Python или команд, связанных с Python, всегда указывайте версию.
Предварительные условия:
Убедитесь, что установлена требуемая версия Python.
Процедура:
Чтобы запустить интерпретатор Python 3.6 или связанные с ним команды, используйте, например:
$ python3
$ python3 -m cython --help
$ pip3 install package
Чтобы запустить интерпретатор Python 3.8 или связанные с ним команды, используйте, например:
$ python3.8
$ python3.8 -m cython --help
$ pip3.8 install package
Чтобы запустить интерпретатор Python 3.9 или связанные с ним команды, используйте, например:
$ python2
$ python2 -m cython --help
$ pip2 install package