Общие сведения

Руководство включает полное поэтапное описание процесса установки продукта «Служба управления конфигурациями "Осмакс"» на операционные системы:

  • Astra Linux Special Edition версии 1.7.3 и выше;

  • РЕД ОС версии 7.3.

Подготовка к установке

На этапе подготовки к установке:

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

  2. Выполните настройку окружения.

  3. Убедитесь, что у вас есть доступ к дистрибутиву продукта требуемой версии.

  4. (Опционально) создайте файл сертификата SSL для синхронизации пользователей по протоколу LDAPS.

  5. (Опционально) создайте Service Principal Name (SPN) и keytab-файл для сервисной учетной записи.

  6. (Опционально) Если вы используете сторонний Java Runtime Environment (JRE), ознакомьтесь с дополнительной инструкцией по запуску бэкенда продукта.

    Дистрибутив Java включен по умолчанию в устанавливаемый пакет бэкендом продукта «Служба управления конфигурациями "Осмакс"».

Требования к программному обеспечению

Установка продукта возможна на операционных системах:

  • Astra Linux Special Edition версии не ниже 1.7.3 (лицензия: GNU General Public License от ООО «РусБИТехАстра»);

  • РЕД ОС версии 7.3.

Убедитесь, что для выбранной ОС установлена подсистема инициализации systemd версии 245 и выше.

Требования к системному и прикладному программному обеспечению приведены в таблице:

Название Описание Версия Тип лицензии Правообладатель

Apache Kafka

Распределенная платформа для обработки потоков данных

3.6.0 и выше

Apache 2.0

Open Source

LDAP-сервер

Сервер, который предоставляет доступ к каталогу объектов, таких как пользователи, группы, компьютеры и другие ресурсы в сети.

Допускается использование любых серверов со стандартной схемой БД Microsoft (Active Directory Schema)

«Служба каталогов» 1.1.0 и выше

GPL-3.0 license

ГК «Иннотех»

Microsoft Windows Server 2012 (или более новый)

Microsoft EULA

Microsoft

Unboundid LDAP 4.0.16

GPL-2.0 license

Open Source

PostgreSQL

СУБД для хранения и обработки данных продукта

Не ниже 14.0

PostgreSQL Licence

Open Source

S3-совместимое файловое хранилище

Система хранения контента (например, Ceph, Minio и др.)

Веб-сервер

ПО, которое используется для обработки запросов от веб-браузеров и ответа на них, а также для предоставления доступа к веб-ресурсам, таким как веб-страницы, изображения, файлы и другие данные (например, Nginx)

Настройка окружения

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

Apache Kafka

Создайте отдельный топик (например, salt-topic) для передачи данных с серверов управления в бэкенд продукта.

Рекомендуемые параметры для топика:

  • retention — время, в течение которого сообщения будут храниться в топике до момента удаления;

  • partitions — способ физического разделения данных в топике на несколько частей.

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

LDAP-сервер

  1. Создайте учетную запись для подключения и сканирования LDAP-сервера.

  2. Создайте учетную запись для валидации билетов Kerberos (можно использовать ту же учетную запись, что и в п.1).

  3. Создайте сервисную учетную запись Kerberos.

  4. Убедитесь, что все компьютеры, которые будут использоваться для работы с модулями «Кабинет администратора» и «Магазин приложений», находятся в составе домена под управлением службы каталогов (Active Directory Domain Services, Samba, FreeIPA или др.), использующей для проверки подлинности протокол Kerberos.

    При использовании PAM-аутентификации для корректной работы сервера управления (master) необходим root-доступ — полный доступ к системе, который предоставляется пользователю с правами администратора (root). Если аутентификация выполняется при помощи LDAP-сервера, то root-доступ необязателен.

    Для корректной работы агентов (minions) root-доступ обязателен.

    Для работы остальных компонентов продукта root-доступ не требуется.

PostgreSQL

  1. Создайте техническую учетную запись пользователя.

  2. Техническому пользователю назначьте схему, в которой будут созданы таблицы с бэкендом автоматически после установки продукта.

  3. Выдайте права пользователю на выполнение DDL-операций.

  4. Создайте дополнительного пользователя для доступа к схеме с правами только на чтение данных (read-only).

S3-совместимое файловое хранилище

  1. Создайте техническую учетную запись.

  2. Создайте бакеты для хранения:

    • формул модуля координации (SaltStack), например: salt-bucket;

    • данных хранилища Pillar модуля координации (SaltStack), например: pillar-bucket;

    • иконок, например: icons-bucket;

    • изображений и скриншотов, например: images-bucket;

    • прочего мультимедиа-контента, например: others-bucket;

    • исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства, например: script-bucket.

Состав дистрибутива

Дистрибутив продукта распространяется в виде архивов в формате tar.gz, доступных для загрузки из репозитория:

https://<repository.domain.name>/repository/<клиент>-<редакция>-raw-packages

Доступ к репозиторию осуществляется с использованием учетной записи, полученной от ГК «Иннотех». Архивы в репозитории сгруппированы по версиям.

Предоставляемые архивы:

Архив с основными модулями (бэкенд, фронтенд, модуль «Удаленный доступ») и компонентами продукта

Архив включает:

  • deb-пакеты, которые используются только при установке продукта на ОС Astra Linux:

    • inno-lcm-core — сборка бэкенда LCM, содержащая скомпилированный код для массовой установки ПО на устройствах и обработки полученных событий;

    • inno-lcm-webadmin — пользовательский интерфейс «Кабинет администратора»;

    • inno-lcm-app-shop — пользовательский интерфейс «Магазин приложений»;

    • inno-ira-tigervnc — пакет для работы «Удаленный доступ» на агентах (minions);

    • libinnovncserver-dev — библиотека, необходимая для компонента inno-ira-guacamole-server;

    • inno-ira-guacamole-server — сервер шлюза удаленного доступа;

    • inno-ira-guacamole-client — WEB-клиент шлюза удаленного доступа;

    • inno-ira-guacamole-schema — БД удаленного доступа;

  • rpm-пакеты, которые используются только при установке продукта на РЕД ОС:

    • inno-lcm-core — сборка бэкенда LCM, содержащая скомпилированный код для массовой установки ПО на устройствах и обработки полученных событий;

    • inno-lcm-core — сборка бэкенда LCM, содержащая скомпилированный код для массовой установки ПО на устройствах и обработки полученных событий;

    • inno-lcm-webadmin — пользовательский интерфейс «Кабинет администратора»;

    • inno-lcm-app-shop — пользовательский интерфейс «Магазин приложений»;

  • confluent_kafka — wheel-пакет для работы с Kafka Returner (используется только при установке продукта на РЕД ОС);

  • файлы:

    • kafka_return_custom.py — файл с инструментом, который перенаправляет сообщения от агентов в топик Kafka;

    • CHANGELOG.md — файл, содержащий журнал изменений проекта в виде упорядоченного списка версий продукта с датами их выхода и описанием;

    • lcm-doc — файлы в формате PDF с сопроводительной документацией, соответствующей версии продукта.

Архив с модулем координации (SaltStack)

Архив включает:

  • deb-пакеты, которые используются только при установке продукта на ОС Astra Linux:

    • inno-lcm-salt-formulas — пакет с формулами — специальными шаблонами для установки ПО на устройствах;

    • salt-api — пакет, предоставляющий REST API для SaltStack;

    • salt-common — пакет, содержащий библиотеки, необходимые для работы SaltStack;

    • salt-master — пакет для установки сервера управления (master), который будет управлять всеми агентами (minions) в инфраструктуре;

    • salt-minion — пакет для установки агентов (minions) на удаленных серверах;

    • salt-cloud — (опциональный модуль) пакет для управления облачными провайдерами;

    • salt-dbg — (опциональный модуль) пакет для отладки установки и поиска ошибок в настройках;

    • salt-ssh — (опциональный модуль) пакет для взаимодействия с агентами (minions) через протокол SSH, который может использоваться в качестве альтернативы, не требующей удаленного агента;

    • salt-syndic — (опциональный модуль) пакет, который используется для настройки среды с несколькими (masters) серверами управления и позволяет связывать их в единую сеть и управлять ими из одного места;

  • rpm-пакеты, которые используются только при установке продукта на РЕД ОС:

    • inno-lcm-salt-formulas — пакет с формулами — специальными шаблонами для установки ПО на устройствах;

    • salt — пакет, содержащий библиотеки, необходимые для работы SaltStack;

    • salt-master — пакет для установки сервера управления (master), который будет управлять всеми агентами (minions) в инфраструктуре;

    • salt-api — пакет, предоставляющий REST API для SaltStack;

    • salt-minion — пакет для установки агентов (minions) на удаленных серверах.

Принципы формирования имен пакетов

Имена пакетов с основными модулями продукта (inno-lcm) формируются по шаблону:

<package_name>_<build_version>-<edition>_<architecture>.<package format>

Где:

  • package_name — наименование модуля продукта;

  • build_version — версия пакета в соответствии с принципами семантического версионирования (мажорная_версия.минорная_версия.патч-версия);

  • edition — редакция дистрибутива;

  • architecture — архитектура;

  • package format — формат пакета; возможные значения: .deb, .rpm.

Пример имени deb-пакета:

inno-lcm-core_1.6.0-1_amd64.deb

Пример имени rpm-пакета:

inno-lcm-core-1.6.0~457514.a6ac910e-1.x86_64.rpm

Имена deb-пакетов модуля координации (salt) формируются по шаблону:

<package_name>_<build_version>_<architecture>.<package format>

Где:

  • package_name — наименование модуля продукта;

  • build_version — версия пакета в соответствии с принципами семантического версионирования (мажорная_версия.минорная_версия.патч-версия);

  • architecture — архитектура;

  • package format — формат пакета; возможные значения: .deb, .rpm.

Пример имени deb-пакета:

salt-common_3006.4_amd64.deb

Пример имени rpm-пакета:

salt-3006.4-0.x86_64.rpm

Схема развертывания

На Рис. 1 представлена схема развертывания продукта.

deployment.drawio
Рис. 1. Схема развертывания

Подготовка сертификатов для настройки TLS(SSL)-шифрования

Для включения TLS(SSL)-шифрования в продукте необходимо предварительно сформировать хранилища доверенных корневых сертификатов УЦ (truststore) и хранилища ключей (keystore), в которых будут содержаться подписанные корневым сертификатом УЦ ключи в формате пар «сертификат-приватный ключ».

При установке бэкенда продукта автоматически формируется хранилище доверенных корневых сертификатов УЦ (truststore) по пути: /etc/ssl/certs/java/cacerts.

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

Для добавления нового доверенного корневого сертификата в truststore используйте утилиту keytool, поставляемую вместе с JRE.

Для создания хранилища ключей (keystore):

  1. Обратитесь в УЦ, который предоставил доверенный корневой сертификат, с запросом на формирование подписанной пары «сертификат-приватный ключ».

  2. (Опционально), если пара «сертификат-приватный ключ» предоставлена в виде отдельных файлов, запакуйте ее в Java-совместимое хранилище, используя утилиту keytool.

После того как вы создадите хранилища сертификатов и ключей, укажите пути до них и пароли в соответствующих конфигурационных параметрах бэкенда в файле application.properties.
Подробнее об установке и конфигурировании бэкенда см. в разделах «Установка бэкенда продукта» и «Конфигурация бэкенда».

Получение сертификата SSL для синхронизации пользователей по протоколу LDAPS

  1. Для извлечения сертификата LDAP-сервера выполните команду в консоли:

    openssl s_client -showcerts -connect <active_directory_domain_controller_address>:<ldap_ssl_port>

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

    openssl s_client -showcerts -connect 10.169.20.3:636

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

    Connecting to 172.28.15.144
    CONNECTED(00000004)
    Can't use SSL_get_servername
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify error:num=20:unable to get local issuer certificate
    verify return:1
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify error:num=21:unable to verify the first certificate
    verify return:1
    depth=0 O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
    verify return:1
    ---
    Certificate chain
     0 s:O=Samba Administration, OU=Samba - temporary autogenerated HOST certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
       i:O=Samba Administration, OU=Samba - temporary autogenerated CA certificate, CN=DEV-LCM-VM0106.lcm.terra.inno.tech
       a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256
       v:NotBefore: Oct 19 14:59:09 2023 GMT; NotAfter: Sep 18 14:59:09 2025 GMT
    -----BEGIN CERTIFICATE-----
    MIIF0DCCA7igAwIBAgIEPUQxZTANBgkqhkiG9w0BAQsFADCBhTEdMBsGA1UEChMU
    U2FtYmEgQWRtaW5pc3RyYXRpb24xNzA1BgNVBAsTLlNhbWJhIC0gdGVtcG9yYXJ5
    IGF1dG9nZW5lcmF0ZWQgQ0EgY2VydGlmaWNhdGUxKzApBgNVBAMTIkRFVi1MQ00t
    Vk0wMTA2LmxjbS50ZXJyYS5pbm5vLnRlY2gwHhcNMjMxMDE5MTQ1OTA5WhcNMjUw
    OTE4MTQ1OTA5WjCBhzEdMBsGA1UEChMUU2FtYmEgQWRtaW5pc3RyYXRpb24xOTA3
    BgNVBAsTMFNhbWJhIC0gdGVtcG9yYXJ5IGF1dG9nZW5lcmF0ZWQgSE9TVCBjZXJ0
    aWZpY2F0ZTErMCkGA1UEAxMiREVWLUxDTS1WTTAxMDYubGNtLnRlcnJhLmlubm8u
    dGVjaDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANnnfyyW1P1I80Cw
    t/TVWTZTRXIHKNPECGz3flV7XzxECUwMN/TZoft3uucukWs6jsa53REmIsjIgUrQ
    3FiQn4lo/fzuC5gbwF9RE7jA3OcankaDjL5exB8FHtVUFy0hjAKulsZ1L1bO2Z49
    2SAZpK64B9IOI092rV2DyiBkkVh3xCRHUpm97Buzvt8ERQsDEGWx8lYJl66F/Zi4
    2QnIlMn1D7Q1VVp5OggqPaua3il9s3q7uoS6hXuin/AD6i3ddT3tHeBP/L/j3bdr
    oesfQl5xd15d0xCdUqMteyMpa+aMj1Sln32hpaM4U4Q8sIn4cLOd+8ZjRclyZyFe
    wRyV4Ox9WKfOlwh+vRNE28zNbhU0ljJM4qIj8mXTAewHCI6xLQEYFjy1GJf7KS6C
    o2Ub5+FwnZ72tXvB99STgvhyD6JhoSThy0OHjqx5Z9HK6Pjx+QPlkk4JEO/KRl0s
    zneehA06XdUUQc2G/Cn5wVMdZpfo3OXiePsEKZKg2AA979TvsqqqCWAbNG4RbXyK
    riCtFyJqqwEiUEOeYr0y65AHV/jD1NlPIYGUzXlFhBnFJlLOoXN04J58p4UbTcdd
    mBBHPmGk69W6Oxf5oF7HJsfZrxHVe8j4lpNH/Ybh54g9otoqpxP157H26dqcRvZM
    mxXDJtg4AoWsoGQXM1ej4S7kwJclAgMBAAGjRDBCMAwGA1UdEwEB/wQCMAAwEwYD
    VR0lBAwwCgYIKwYBBQUHAwEwHQYDVR0OBBYEFOP4eYlKWA77ur5P4ys0xE57aRGj
    MA0GCSqGSIb3DQEBCwUAA4ICAQCHDPbmgIpfqXoKh0x3FtNt6EecJvdLtRPHrBO+
    MHXL9o7SZyqtbXs4mhsoMbP8GGGcJtem02ELZosWLr1/2cg0d9uQuhpB5zLwrTiV
    E7u7ZVADXJc75gMxulBPHDLaUT8AdP0GEVt6W6dw1xQULT1CGI9728vsZ+q9VetK
    3qgtx/lAB16wJKhm0LMxS9FAR2iOfHgnVYHqKMQKkNUecV95imo10G44P6sj4wSt
    L7lB+Za2EA//7OdGvQYeCQCSbpQQbNPV0g1LHXJ/eO5y1EEIRm4gtsTyipg/52fC
    VRTmGw5jZUEzUZBCUY/A4XiyoczqfuO+tGT0rLBZVmP7EC7/KJt3EKnu1CQgkv8w
    gPkgYNX6+2zuOCUirXY8QqciQqD44SSyS2+LNk5qfftoxcNZ5yBiOiJDZ9KayW+F
    t0OwfgTAvGBoBDQ5Gkop1sAEXFEoEhRO8ktOFLjnG6vxEPc35Wj3qX9K3Tye03ue
    hbxv5qrzs5STOF1fqbTuckuP+91ysuNbKvivlB1nlXBXgycoqYRF6/uU/sK1Xesb
    YJ8oYR+7edrYyRpz1WECR9MAS9iH49RfaEVO+8pSxuGwUMtaiKA4BQo02aGLMKDW
    hFtNhfVEmARoKPkuqdIoxjWL9bltPal6mr1ku2P5TwIyQIWHfI1C+mqnxlh2Z78Z
    MDjQmQ==
    -----END CERTIFICATE-----
  2. Скопируйте сертификат из вывода команды и создайте файл с сертификатом.

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

Создание Service Principal Name (SPN) и keytab-файла для сервисной учетной записи

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

  • имена хостов отдельно для каждого из модулей; например:

    • «Кабинет администратора» — web-admin.example.com;

    • «Магазин приложений» — app-shop.example.com;

  • имя домена; например: LCM.TERRA.INNO.TECH;

  • имя сервисной учетной записи; например: lcm_backend_svc.

При создании Service Principal Name (SPN) и keytab-файла модулей «Кабинет администратора» и «Магазин приложений» используется единый принцип.

Ниже приведены примеры создания SPN (Service Principal Name) и keytab-файла модуля «Кабинет администратора» для сервисной учетной записи в домене под управлением Samba и в домене под управлением Active Directory.

Создание Service Principal Name (SPN) в домене под управлением Samba

  1. Создайте SPN с полным доменным именем, выполнив команду:

    samba-tool spn add HTTP/<host-name>@<domain-name> <service-account>

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

    samba-tool spn add HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH lcm_backend_svc
  2. Создайте SPN с коротким именем, выполнив команду:

    $ samba-tool spn add HTTP/<host-name> <service-account>

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

    $ samba-tool spn add HTTP/web-admin.example.com lcm_backend_svc
  3. Проведите проверку созданных SPN, выполнив команду:

    $ samba-tool spn list <service-account>

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

    $ samba-tool spn list lcm_backend_svc

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

    User CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech has the following servicePrincipalName:
    HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
    HTTP/web-admin.example.com
  4. Проведите проверку атрибутов сервисной учетной записи, выполнив команду:

    $ samba-tool user show <service-account>

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

    $ samba-tool user show lcm_backend_svc

    Пример вывода со значимыми параметрами:

    cn: lcm_backend_svc
    name: lcm_backend_svc
    sAMAccountName: lcm_backend_svc
    userPrincipalName: lcm_backend_svc@lcm.terra.inno.tech
    objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=lcm,DC=terra,DC=inno,DC=tech
    msDS-SupportedEncryptionTypes: 24
    accountExpires: 0
    servicePrincipalName: HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
    servicePrincipalName: HTTP/web-admin.example.com
    distinguishedName: CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech

Создание keytab-файла в домене под управлением Samba

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

$ sudo samba-tool domain exportkeytab ./lcm-user.keytab --principal=<service-account>

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

$ sudo samba-tool domain exportkeytab ./lcm-user.keytab --principal=lcm_backend_svc

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

$ sudo klist -e -k ./lcm-user.keytab

Пример файла:

Keytab name: FILE:./lcm-user.keytab
KVNO Principal
---- --------------------------------------------------------------------------
7 web-admin.example.com@LCM.TERRA.INNO.TECH (aes256-cts-hmac-sha1-96)
7 web-admin.example.com@LCM.TERRA.INNO.TECH (aes128-cts-hmac-sha1-96)
7 web-admin.example.com@LCM.TERRA.INNO.TECH(DEPRECATED:arcfour-hmac)
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.

Создание Service Principal Name (SPN) в домене под управлением Active Directory

  1. Создайте SPN с полным доменным именем, выполнив команду:

    setspn -A HTTP/<host-name>@<domain-name> <service-account>

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

    setspn -A HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH lcm_backend_svc
  2. Создайте SPN с коротким именем, выполнив команду:

    setspn -A HTTP/<host-name> <service-account>

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

    setspn -A HTTP/web-admin.example.com lcm_backend_svc

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

    Checking domain DC=lcmtest,DC=lan
    Registering ServicePrincipalNames for CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech
               HTTP/web-admin.example.com
    Updated object
  3. Проведите проверку созданных SPN, выполнив команду:

    setspn -L  <service-account>

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

    setspn -L lcm_backend_svc

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

    Registered ServicePrincipalNames for CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech:
        HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH
        HTTP/web-admin.example.com
  4. Проведите проверку атрибутов сервисной учетной записи, выполнив команду:

    get-aduser -Identity <service-account> -properties servicePrincipalName

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

    get-aduser -Identity lcm_backend_svc -properties servicePrincipalName

    Пример вывода со значимыми параметрами:

    DistinguishedName : CN=lcm_backend_svc,CN=Users,DC=lcm,DC=terra,DC=inno,DC=tech
    Enabled : True
    GivenName : lcm_backend_svc
    Name : lcm_backend_svc
    ObjectClass : user
    ObjectGUID : d903b450-e6c3-4324-9770-0236b00f83f8
    SamAccountName : lcm_backend_svc
    servicePrincipalName : {HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH, HTTP/web-admin.example.com}
    SID : S-1-5-21-1700660301-2837393460-1517524629-1105
    Surname :
    UserPrincipalName : HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH

Создание keytab-файла в домене под управлением Active Directory

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

ktpass -princ HTTP/<host-name>@<domain-name> -mapuser <service-account> -pass <service-account-password> -crypto All -ptype KRB5_NT_PRINCIPAL -out <target-path>\<keytab.filename>

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

ktpass -princ HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH -mapuser lcm_backend_svc -pass "Qwerty123" -crypto All -ptype KRB5_NT_PRINCIPAL -out C:\temp\web-admin_0.keytab

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

Targeting domain controller: lcm-dc-winsrv.<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">lcm</span>.terra.inno.tech
Using legacy password setting method
Successfully mapped HTTP/web-admin.example.com to lcm_backend_svc.
Key created.
Key created.
Key created.
Key created.
Key created.
Output keytab to C:\temp\web-admin_0.keytab:
Keytab version: 0x502
keysize 65 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x1 (DES-CBC-CRC) keylength 8 (0x894ca425cb159eb0)
keysize 65 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x3 (DES-CBC-MD5) keylength 8 (0x894ca425cb159eb0)
keysize 73 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x17 (RC4-HMAC) keylength 16 (0x59fc0f884922b4ce376051134c71e22c)
keysize 89 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x12 (AES256-SHA1) keylength 32 (0x555027fe7864fdd549ea517ff1cff1077fb2bf83de7e6e28eeeb6ed66db556bc)
keysize 73 HTTP/web-admin.example.com@LCM.TERRA.INNO.TECH ptype 1 (KRB5_NT_PRINCIPAL) vno 4 etype 0x11 (AES128-SHA1) keylength 16 (0xe8dfe5b65a4fdb3bc0c367637c5a0606)
Windows не предоставляет встроенных средств для просмотра содержимого keytab-файла. Однако, если у вас на компьютере установлена версия Java JRE, используйте утилиту klist.exe, которая входит в комплект java. cd "c:\Program Files\Java\jre1.8.0_181\bin" klist.exe -K -e -t -k C:\temp\web-admin_0.keytab.
Сохраните файл на сервере, на который будет устанавливаться бэкенд продукта. Путь к файлу необходимо будет указать на этапе его настройки. Также измените права доступа к файлу, предоставив доступ к нему только для пользователя, от имени которого будет запускаться systemd-служба lcm.

Использование стороннего Java Runtime Environment (JRE)

По умолчанию Java Runtime Environment (JRE) уже включен в устанавливаемый deb-/rpm-пакет inno-lcm-core, с бэкендом продукта.

При установке и запуске модуля inno-lcm-core автоматически происходит создание службы lcm.service и запуск бэкенда через встроенный JRE. В данном случае не требуется предпринимать дополнительные действия.

Версия Java должна быть не ниже 17.

Для запуска модуля inno-lcm-core через стороний JRE, выполните действия:

Если вы устанавливаете продукт на Astra Linux, используйте инструкцию:

  1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

    Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
  2. Загрузите и распакуйте архив *.tar.gz с deb-пакетом inno-lcm-core.

  3. Перенесите deb-пакет в требуемую директорию, например, выполнив команду:

    dpkg-deb -R inno-lcm.core-<version>.deb inno-lcm-core /opt/inno-lcm-core
  4. Перейдите в директорию с исполняемыми файлами *.jar модуля inno-lcm-core:

    cd /opt/inno-lcm-core/lib/app
  5. Запустите исполняемый файл lcm-app-runner.jar удобным способом, например, выполнив команду:

    java -Dquarkus.config.locations=/opt/inno-lcm-core/application.properties -jar lcm-app-runner.jar

Если вы устанавливаете продукт на РЕД ОС, используйте инструкцию:

  1. Установите на сервер, на котором будет производиться запуск, JRE не ниже версии 17.

    Убедитесь, что переменная JAVA_HOME содержит путь к актуальной JRE не ниже версии 17.
  2. Загрузите и распакуйте архив *.tar.gz с rpm-пакетом inno-lcm-core.

  3. Перенесите rpm-пакет в требуемую директорию, например, выполнив команду:

    cd /opt/inno-lcm-core
    rpm2cpio inno-lcm-core-<version>.x86_64.rpm | cpio -idmv
  4. Перейдите в директорию с исполняемыми файлами *.jar модуля inno-lcm-core:

    cd /opt/inno-lcm-core/lib/app
  5. Запустите исполняемый файл lcm-app-runner.jar удобным способом, например, выполнив команду:

    java -Dquarkus.config.locations=/opt/inno-lcm-core/application.properties -jar lcm-app-runner.jar

Установка продукта на ОС Astra Linux

В разделе приводится инструкция по установке продукта на ОС Astra Linux Special Edition версии 1.7.3 и выше.

Установка модуля координации (SaltStack)

Чтобы избежать ошибок в работе, для текущей версии продукта рекомендуется использовать SaltStack версии 3006.4.

Чтобы установить модуль координации (SaltStack), выполните следующие шаги:

  1. Скачайте и распакуйте архив с модулем координации (SaltStack) для последующей установки сервера управления (master).

  2. Установите пакеты с модулем координации SaltStack на сервере управления (master).

  3. Выполните настройку сервера управления (master).

  4. Выполните настройку Kafka returner.

  5. Обновите информацию о модуле исполнения для сбора истории пользовательских сессий на сервере управления (master).

  6. Запустите сервер управления (master).

  7. Запустите модуль salt-api.

  8. Скачайте и распакуйте архив с модулем координации (SaltStack) для последующей установки агентов (minions).

  9. Установите пакеты с модулем координации SaltStack на агентах (minions).

  10. Выполните настройку агентов (minions).

  11. Создайте пары открытых ключей (public key) для взаимодействия сервера управления (master) с агентами (minions).

  12. Запустите и проверьте работу systemd-службы для агентов (minions).

Скачивание и распаковка архива с модулем координации (SaltStack) для последующей установки сервера управления (master)

  1. Скачайте архив с модулем координации (SaltStack) требуемой версии и соответствующие файлы контрольных сумм из предоставленного хранилища любым доступным способом.

  2. (Опционально) убедитесь в целостности архива, сравнив его контрольные суммы с контрольными суммами в соответствующих файлах.

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

    shasum -a 512 -c salt_3006.4.zip salt_3006.4.zip.sha512
  3. Перенесите скачанный архив на машину, на которой будет запускаться сервер управления (master), выполнив команду scp (secure copy).

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

    scp salt_3006.4.zip 10.6.32.39
  4. Создайте временный каталог для распаковки и распакуйте архив.

    Пример команд для создания каталога и распаковки архива:

    mkdir salt-lcm
    unzip salt_3006.4.zip -d salt-lcm

    Пример результата выполнения с содержимым архива:

    ./salt-dbg_3006.4_amd64.deb
    ./salt-3006.4_amd.build
    ./salt-ssh_3006.4_amd64.deb
    ./salt-master_3006.4_amd64.deb
    ./salt-common_3006.4_amd64.deb
    ./salt-3006.4_amd64.chages
    ./salt-cloud_3006.4_amd64.deb
    ./salt-minion_3006.4_amd64.deb
    ./salt-3006.4_amd.buildinfo
    ./salt-3006.4.dsc
    ./salt-api_3006.4_amd64.deb
    ./salt_3006.4.zip.xz

Установка пакетов с модулем координации SaltStack на сервере управления (master)

Если вы предполагаете использовать несколько серверов управления (masters), выполните установку отдельно для каждого из них.

На сервере, который вы будете использовать в качестве сервера управления (master), установите следующие deb-пакеты в указанном порядке:

  1. salt-common — пакет, содержащий библиотеки, необходимые для работы модуля координации (SaltStack).

  2. salt-master — пакет для установки сервера управления (master), который будет управлять всеми агентами (minions) в инфраструктуре.

  3. salt-api — пакет, предоставляющий REST API для модуля координации (SaltStack).

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

sudo apt install ./inno-salt/salt-common_3006.4_amd64.deb
sudo apt install ./inno-salt/salt-master_3006.4_amd64.deb
sudo apt install ./inno-salt/salt-api_3006.4_amd64.deb

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

  • salt-cloud — пакет для управления облачными провайдерами;

  • salt-dbg — пакет для отладки установки и поиска ошибок в настройках;

  • salt-ssh — пакет для взаимодействия с агентами (minions) через протокол SSH, который может использоваться в качестве альтернативы, не требующей удаленных агентов;

  • salt-syndic — пакет, который используется для настройки среды с несколькими серверами управления (masters) и позволяет связывать их в единую сеть и управлять ими из одного места.

Конфигурация сервера управления (master)

На машине, на которой установлен сервер управления (master), задайте настройки его конфигурации, следуя инструкциям в разделах ниже.

По умолчанию сервер управления (master) настраивается через главный файл конфигурации — /etc/salt/master.

Также поддерживается создание файлов конфигураций в каталоге /etc/salt/master.d/, что позволяет группировать логически параметры конфигурации.

Подробную информацию о настройке главного файла конфигурации сервера управления (master) см. в официальной документации.

Создание пользователя, от имени которого будут запускаться процессы SaltStack

Чтобы создать пользователя, от имени которого будут запускаться процессы SaltStack, создайте файл конфигурации сервера управления (master) /etc/salt/master.d/user.conf и укажите в нем необходимого пользователя.

Пример:

user: <my_user>
Если параметр не задан, по умолчанию процессы SaltStack будут запускаться от имени пользователя root.
Включение модуля salt-api

Чтобы включить модуль salt-api для модуля координации (SaltStack), выполните шаги:

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/salt-api.conf.

    Пример:

    rest_cherrypy:
      port: 8080
      debug: True
      disable_ssl: True

    Где:

    • rest_cherrypy — параметры управления конфигурацией встроенного веб-сервера Cherrypy, который использует salt-api:

      • port — укажите порт, который будет запущен salt-api (например, 8080);

      • debug — (опционально) включите (True) или отключите (False) режим отладки (debug mode) для salt-api;

      • disable_ssl — (опционально) если в первом шаге вы не установили SSL-сертификаты, задайте значение True.

Включение модуля salt-api с использованием SSL-сертификатов

Чтобы включить модуль salt-api для модуля координации (SaltStack) с использованием SSL-сертификатов, выполните шаги:

  1. Сгенерируйте SSL-сертификат и закрытый ключ для сервера управления (master). В качестве примера здесь и далее будет использоваться сертификат salt-api.crt и закрытый ключ salt-api.key.

  2. Скопируйте сертификат salt-api.crt и закрытый ключ salt-api.key в директорию /etc/pki/tls/certs/.

  3. В файле конфигурации сервера управления (master) /etc/salt/master.d/salt-api.conf задайте следующие настройки:

    rest_cherrypy:
      port: 8000
      host: 0.0.0.0
      ssl_crt: /etc/pki/tls/certs/salt-api.crt
      ssl_key: /etc/pki/tls/certs/salt-api.key

    где:

    • port — порт, на котором будет запущен веб-сервер;

    • host — IP-адрес, на котором будет открыт порт для подключения клиентов;

    • ssl_crt — путь до файла с SSL-сертификатом сервера управления (master);

    • ssl_key — путь до закрытого ключа от SSL-сертификата сервера управления (master).

Настройка подключения к S3-совместимому хранилищу

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

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/fileserver_backend.conf и в параметре fileserver_backend укажите имя хранилища, которое вы будете использовать в качестве бэкенда для файлов.

    Пример:

    fileserver_backend:
      - s3fs
  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/s3.conf и задайте в нем настройки подключения к S3-совместимому хранилищу.

    Пример:

    s3.service_url: <s3_hostname>:<s3_port>
    s3.keyid: <ACCESS_KEY>
    s3.key: <SECRET_KEY>
    s3.buckets:
      - salt-bucket
    s3.path_style: True
    s3.location: <REGION>

    Где:

    • s3.service_url — URL-адрес и порт для обращения к S3-совместимому хранилищу;

    • s3.keyid — ключ доступа, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • s3.key — секретный ключ, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • s3.buckets — имя бакета (например, salt-bucket) для хранения файлов состояния и формул;

    • s3.path_style — стиль представления пути к объектам в S3-совместимом хранилище;

    • s3.location — регион, в котором расположено S3-совместимое хранилище.

      Подробное описание всех параметров приведено в официальной документации.
  2. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf и задайте в нем настройки подключения к S3-совместимому хранилищу для хранения в отдельном бакете данных Pillar.

    Пример:

    ext_pillar:
      - s3:
          service_url: <s3_hostname>:<s3_port>
          keyid: <ACCESS_KEY>
          key: <SECRET_KEY>
          bucket: pillar-bucket
          multiple_env: False
          environment: base
          prefix: ''
          verify_ssl: False
          s3_cache_expire: 30
          s3_sync_on_update: True
          path_style: True
          https_enable: False

    Где:

    • service_url — URL-адрес и порт для обращения к S3-совместимому хранилищу;

    • keyid — ключ доступа, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • key — секретный ключ, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • bucket — имя бакета (например, pillar-bucket), которое будет использоваться для хранения данных Pillar;

    • multiple_env — параметр, который определяет, поддерживается ли использование нескольких окружений (environments) в хранилище Pillar;

    • environment — параметр, который указывает на основное окружение (base environment) для хранилища Pillar;

    • prefix — префикс для путей к данным в S3-хранилище; пустая строка означает отсутствие префикса;

    • verify_ssl — параметр, который указывает, следует ли проверять SSL-сертификаты при обращении к S3-хранилищу;

    • s3_cache_expire — время жизни кэша (в секундах) для данных, полученных из S3-хранилища;

    • s3_sync_on_update — параметр, который определяет, следует ли выполнять синхронизацию данных при обновлении данных Pillar;

    • path_style — стиль представления пути к объектам в S3-хранилище;

    • https_enable — параметр, который указывает, следует ли использовать HTTPS для обращения к S3-хранилищу.

      Подробное описание всех полей приведено в официальной документации.
Настройка подключения к S3-совместимому хранилищу с использованием SSL-сертификатов

Если вы подключаетесь к S3-совместимому хранилищу с использованием SSL-сертификатов, выполните настройки:

  1. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значения параметров:

    s3.https_enable: True
    s3.verify_ssl: False
    При выставлении значения False для параметра verify_ssl валидация сертификата S3-совместимого хранилища выполняться не будет.
  2. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра:

    ext_pillar:
     - s3:
        https_enable: True
        verify_ssl: False
    При выставлении значения False для параметра verify_ssl валидация сертификата S3-совместимого хранилища выполняться не будет.

Если требуется валидация сертификатов S3-совместимого хранилища, выполните следующие действия, выбрав один из двух вариантов, описанных ниже:

  • вариант 1:

    1. Скопируйте файл СА-сертификатов на сервер управления (master).

    2. Определите расположение хранилища сертификатов на сервере управления (master):

      $ /opt/saltstack/salt/bin/python3
      Python 3.10.13 (main, Oct  4 2023, 21:54:22) [GCC 11.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import certifi
      >>> certifi.where()
      '/opt/saltstack/salt/lib/python3.10/site-packages/certifi/cacert.pem'
    3. Добавьте сертификат в хранилище.

      Пример команды для добавления сертификата ca.crt:

      cat ca.crt | sudo tee -a /opt/saltstack/salt/lib/python3.10/site-packages/certifi/cacert.pem
    4. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True).

      Пример:

      s3.verify_ssl: True
      s3.https_enable: True
    5. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True) .

      Пример:

      ext_pillar:
      - s3:
          https_enable: True
          verify_ssl: True
  • вариант 2:

    1. Разместите файл СА-сертификатов, используемый в качестве Issuer в S3-совместимом хранилище, на сервере управления (master) по пути /etc/salt/pki/ca.crt.

    2. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True).

      Пример:

      s3.verify_ssl: True
      s3.https_enable: True
    3. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True) .

      Пример:

      ext_pillar:
      - s3:
          https_enable: True
          verify_ssl: True
Загрузка пользовательских формул в S3-совместимое хранилище
Готовые формулы (подробнее см. раздел «Готовые формулы» документа «Руководство по эксплуатации») импортируются автоматически при установке продукта.

Чтобы загрузить пользовательские формулы (см. раздел «Пользовательские формулы» документа «Руководство по эксплуатации») и формулы-шаблоны (см. раздел «Формулы-шаблоны» документа «Руководство по эксплуатации»), используйте API для импорта формулы в S3-совместимое хранилище importFormulas (см. раздел «Метод importFormulas» документа «Описание API»).

Настройка интеграции с Apache Kafka
Отправка событий с сервера управления (master) в Apache Kafka выполняется с помощью библиотеки librdkafka.

Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/returner.conf.

Пример файла:

returner.kafka_custom.bootstrap:
  - "<kafka_host>:<kafka_port>"
returner.kafka_custom.topic: 'salt-topic'
returner.kafka_custom.security.protocol: ""
returner.kafka_custom.ssl.cipher.suites: ""
returner.kafka_custom.ssl.curves.list: ""
returner.kafka_custom.ssl.sigalgs.list: ""
returner.kafka_custom.ssl.key.location: ""
returner.kafka_custom.ssl.key.password: ""
returner.kafka_custom.ssl.key.pem: ""
returner.kafka_custom.ssl.certificate.location: ""
returner.kafka_custom.ssl.certificate.pem: ""
returner.kafka_custom.ssl.ca.location: ""
returner.kafka_custom.ssl.ca.pem: ""
returner.kafka_custom.ssl.ca.certificate.stores: ""
returner.kafka_custom.ssl.crl.location: ""
returner.kafka_custom.ssl.keystore.location: ""
returner.kafka_custom.ssl.keystore.password: ""
returner.kafka_custom.ssl.providers: ""
returner.kafka_custom.ssl.engine.id: ""
returner.kafka_custom.enable.ssl.certificate.verification: ""
returner.kafka_custom.ssl.endpoint.identification.algorithm: ""
returner.kafka_custom.debug: "all"
returner.kafka_custom.log_level: ""
returner.kafka_custom.allow.auto.create.topics: "true"
event_return: kafka_custom

В таблицах ниже приводится описание параметров из файла.

Обязательные параметры:

Наименование Описание Пример значения

returner.kafka_custom.bootstrap

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

"192.168.1.101:9092"

returner.kafka_custom.topic

Топик Apache Kafka

salt-topic

event_return

Выбор способа отправки событий возврата

kafka_custom

Опциональные параметры:

Наименование Описание Пример значения

returner.kafka_custom.security.protocol

Протокол, который используется для соединения с Apache Kafka

plaintext

returner.kafka_custom.ssl.cipher.suites

Набор шифров (именованная комбинация аутентификации, шифрование, MAC-адреса и алгоритмы обмена ключами), используемые для согласования параметров безопасности сетевого подключения по протоколу SSL. Подробнее см. SSL_CTX_set_cipher_list

returner.kafka_custom.ssl.curves.list

Поддерживаемые кривые (supported curves), стандартные/именованные или «явные» GF(2^k) или GF(p) для использования сервером, которые передаются в сообщении TLS ClientHello. Подробнее см. SSL_CTX_set1_curves_list

returner.kafka_custom.ssl.sigalgs.list

Поддерживаемые алгоритмы цифровой подписи для использования сервером, которые передаются в сообщении TLS ClientHello. Подробнее см. SSL_CTX_set1_sigalgs

returner.kafka_custom.ssl.key.location

Путь к закрытому ключу клиента (PEM), который используется для аутентификации

returner.kafka_custom.ssl.key.password

Пароль для закрытого ключа (для использования с ssl.key.location и set_ssl_cert())

returner.kafka_custom.ssl.key.pem

Строка закрытого ключа клиента (в PEM-формате), которая используется для аутентификации

returner.kafka_custom.ssl.certificate.location

Путь к публичному ключу клиента (в PEM-формате), который используется для аутентификации

returner.kafka_custom.ssl.certificate.pem

Строка публичного ключа клиента (в PEM-формате), которая используется для аутентификации

returner.kafka_custom.ssl.ca.location

Путь к файлу или каталогу сертификатов CA (Certificate Authority) для проверки ключа брокера

returner.kafka_custom.ssl.ca.pem

Строка сертификата CA (в PEM-формате) для проверки ключа брокера

returner.kafka_custom.ssl.ca.certificate.stores

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

returner.kafka_custom.ssl.crl.location

Путь к CRL для валидации сертификата брокера

returner.kafka_custom.ssl.keystore.location

Путь к хранилищу ключей клиента (PKCS#12), которые используются для аутентификации

returner.kafka_custom.ssl.keystore.password

Пароль хранилища ключей клиента (PKCS#12)

returner.kafka_custom.ssl.providers

Список провайдеров (разделенный запятыми) OpenSSL 3.0.x

returner.kafka_custom.ssl.engine.id

Идентификатор OpenSSL

returner.kafka_custom.enable.ssl.certificate.verification

Включение проверки сертификата встроенного брокера OpenSSL (сервера). Эта проверка может быть расширена приложением путем реализации certificate_verify_cb

returner.kafka_custom.ssl.endpoint.identification.algorithm

Алгоритм идентификации endpoint для проверки имени хоста брокера с использованием сертификата брокера

returner.kafka_custom.debug

Список контекстов отладки (разделенный запятыми), которые необходимо включить

returner.kafka_custom.log_level

Уровень логирования

returner.kafka_custom.allow.auto.create.topics

Разрешение автоматического создания темы в брокере при подписке на несуществующие темы или назначения им тем.

Для корректной работы данной конфигурации брокер должен быть настроен с параметром auto.create.topics.enable=true
В качестве инструкции по генерации сертификатов используйте документ "Using SSL with librdkafka".
Настройка интеграции с Apache Kafka с использованием защищенного TLS-соединения

Если вы настраиваете интеграцию с использованием защищенного TLS-соединения, в файле конфигурации сервера управления (master) /etc/salt/master.d/returner.conf укажите все настройки, приведенные ниже:

returner.kafka_custom.bootstrap:
  - 10.31.0.170:9092
returner.kafka_custom.topic: salt-topic
returner.kafka_custom.security.protocol: "ssl"
returner.kafka_custom.ssl.key.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaclient.key"
returner.kafka_custom.ssl.key.password: "abcdefgh"
returner.kafka_custom.ssl.certificate.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaclient.pem"
returner.kafka_custom.ssl.ca.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaca.crt"
returnet.kafka_custom.ssl.endpoint.identification.algorithm: "none"
returner.kafka_custom.enable.ssl.certificate.verification: "false"
returner.kafka_custom.allow.auto.create.topics: "true"
returner.kafka_custom.debug: "all"
event_return: kafka_custom
Настройка режима мульти-мастер с автоматическим переключением (failover)
Настройки, описанные ниже, являются опциональными и выполняются только при использовании режима мульти-мастер с автоматическим переключением (failover).
  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/master_sign_pubkey.conf.

  2. В конфигурационном файле сервера управления (master) включите настройку подписи всех открытых ключей, установив значение параметра:

    master_sign_pubkey: True
  3. Перезапустите службу salt-master. После перезапуска сервер управления (master) автоматически создаст новую пару ключей и будет использовать ее для создания подписи открытых ключей, прикрепленной к ответу аутентификации:

    master_sign.pem
    master_sign.pub
  4. (Опционально) задайте имя для пары ключей подписи, установив значение параметра:

    master_sign_key_name: <name_without_suffix>
Настройка режима мульти-мастер с автоматическим переключением (failover)
Настройки, описанные ниже, являются опциональными и выполняются только при использовании режима мульти-мастер с автоматическим переключением (failover).
  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/master_sign_pubkey.conf.

  2. В конфигурационном файле сервера управления (master) включите настройку подписи всех открытых ключей, установив значение параметра:

    master_sign_pubkey: True
  3. Перезапустите службу salt-master. После перезапуска сервер управления (master) автоматически создаст новую пару ключей и будет использовать ее для создания подписи открытых ключей, прикрепленной к ответу аутентификации:

    master_sign.pem
    master_sign.pub
  4. (Опционально) задайте имя для пары ключей подписи, установив значение параметра:

    master_sign_key_name: <name_without_suffix>
Настройка параметров оптимизации производительности работы сервера управления (master)

При описанной выше настройке сервер управления (master) вычисляет подпись для каждого запроса аутентификации, что требует большого количества ресурсов процессора.

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

Включение этого параметра также дает пользователям возможность иметь пару ключей подписи в системе, отличной от текущего сервера управления (master), и создавать там подпись с открытыми ключами. Вероятно, в системе с более строгими правилами брандмауэра, без доступа в Интернет и с меньшим количеством пользователей.

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

salt-key --gen-signature

В директории сервера управления (master) pki будет создан файл с подписью по умолчанию:

/etc/salt/pki/master/master_pubkey_signature

Это простой текстовый файл с двоичной подписью, преобразованной в base64. Если пара подписи еще не существует, пара подписи и файл подписи будут автоматически созданы за один вызов:

salt-key --gen-signature --auto-create

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

master_use_pubkey_signature: True

Для этого в каталоге сервера управления (master) pki должен присутствовать файл master_pubkey_signature с правильной подписью. Если у файла будет другое имя, задайте его, указав значение параметра:

master_pubkey_signature: <filename>

При наличии большого количества серверов управления (masters) и открытых ключей (по умолчанию и для подписи) рекомендуется использовать имя хоста salt-masters для имен файлов подписи. Подписи легко перепутать, поскольку они не несут никакой информации о ключе, из которого была создана подпись.

Подробное описание включения режима мульти-мастер с автоматическим переключением (failover) см. в документе «Руководство по эксплуатации» в разделе «Настройка режима мульти-мастер с автоматическим переключением (failover)».

Настройка Kafka returner

Загрузка Kafka returner в S3-совместимое хранилище

В S3-совместимое хранилище поместите файл kafka_return_custom.py в бакет salt-bucket по пути /base/_returners.

Пример результата:

kafka returner path
Обновление информации о Kafka returner на сервере управления (master)

Чтобы убедиться в корректности установки и готовности Kafka returner к использованию, обновите информацию о нем на сервере управления (master), выполнив команду:

sudo salt-run saltutil.sync_returners

Обновление информации о модуле исполнения для сбора истории пользовательских сессий на сервере управления (master)

Модуль исполнения для сбора истории пользовательских сессий запускается автоматически при установке бэкенда продукта и обеспечивает запись данных в S3-бакет salt-bucket в файл user_sessions.py по пути base/_modules/.

Для корректной работы модуля обновите информацию о нем на сервере управления (master), выполнив команду:

salt '*' saltutil.sync_modules --async

Запуск сервера управления (master)

  1. Запустите сервер управления (master), выполнив команду:

    sudo systemctl start salt-master
  2. Проверьте статус сервера управления (master), выполнив команду:

    sudo systemctl status salt-master

Запуск модуля salt-api

  1. Запустите модуль salt-api, выполнив команду:

    sudo systemctl start salt-api
  2. Проверьте статус модуля salt-api, выполнив команду:

    sudo systemctl status salt-api

Скачивание и распаковка архива с модулем координации (SaltStack) для последующей установки агентов (minions)

  1. Скачайте архив с модулем координации (SaltStack) требуемой версии и соответствующие файлы контрольных сумм из предоставленного хранилища любым доступным способом.

  2. (Опционально) убедитесь в целостности архива, сравнив его контрольные суммы с контрольными суммами в соответствующих файлах.

    Пример команды для проверки целостности:

    shasum -a 512 -c salt_3006.4.zip salt_3006.4.zip.sha512
  3. Перенесите deb-пакеты salt-common и salt-minion на машину, на которой будет запускаться агент (minion), выполнив команду scp (secure copy).

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

    scp salt_3006.4.zip 10.6.32.39
  4. Создайте временный каталог для распаковки и распакуйте архив.

    Пример команд для создания каталога и распаковки архива:

    mkdir salt-lcm
    unzip salt_3006.4.zip -d salt-lcm

    Пример результата выполнения с содержимым архива:

    ./salt-dbg_3006.4_amd64.deb
    ./salt-3006.4_amd.build
    ./salt-ssh_3006.4_amd64.deb
    ./salt-master_3006.4_amd64.deb
    ./salt-common_3006.4_amd64.deb
    ./salt-3006.4_amd64.chages
    ./salt-cloud_3006.4_amd64.deb
    ./salt-minion_3006.4_amd64.deb
    ./salt-3006.4_amd.buildinfo
    ./salt-3006.4.dsc
    ./salt-api_3006.4_amd64.deb
    ./salt_3006.4.zip.xz

Установка пакетов с модулем координации SaltStack на агентах (minions)

Чтобы установить пакеты с модулем координации SaltStack на агентах (minions), выполните следующие шаги:

Установите deb-пакеты стандартным способом в указанном порядке на устройствах, которые будут использоваться в качестве агентов (minions):

  1. salt-common — пакет, содержащий библиотеки, необходимые для работы SaltStack.

  2. salt-minion — пакет для установки агентов (minions) на удаленных устройствах.

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

sudo apt install ./inno-salt/salt-common_3006.4_amd64.deb
sudo apt install ./inno-salt/salt-minion_3006.4_amd64.deb

Конфигурация агента (minion)

На машине, на которой установлен агент (minion), задайте настройки его конфигурации, следуя инструкции ниже.

По умолчанию агент (minion) настраивается через главный файл конфигурации — /etc/salt/minion.

Также поддерживается создание файлов конфигураций в каталоге /etc/salt/minion.d/, что позволяет группировать логически параметры конфигурации.

Подробную информацию о настройке главного файла конфигурации агента см. в официальной документации.

  1. Cоздайте файл конфигурации агента (minion) /etc/salt/minion.d/master.conf.

  2. Задайте параметры для подключения к серверу управления (master).

  3. Задайте интервал в минутах, через который агент будет отправлять ping-запрос на сервер управления (master). Рекомендуемое значение — 10 минут.

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

    При задании параметра следует учитывать следующие факторы:

    • чем меньше значение параметра, тем больший объем данных будет передаваться в единицу времени, увеличивая нагрузку на сеть;

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

    Пример файла:

    master:
      - <адрес сервера управления (master)>
    ping_interval: 10
  4. (Опционально) для организации подключения в отказоустойчивом режиме (HA) — в режиме «мультимастер» (failover) внесите соответствующие настройки в файл /etc/salt/minion.d/master.conf. Ниже представлены минимальные настройки для работы с типом конфигурации failover:

    master:
      - <адрес 1-ого сервера управления (master)>
      - <адрес 2-ого сервера управления (master)>
      - ...
      - <адрес N-ого сервера управления (master)>
    
    master_type: failover
    master_alive_interval: 60
    master_failback: True
    master_failback_interval: 30
    random_master: true

    Где:

    • master_type — используемый способ подключения к серверам управления (master) (режим failover);

    • master_alive_interval — таймаут проверки серверов на предмет доступности, используемый для переключения между серверами;

    • master_failback — сценарий повторного подключения к серверам при их недоступности (значение True позволяет выполнить попытку подключения к серверам, которые были ранее недоступны);

    • master_failback_interval — таймаут проверки серверов при их повторной недоступности;

    • random_master — сценарий выбора сервера управления (master) из списка (значение True указывает, что будет выбираться случайный сервер из списка).

      Подробнее о настройке режима мульти-мастер с автоматическим переключением (failover) см. в документе «Руководство по эксплуатации» в разделе «Настройка режима мульти-мастер с автоматическим переключением (failover)».
  5. (Опционально) создайте файл конфигурации агента (minion) /etc/salt/minion.d/log_level.conf и задайте в нем параметр log_level, чтобы включить подробный уровень логирования.

    Пример файла:

    log_level: debug
  6. (Опционально) создайте файл конфигурации агента (minion) /etc/salt/minion.d/sudo_user.conf и задайте в нем пользователя, от имени которого будут запускаться процессы SaltStack.

    Пример файла:

    user: user
    sudo_user: root

    Где:

    • user — пользователь, от имени которого будут запускаться процессы SaltStack (значение по умолчанию: root);

    • sudo_user — пользователь, с правами которого будут выполняться удаленные команды SaltStack от имени активного пользователя (заданного в параметре user)

      Обычно для параметра sudo_user указывается значение root. В этом случае в параметре user не может быть указан пользователь root.

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

      1. Добавьте нового пользователя в файл sudoers и укажите, что от имени этого пользователя может запускаться агент (minion).

      2. Очистите кэш агента (minion).

      3. Укажите нового пользователя в качестве владельца каталога minion pki: sudo_user: root.

Создание пар открытых ключей (public key) для взаимодействия сервера управления (master) с агентами (minions)

Сервер управления (master) взаимодействует с агентами (minion) посредством открытого ключа шифрования и аутентификации. Чтобы агент (minion) смог принять команды от сервера управления (master), его ключ должен быть принят сервером управления (master).

Для управления всеми ключами на сервере управления (master) используйте команду salt-key.

Для просмотра всех ключей, которые находятся на сервере управления (master) используйте команду salt-key -L.

Пример:

# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion01
Rejected Keys:

Где:

  • Accepted — принятые ключи; в этом состоянии агент (minion) может общаться с сервером управления (master);

  • Rejected — ключи, отклоненные с помощью команды salt-key; в этом состоянии агент (minion) не принимает команды с сервера управления (master);

  • Denied — ключи, автоматически отклоненные сервером управления (master); в этом состоянии агент (minion) не принимает команды с сервера управления (master);

  • Unaccepted — ключи, которые находятся в ожидании принятия.

Чтобы принять все отложенные (Unaccepted) ключи, используйте команду salt-key -A.

Пример:

# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
minion01
Proceed? [n/Y] y
Key for minion minion01 accepted.

Чтобы принять ключ только выбранного агента (minion), используйте эту же команду и в аргументе -a укажите имя хоста агента (minion).

Пример:

# salt-key -a minion01
The following keys are going to be accepted:
Unaccepted Keys:
minion
Proceed? [n/Y] y
Key for minion minion01 accepted.

Обмен командами и данными между сервером управления (master) и агентом (minion) возможен только после того, как будет произведен обмен ключами, и ключ агента будет принят (Accepted) сервером управления (master).

Пример:

# salt-key -L
Accepted Keys:
minion01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

В тестовых целях допустимо использовать автоматический прием с подтверждением всех ключей от любых агентов (minions), исключающий необходимость ручного подтверждения каждого нового агента (minion). Для этого в файле конфигурации сервера управления (master) задайте параметр:

auto_accept: true

Запуск и проверка работы systemd-службы для агента (minion)

  1. Запустите systemd-службу salt-minion, выполнив команду:

    sudo systemctl start salt-minion
  2. Перезапустите systemd-службу salt-minion, выполнив команду:

    sudo systemctl restart salt-minion
  3. Проверьте статус службы salt-minion, выполнив команду:

    sudo systemctl status salt-minion

Установка бэкенда и фронтенда продукта

Чтобы установить бэкенд и фронтенд продукта, выполните шаги:

  1. Скачайте и распакуйте архив с основными модулями продукта.

  2. Установите бэкенд.

  3. Выполните настройку бэкенда.

  4. Установите фронтенд и выполните настройку веб-сервера.

Скачивание и распаковка архива с основными модулями продукта

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

  1. Скачайте архив с deb-пакетами требуемой версии и соответствующие файлы контрольных сумм из предоставленного хранилища любым доступным способом.

  2. (Опционально) убедитесь в целостности архива, сравнив его контрольные суммы с контрольными суммами в соответствующих файлах.

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

    shasum -a 512 -c inno-lcm-all-1.6.0.tar.gz inno-lcm-all-1.6.0.tar.gz.sha512
  3. Перенесите скачанный архив на машину, на которой будет запускаться inno-lcm, выполнив команду scp (secure copy):

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

    scp inno-lcm-all-1.6.0.tar.gz 10.6.32.218
  4. Создайте временный каталог для распаковки и распакуйте архив.

    Пример команд для создания каталога и распаковки архива:

    mkdir inno-lcm
    tar xvf inno-lcm-all-1.6.0.tar.gz -C inno-lcm

    Пример результата выполнения с содержимым архива:

    x inno-lcm-salt-formulas-0.12.0.tar.gz
    x salt-custom/kafka_return_custom.py
    x packages/inno-lcm-core_1.6.0-1_amd64.deb
    x packages/inno-lcm-webadmin_1.3.3-1_all.deb
    x packages/inno-lcm-app-shop_1.2.0-1_all.deb
    x docs/LCM-UserGuide-Ru.pdf
    x docs/LCM-API-Guide-Ru.pdf
    x docs/LCM-AdminGuide-Ru.pdf
    x docs/LCM-MaintenanceGuide-Ru.pdf
    x docs/LCM-Desc-Ru.pdf
    x docs/LCM-InstallGuide-Ru.pdf
    x docs/CHANGELOG.md

Установка бэкенда продукта

Установку бэкенда можно выполнить как на отдельном сервере, так и на сервере вместе с фронтендом продукта. Для этого установите пакет inno-lcm-core, выполнив команду:

sudo apt install ./<пакет>

Пример:

sudo apt install ./inno-lcm-core_1.6.0-1_amd64.deb
Проверка установки

После успешной установки пакета:

  1. Создан конфигурационный файл с настройками по умолчанию — /opt/inno-lcm-core/application.properties (описание настроек см. в разделе «Конфигурация бэкенда»).

    В случае когда выполняется обновление продукта до более новой версии, файл application.properties будет оставаться неизменным, но дополнительно будет создаваться файл application.example.properties. Этот файл будет носить ознакомительный характер и использоваться в качестве примера для самостоятельного переопределения параметров в конфигурационном файле application.properties.
  2. Создана systemd-служба lcm.

    При установке пакета inno-lcm-core автоматически создается пользователь inno-osmax-core, от имени которого будет запускаться systemd-служба lcm. При обновлении или удалении пакета пользователь удален не будет.

Чтобы запустить systemd-службу lcm, выполните команду:

sudo systemctl start lcm

Для включения автозапуска systemd-службы lcm используйте команду:

sudo systemctl enable lcm

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

sudo systemctl status lcm

В случае успешного запуска система вернет ответ, где в поле Active будет указано значение active (running):

systemctl status lcm
● lcm.service
   Loaded: loaded (/etc/systemd/system/lcm.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2024-01-24 19:24:40 MSK; 22h ago
 Main PID: 7894 (inno-lcm-core)
    Tasks: 53 (limit: 19048)
   Memory: 926.0M
   CGroup: /system.slice/lcm.service
           └─7894 /opt/inno-lcm-core/bin/inno-lcm-core

При неуспешном запуске поле Active будет содержать иное значение. В этом случае проверьте логи системы (см. раздел «Рекомендации по сбору и предоставлению информации о проблеме/ошибке» документа «Руководство по эксплуатации»).

Конфигурация бэкенда

Конфигурация бэкенда выполняется в файле application.properties, помещенном в каталог /opt/inno-lcm-core. Файл создается автоматически при установке deb-пакета inno-lcm-core и содержит значения по умолчанию.

Пример конфигурационного файла с настройками по умолчанию:

## This is an example of `application.properties` file as main configuration file for lcm-core backend


###############################################################################
# HTTP server properties section                                              #
###############################################################################

## Main application port
quarkus.http.port=8081

## SSL configuration section.
## To enable serving requests via HTTPS uncomment the following parameters:
#quarkus.http.insecure-requests=disabled
#quarkus.http.ssl-port=8081
#quarkus.http.ssl.certificate.key-store-file=/opt/inno-lcm-core/keystore.jks
#quarkus.http.ssl.certificate.key-store-password=keystore@12345

###############################################################################
# Authentication & Authorization section                                      #
###############################################################################

## Enable/disable authentication
lcm.application.auth.disabled=false
## Enables kerberos authentication debug mode
#quarkus.kerberos.debug=true
## There are 2 alternative options for the kerberos credentials [principal realm, name and password] defining:
## 1) via direct defining;
## 2) via keytab file path defining
##
## Direct kerberos credentials defining:
quarkus.kerberos.service-principal-name=lcm_backend_svc
quarkus.kerberos.service-principal-realm=my.domain.com
quarkus.kerberos.service-principal-password=Password123
## Path to keytab:
#quarkus.kerberos.keytab-path=/opt/inno-lcm-core/my_file.keytab

## Old deprecated authorization based on LDAP-groups only
## List of LDAP groups whose users are authorized in Admin Console
#lcm.authorization.user-groups-white-list[0]=CN=testGroup,CN=Users,DC=inno,DC=test

# New RBAC
lcm.authorization.rbac.enabled=false
# The following users will be mapped to the superuser role when the application starts
#lcm.authorization.rbac.super-users[0]=alice@INNO.TEST
#lcm.authorization.rbac.super-users[1]=bob@INNO.TEST

###############################################################################
# Database properties section                                                 #
###############################################################################

## Main datasource
quarkus.datasource."lcm-db".username=lcm
quarkus.datasource."lcm-db".password=password
quarkus.datasource."lcm-db".reactive.url=postgresql://localhost:5432/lcm
## If you need to specify default DB schema use the syntax below
#quarkus.datasource."lcm-db".reactive.url=postgresql://localhost:5432/lcm?search_path=lcm_schema_name

## Main datasource Liquibase config
quarkus.datasource."lcm-db".jdbc.url=jdbc:postgresql://localhost:5432/lcm
quarkus.liquibase."lcm-db".default-schema-name=lcm
quarkus.liquibase."lcm-db".migrate-at-start=True

## Readonly datasource
quarkus.datasource."lcm-db-readonly".username=readonly
quarkus.datasource."lcm-db-readonly".password=password
quarkus.datasource."lcm-db-readonly".reactive.url=postgresql://localhost:5432/lcm
quarkus.datasource."lcm-db-readonly".jdbc.url=jdbc:postgresql://localhost:5432/lcm

###############################################################################
# Hardware inventory properties section                                       #
###############################################################################

# Schedule for collections pillars synchronization with S3 (quartz cron format)
# [At second :00, every 15 minutes starting at minute :00, of every hour]
lcm.inventory.job.sync-collection-pillars.cron.expr=0 0/15 * ? * * *

# Determines how long session history data should be stored before deletion, 90 days by default
lcm.inventory.job.user-sessions-cleanup.storage-days-count=90

# Schedule for session history cleaning (quartz cron format)
# [At 00:00:00am every day]
lcm.inventory.job.user-sessions-cleanup.cron-expr=0 0 0 ? * * *

# Determines the maximum amount of machine custom attributes in one section
lcm.inventory.machine-attribute.section.size=20

# Determines the maximum amount of user custom attributes in one section
lcm.inventory.user-attribute.section.size=20

# The number of minutes since the last agent activity before the device goes into "Offline" status
lcm.inventory.settings.agent.minutes-to-become-offline=5
# Absolute file path to `wtmp` file which stores historical data of user logins and logouts
lcm.inventory.settings.agent.user-session-file-path=/var/log/wtmp
# Absolute file path to `utmp` file which stores user sessions in real time
lcm.inventory.settings.agent.active-user-session-file-path=/var/run/utmp

## Determines the page size for any ldap query
lcm.inventory.ldap.search-page-size=200
## The first LDAP datasource configuration
lcm.inventory.ldap.datasource[0].name=my.domain.com
lcm.inventory.ldap.datasource[0].base-dn=DC=my,DC=domain,DC=com
lcm.inventory.ldap.datasource[0].host=localhost
lcm.inventory.ldap.datasource[0].port=636
lcm.inventory.ldap.datasource[0].username=administrator@my.domain.com
lcm.inventory.ldap.datasource[0].password=Welkom123
## Optional section for the LDAP datasource
# lcm.inventory.ldap.datasource[0].connect-timeout-millis=10000
# lcm.inventory.ldap.datasource[0].response-timeout=10000
# lcm.inventory.ldap.datasource[0].abandon-on-timeout=true
# lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use=true

## The second and subsequent LDAP datasource configurations are optional
#lcm.inventory.ldap.datasource[1].name=my2.domain.com
#lcm.inventory.ldap.datasource[1].base-dn=DC=my2,DC=domain,DC=com
#lcm.inventory.ldap.datasource[1].host=192.168.0.1
#lcm.inventory.ldap.datasource[1]...

## LDAPS (LDAP over SSL) parameters section.
## There are 3 options available for LDAP datasource:
## value `false` - disable LDAPS
## value `trust_all` - enable LDAPS, allow any SSL certificate without validation
## value `true` - enable LDAPS, requires path to the certificate file
#lcm.inventory.ldap.datasource[0].ssl=true
#lcm.inventory.ldap.datasource[0].ssl-certificate=/opt/inno-lcm-core/samba_cert.pem

###############################################################################
# Application Store properties section                                        #
###############################################################################

# Determines the amount of hours after which order is considered failed
lcm.order-management.completion.time.hours=12
# Schedule for tracking long-running orders as failed (quartz cron format)
# [At second :00 of minute :00 of every hour]
lcm.order-management.autocomplete.cron.expr=0 0 * ? * * *

###############################################################################
# Kafka messages section                                                      #
###############################################################################

## Kafka bootstrap servers (comma separated)
mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092
# Kafka topic name
mp.messaging.incoming.salt-events-kafka.topic=salt-topic

## Kafka SSL connection parameters section.
## To enable SSL connection mode uncomment three following parameters:
#mp.messaging.connector.smallrye-kafka.security.protocol=SSL
#mp.messaging.connector.smallrye-kafka.ssl.truststore.location=/etc/ssl/certs/java/cacerts
#mp.messaging.connector.smallrye-kafka.ssl.truststore.password=changeit
## Optionally if the custom truststore is used:
## To change the format use one of JKS, JCEKS, P12, PKCS12, PFX. Default format is JKS
#mp.messaging.connector.smallrye-kafka.ssl.truststore.type=PKCS12

###############################################################################
# REST clients common configuration                                           #
###############################################################################

## SSL connection parameters sections.
## To enable accessing REST endpoints via HTTPS uncomment two following parameters:
#quarkus.rest-client.trust-store=/etc/ssl/certs/java/cacerts
#quarkus.rest-client.trust-store-password=changeit
## Optionally if the custom truststore is used:
## To change the format use one of JKS, JCEKS, P12, PKCS12, PFX. Default format is JKS
#quarkus.rest-client.trust-store-type=PKCS12
## For disabling SSL connection verification you can use option below
#quarkus.rest-client.remote-access.trust-all=true

###############################################################################
# SaltStack integration section                                               #
###############################################################################

lcm.salt-adapter.command-runner.http-scheme=http
lcm.salt-adapter.command-runner.master-api-port=8000
lcm.salt-adapter.command-runner.global-auth.eauth=pam
lcm.salt-adapter.command-runner.global-auth.login=salt_api
lcm.salt-adapter.command-runner.global-auth.password=123
lcm.salt-adapter.command-runner.retry.number-of-attempts=5
lcm.salt-adapter.command-runner.retry.initial-back-off=1s
lcm.salt-adapter.command-runner.retry.max-back-off=1s

## Salt masters configuration section.
## Optional, this section should be used when backend server can't resolve salt master by DNS name
#lcm.salt-adapter.command-runner.override-masters[0].id=salt-master1
#lcm.salt-adapter.command-runner.override-masters[0].uri=http://192.168.0.1:8000

## The second and other Salt masters can be configured in the same way
#lcm.salt-adapter.command-runner.override-masters[1].id=salt-master2
#lcm.salt-adapter.command-runner.override-masters[1].uri=http://192.168.0.2:8000

###############################################################################
# Remote access service integration section                                   #
###############################################################################

# URL to the guacamole remote access service
quarkus.rest-client.remote-access.url=https://guacamole-host.net:9099/guacamole
# for an advanced configuration of the quarkus REST client to the guacamole service you can set up the following settings group
#quarkus.rest-client.remote-access.connect-timeout
#quarkus.rest-client.remote-access.trust-store
#quarkus.rest-client.remote-access.trust-store-password
#quarkus.rest-client.remote-access.trust-store-type
#quarkus.rest-client.remote-access.key-store
#quarkus.rest-client.remote-access.key-store-password
#quarkus.rest-client.remote-access.key-store-type
#quarkus.rest-client.remote-access.hostname-verifier
#quarkus.rest-client.remote-access.connection-ttl
#and others
#quarkus.rest-client.remote-access.***

# system account login for the guacamole remote access service
lcm.inventory.remote-access.username=admin
# system account login password for the guacamole remote access service
lcm.inventory.remote-access.password=password

###############################################################################
# S3 integration section                                                      #
###############################################################################

# contains a list of S3 server URIs
lcm.salt-adapter.s3.server-uri-list=http://localhost:9000,http://localhost:9900
lcm.salt-adapter.s3.access-key-id=s3adminSalt
lcm.salt-adapter.s3.secret-access-key=s3adminSaltPassword
lcm.salt-adapter.s3.region=ru-location-1
lcm.salt-adapter.s3.state-bucket-name=salt-bucket
lcm.salt-adapter.s3.pillar-bucket-name=pillar-bucket
lcm.salt-adapter.s3.script-bucket-name=script-bucket

###############################################################################
# Multimedia service section                                                  #
###############################################################################

# contains a list of S3 server URIs
lcm.multimedia.s3.server-uri-list=http://localhost:9000,http://localhost:9900
lcm.multimedia.s3.access-key-id=s3adminMultimedia
lcm.multimedia.s3.secret-access-key=s3adminMultimediaPassword
lcm.multimedia.s3.region=ru-location-1
lcm.multimedia.s3.icons-bucket-name=multimedia-bucket
lcm.multimedia.s3.images-bucket-name=multimedia-bucket
lcm.multimedia.s3.others-bucket-name=multimedia-bucket
lcm.multimedia.s3.script-bucket-name=script-bucket
lcm.multimedia.common.max-file-size-kb=1024
# Contains current nginx frontend uri, used to form bootstrap script installation link
lcm.multimedia.common.frontend-uri=http://localhost:8081

###############################################################################
# Configurations manager section                                              #
###############################################################################

# Determines maximum amount of categories per one configuration
lcm.catalog.category.configuration-limit=5
# Determines total amount of categories
lcm.catalog.category.total-limit=15
# Determines maximum salt-agent installation script file size in megabytes
lcm.catalog.category.max-script-size-mbytes=10

###############################################################################
# Logging section                                                             #
###############################################################################

# Common logging config
quarkus.log.file.enable=true
quarkus.log.json.file.enable=true
quarkus.log.json.console.enable=false

# File logging config
quarkus.log.file.path=/app/inno-osmax/logs/osmax/core/osmax-core.log
quarkus.log.file.rotation.max-file-size=10M
quarkus.log.file.rotation.max-backup-index=5
quarkus.log.file.rotation.file-suffix=.yyyy-MM-dd.gz

# Json format config
quarkus.log.json.fields.mdc.flat-fields=true
quarkus.log.json.fields.timestamp.date-format=yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
quarkus.log.json.fields.timestamp.zone-id=UTC

# Audit logging config
quarkus.log.handler.file.audit-handler.enable=true
quarkus.log.handler.file.audit-handler.path=/app/inno-osmax/audit/osmax/core/audit-osmax-core.log
quarkus.log.handler.file.audit-handler.rotation.max-file-size=10M
quarkus.log.handler.file.audit-handler.rotation.max-backup-index=50
quarkus.log.handler.file.audit-handler.rotation.file-suffix=.yyyy-MM-dd

quarkus.log.category."AUDIT".level=INFO
quarkus.log.category."AUDIT".handlers=audit-handler
quarkus.log.category."AUDIT".use-parent-handlers=false

###############################################################################
# Debug section                                                               #
# Enable all logging events via environment variable `QUARKUS_PROFILE=debug`  #
# or delete `%debug.` prefix                                                  #
###############################################################################

# HTTP server access logs (uri + status)
%debug.quarkus.http.access-log.enabled=true

# Internal rest-client
%debug.quarkus.rest-client.logging.scope=request-response
%debug.quarkus.rest-client.logging.body-limit=500
%debug.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG
%debug.quarkus.log.category."org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext".level=DEBUG

# SaltStack events
%debug.quarkus.log.category."tech.inno.lcm.salt.events".level=DEBUG

# All backend services
%debug.quarkus.log.category."tech.inno.lcm".level=DEBUG

# Kerberos
%debug.quarkus.kerberos.debug=true
%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".level=TRACE
%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".min-level=TRACE

# AWS client
%debug.quarkus.log.category."software.amazon.awssdk.request".level=DEBUG

###############################################################################
# Quarkus framework section                                                   #
###############################################################################

# application is run under specific user, those settings allow not clashing with other quarkus apps on the same server
quarkus.http.body.uploads-directory=${java.io.tmpdir}/inno_osmax_core_uploads
quarkus.management.body.uploads-directory=${java.io.tmpdir}/inno_osmax_core_uploads
Перед запуском systemd-службы lcm измените права доступа к конфигурационному файлу, предоставив доступ только для пользователя, от имени которого она будет запускаться.

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

Подключение к HTTP-серверу
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.port

Основной порт подключения

8081

8081

Подключение к HTTPS-серверу
Настройки, описанные в разделе, являются опциональными и используются, только при подключении по протоколу SSL.
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.insecure-requests

Возможные значения:

  • enabled — HTTP-порт открыт;

  • disabled — HTTP-порт закрыт;

  • redirect — HTTP-порт открыт, но все запросы будут перенаправляться на HTTPS-порт

disabled

quarkus.http.ssl-port

Порт для подключения к HTTPS-серверу

8081

quarkus.http.ssl.certificate.key-store-file

Путь к хранилищу (keystore-файлу), где хранятся закрытые ключи и сертификаты, необходимые для установки защищенного HTTPS-соединения

/opt/inno-lcm-core/keystore.jks

quarkus.http.ssl.certificate.key-store-password

Пароль для доступа к keystore-файлу

keystore@12345

Аутентификация и авторизация
Параметры quarkus.kerberos.keytab-path и quarkus.kerberos.service-principal-<name/password/real> являются опциональными и взаимозаменяемыми. С точки зрения безопасности рекомендуется использовать keytab-файл для аутентификации в домене и указывать параметр quarkus.kerberos.keytab-path.
Наименование Описание Значение по умолчанию Пример значения

lcm.application.auth.disabled

Включение/выключение аутентификации Kerberos. Возможные значения: true и false

false

false

quarkus.kerberos.debug

(Опциональный параметр) включение/выключение отправки сообщений для отладки Kerberos. Возможные значения: true и false

true

quarkus.kerberos.service-principal-name

(Опциональный параметр) имя принципала для аутентификации Kerberos

lcm_backend_svc

quarkus.kerberos.service-principal-realm

(Опциональный параметр) наименование области безопасности (realm) принципала

my.domain.com

quarkus.kerberos.service-principal-password

(Опциональный параметр) пароль принципала

Password123

quarkus.kerberos.keytab-path

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

/opt/inno-lcm-core/my_file.keytab

lcm.authorization.user-groups-white-list[0]

(Устаревший опциональный параметр) список групп LDAP, пользователи которых авторизованы в графическом интерфейсе администратора

CN=testGroup,CN=Users,DC=inno,DC=test

lcm.authorization.rbac.enabled

Включение/выключение авторизации RBAC

false

false

lcm.authorization.rbac.super-users[0]

Пользователи, которым будут выданы права суперпользователя при запуске продукта. Параметр задается, если включена Авторизация RBAC (lcm.authorization.rbac.enabled=true).

Параметр задается отдельно для каждого пользователя, начиная с 0, например:

lcm.authorization.rbac.super-users[0]=alice@INNO.TEST
lcm.authorization.rbac.super-users[1]=bob@INNO.TEST

alice@INNO.TEST

Подключение к БД
Наименование Описание Значение по умолчанию Пример значения

quarkus.datasource."lcm-db".username

Имя пользователя для подключения к БД

lcm

lcmadmin

quarkus.datasource."lcm-db".password

Пароль пользователя для подключения к БД

password

qwerty123

quarkus.datasource."lcm-db".reactive.url

Адрес подключения серверной части продукта к БД. Формат:

pass:[postgresql://{db_host}:{db_port}/{db_name}]
Если необходимо указать схему по умолчанию используйте синтаксис: postgresql://localhost:5432/lcm?search_path=lcm_schema_name

postgresql://localhost:5432/lcm

postgresql://10.6.32.156:5432/lcm

quarkus.datasource."lcm-db".jdbc.url

Адрес подключения к БД. Параметр используется утилитой Liquibase для актуализации схемы БД. Формат:

pass:[jdbc:postgresql://{db_host}:{db_port}/{db_name}]

jdbc:postgresql://localhost:5432/lcm

jdbc:postgresql://10.6.32.156:5432/lcm

quarkus.liquibase."lcm-db".default-schema-name

Имя схемы данных

lcm

lcm

quarkus.liquibase."lcm-db".migrate-at-start

Включение/выключение автоматического обновления структуры БД с помощью утилиты Liquibase. Возможные значения: true и false

True

True

quarkus.datasource."lcm-db-readonly".username

Имя пользователя с правами только на чтение данных (read-only) для подключения к БД

readonly

lcmuser

quarkus.datasource."lcm-db-readonly".password

Пароль пользователя с правами только на чтение данных (read-only) для подключения к БД

password

lcmuserpassword

quarkus.datasource."lcm-db-readonly".reactive.url

Адрес подключения серверной части продукта к БД. Формат:

pass:[postgresql://{db_host}:{db_port}/{db_name}]

postgresql://localhost:5432/lcm

postgresql://localhost:5432/lcm

quarkus.datasource."lcm-db-readonly".jdbc.url

Адрес подключения к БД. Формат:

pass:[jdbc:postgresql://{db_host}:{db_port}/{db_name}]

jdbc:postgresql://localhost:5432/lcm

jdbc:postgresql://10.6.32.156:5432/lcm

Инвентаризация оборудования

Нумерация массива lcm.inventory.ldap.datasource начинается с 0.

Параметры подключения к домену №2 аналогичны параметрам домена №1.

Пример:

  • lcm.inventory.ldap.datasource[1].host=192.168.0.1;

  • lcm.inventory.ldap.datasource[1].name=domain_alias2;

  • lcm.inventory.ldap.datasource[1].port=389;

  • lcm.inventory.ldap.datasource[1].username=username2@domain2_name;

  • lcm.inventory.ldap.datasource[1].ssl=false;

  • lcm.inventory.ldap.datasource[1].base-dn=DC=domain_name2,DC=local.

Наименование Описание Значение по умолчанию Пример значения

lcm.inventory.job-sync-collection-pillars.cron.expr

Cron-выражение в формате quartz, которое задает частоту синхронизации состава коллекций на бэкенде продукта и на сервере управления (master) (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0/15 * ? * * *

0/10 * * ? * * *

lcm.inventory.job.user-sessions-cleanup.storage-days-count

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

90

90

lcm.inventory.job.user-sessions-cleanup.cron-expr

Cron-выражение в формате quartz, которое задает расписание удаления данных истории сессий пользователей (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0 0 ? * * *

0 0 0 ? * * *

lcm.inventory.user-attribute.section.size

Максимальное количество атрибутов устройств в одном разделе

20

20

lcm.inventory.user-attribute.section.size

Максимальное количество пользовательских атрибутов в одном разделе

20

20

lcm.inventory.settings.agent.minutes-to-become-offline

Интервал в минутах, в течение которого на агенте (minion) нет активности. По истечению этого интервала сетевой статус агента (minion) будет изменен на неактивный (offline)

5

5

lcm.inventory.settings.agent.user-session-file-path

Путь к файлу на сервере с агентом (minion), в котором хранится информация о сессиях пользователей

/var/log/wtmp

/var/log/wtmp

lcm.inventory.settings.agent.active-user-session-file-path

Путь к файлу на сервере с агентом (minion), в котором хранится информация о текущих сессиях пользователей

/var/run/utmp

/var/run/utmp

lcm.inventory.ldap.search-page-size

Максимальное количество записей, которое будет возвращаться в ответ на один запрос синхронизации с LDAP-сервером. Чем больше значение, тем больше данных LDAP-серверу необходимо обработать в рамках одного запроса. Чем меньше значение, тем дольше будет выполняться синхронизация

200

200

lcm.inventory.ldap.datasource[0].name

Название источника данных (например, имя домена)

my.domain.com

lcm-1583.terra.inno.tech

lcm.inventory.ldap.datasource[0].base-dn

Базовое имя домена в формате LDAP

DC=my,DC=domain,DC=com

DC=lcm-1583,DC=terra,DC=inno,DC=tech

lcm.inventory.ldap.datasource[0].host

IP-адрес или сетевое имя контроллера домена (сервера LDAP)

localhost

10.6.32.204

lcm.inventory.ldap.datasource[0].port

Порт для соединения по протоколу LDAP. Опциональный параметр

636

389; для LDAP over SSL обычно используется порт 636

lcm.inventory.ldap.datasource[0].username

Имя пользователя для подключения к домену LDAP-сервера.

Может быть указано в одном из следующих форматов:

  • <имя_пользователя>@<имя домена>, например, ivanov@INNO;

  • пользователь в формате LDAP, например, CN=ivanov,CN=Users,DC=inno,DC=local

administrator@my.domain.com

Administrator@lcm-1583.terra.inno.tech

lcm.inventory.ldap.datasource[0].password

Пароль пользователя для подключения к домену LDAP-сервера

Welkom123

Welkom123

Опциональные параметры

lcm.inventory.ldap.datasource[0].connect-timeout-millis

Максимальная длительность подключения к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание

10000

lcm.inventory.ldap.datasource[0].response-timeout

Максимальная длительность выполнения запроса к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание

10000

lcm.inventory.ldap.datasource[0].abandon-on-timeout

Параметр, который отвечает за освобождение соединения в случае превышения максимальной длительности ожидания запроса. Возможные значения: true и false

true

lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use

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

true

lcm.inventory.ldap.datasource[0].ssl

Параметр, отвечающий за соединение по протоколу LDAP over SSL (LDAPS).

Возможные значения:

  • false — соответствует выключенному протоколу LDAPS, используется обычный LDAP;

  • true — соответствует включенному протоколу LDAPS, требует наличия файла с сертификатом для SSL-соединения (задается отдельным параметром);

  • trust_all — соответствует включенному протоколу LDAPS, принимает любые сертификаты без подтверждения

true

lcm.inventory.ldap.datasource[0].ssl-certificate

Относительный или абсолютный путь к файлу с сертификатом для подключения через LDAPS. Опциональный параметр

/opt/inno-lcm-core/samba_cert.pem

Работа с пользовательским интерфейсом «Магазин приложений»
Наименование Описание Значение по умолчанию Пример значения

lcm.order-management.completion.time.hours

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

12

12

lcm.order-management.autocomplete.cron.expr

Cron-выражение в формате quartz задающее расписание выполнения проверки долго выполняющихся заказов, после которой они будут считаться невыполненными (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0 * ? * * *

0 0 * ? * * *

Интеграция с Apache Kafka
Наименование Описание Значение по умолчанию Пример значения

mp.messaging.incoming.salt-events-kafka.bootstrap.servers

Адрес сервера для подключения к брокеру Apache Kafka, который будет использоваться для получения сообщений от серверов управления (masters)

localhost:9092

10.6.32.156:9092

mp.messaging.incoming.salt-events-kafka.topic

Топик Apache Kafka, из которого будут поступать сообщения

salt-topic

salt-topic

Настройка SSL-соединения с Apache Kafka
Параметры из данного блока являются опциональными и задаются, только если требуется SSL для Apache Kafka.
Наименование Описание Значение по умолчанию Пример значения

mp.messaging.connector.smallrye-kafka.security.protocol

SSL-протокол для защищенного соединения

SSL

mp.messaging.connector.smallrye-kafka.ssl.truststore.location

Путь к файлу хранилища доверенных сертификатов (truststore), который содержит сертификаты доверенных центров сертификации

/etc/ssl/certs/java/cacerts

mp.messaging.connector.smallrye-kafka.ssl.truststore.password

Пароль для доступа к хранилищу доверенных сертификатов

truststore@12345

mp.messaging.connector.smallrye-kafka.ssl.truststore.type

Тип хранилища, например, JKS, JCEKS, P12, PKCS12, PFX. Если значение не задано, по умолчанию используется значение JKS

PKCS12

Настройки REST-клиентов
Настройки, описанные в разделе, являются опциональными и используются, только при подключении по протоколу SSL.
Наименование Описание Значение по умолчанию Пример значения

quarkus.rest-client.trust-store

Путь к файлу хранилища доверенных сертификатов (truststore), который содержит сертификаты доверенных центров сертификации

/etc/ssl/certs/java/cacerts

quarkus.rest-client.trust-store-password

Пароль для доступа к хранилищу доверенных сертификатов

truststore@12345

quarkus.rest-client.trust-store-type

Тип хранилища, например, JKS, JCEKS, P12, PKCS12, PFX. Если значение не задано, по умолчанию используется значение JKS

PKCS12

quarkus.rest-client.remote-access.trust-all

Отключение проверки SSL-соединения

true

Интеграция с API SaltStack
Наименование Описание Значение по умолчанию Пример значения

lcm.salt-adapter.command-runner.http-scheme

Протокол, который будет использоваться для отправки HTTP-запросов между компонентами Salt Adapter и Command Runner модуля координации. Возможные значения: http или https

http

http

lcm.salt-adapter.command-runner.master-api-port

Порт, на котором будет запущен API-модуль сервера управления (master). Значение параметра задается для всех используемых серверов управления (masters)

8000

8000

lcm.salt-adapter.command-runner.global-auth.eauth

Тип аутентификации для запросов. Значение параметра задается для всех используемых серверов управления (masters). Возможные значения: ldap или pam. ldap — аутентификация через внешний LDAP-сервер, pam — аутентификация с помощью локальной учетной записи на машине, на которой установлен сервер управления (master).

Если установлено значение pam, для сервера управления (master) требуется root-доступ

pam

pam

lcm.salt-adapter.command-runner.global-auth.login

Логин для подключения к серверу управления (master). Значение параметра задается для всех используемых серверов управления (masters)

salt_api

salt_api

lcm.salt-adapter.command-runner.global-auth.password

Пароль для подключения к серверу управления (master). Значение параметра задается для всех используемых серверов управления (masters)

salt123

salt123

lcm.salt-adapter.command-runner.retry.number-of-attempts

Количество попыток выполнения команды, после неудачной попытки

5

5

lcm.salt-adapter.command-runner.retry.initial-back-off

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

1s

1s

lcm.salt-adapter.command-runner.retry.max-back-off

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

1s

1s

Опциональные параметры

lcm.salt-adapter.command-runner.override-masters[0].id

Имя машины, на которой установлен сервер управления (master)

При использовании нескольких серверов управления (masters) значение задается отдельно для каждого; нумерация массива начинается с [0]. Пример: lcm.salt-adapter.command-runner.override-masters[0].id=salt-master1, lcm.salt-adapter.command-runner.override-masters[1].id=salt-master2

salt-master2

lcm.salt-adapter.command-runner.override-masters[0].uri

Полный адрес API-модуль сервера управления (master), указанного в параметре lcm.salt-adapter.command-runner.override-masters[0].id

При использовании нескольких серверов управления (masters) значение задается отдельно для каждого; нумерация массива начинается с [0]. Пример: lcm.salt-adapter.command-runner.override-masters[0].http://192.168.0.1:8000, lcm.salt-adapter.command-runner.override-masters[0].uri=http://192.168.0.2:8000

http://192.168.0.2:8000

Интеграция с модулем «Удаленный доступ»
Наименование Описание Значение по умолчанию Пример значения

quarkus.rest-client.remote-access.url

URL-адрес для подключения к модулю «Удаленный доступ»

https://guacamole-host.net:9099/guacamole

https://guacamole-host.net:9099/guacamole

lcm.inventory.remote-access.username

Аккаунт для входа в модуль «Удаленный доступ»

admin

admin

lcm.inventory.remote-access.password

Пароль от аккаунта для входа в модуль «Удаленный доступ»

12345

12345

Опциональные параметры, которые используются для расширенной настройки REST-клиента Quarkus модуля «Удаленный доступ»

quarkus.rest-client.remote-access.connect-timeout

Таймаут соединения при обращении к удаленному серверу

quarkus.rest-client.remote-access.trust-store

Путь к файлу доверенных сертификатов для проверки подлинности удаленного сервера

quarkus.rest-client.remote-access.trust-store-password

Пароль для доступа к файлу доверенных сертификатов

quarkus.rest-client.remote-access.trust-store-type

Тип хранилища доверенных сертификатов (например, JKS)

quarkus.rest-client.remote-access.key-store

Путь к файлу с ключами (keystore) для аутентификации при обращении к удаленному серверу

quarkus.rest-client.remote-access.key-store-password

Пароль для доступа к файлу с ключами (keystore)

quarkus.rest-client.remote-access.key-store-type

Тип хранилища ключей (например, JKS)

quarkus.rest-client.remote-access.hostname-verifier

Параметр, определяющий, должно ли проверяться доменное имя удаленного сервера при установке соединения

quarkus.rest-client.remote-access.connection-ttl

Длительность соединения с удаленным сервером

Интеграция с S3-совместимым хранилищем
Наименование Описание Значение по умолчанию Пример значения

lcm.salt-adapter.s3.server-uri-list

URI для подключения к S3-совместимому хранилищу, в котором будут храниться файлы для SaltStack.

Для переключения взаимодействия с S3-совместимым хранилищем по протоколу SSL:

  1. Измените URI c http на https.

  2. Разместите публичный сертификат сервера S3 или сертификат выдавшего его удостоверяющего центра в системное хранилище сертификатов

http://10.6.32.156:9000

lcm.salt-adapter.s3.access-key-id

Идентификатор ключа (access Key) S3-совместимого хранилища

s3adminSalt

minioadmin

lcm.salt-adapter.s3.secret-access-key

Секретный ключ (Secret Key) S3-совместимого хранилища

s3adminSaltPassword

minioadmin123

lcm.salt-adapter.s3.region

Название региона S3 NOTE: Для хранилища Ceph данный параметр не учитывается. Если вы используете Сeph в качестве хранилища, укажите значение default

ru-location-1

ru-location-1

lcm.salt-adapter.s3.state-bucket-name

Название бакета S3 для хранения общих файлов конфигураций и файлов состояний

salt-bucket

salt-bucket

lcm.salt-adapter.s3.pillar-bucket-name

Название бакета S3 для хранения данных Pillar

pillar-bucket

pillar-bucket

lcm.salt-adapter.s3.script-bucket-name

Название бакета S3 для хранения исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства

script-bucket

script-bucket

Хранение мультимедиа-файлов в S3-совместимом хранилище
Наименование Описание Значение по умолчанию Пример значения

lcm.multimedia.s3.server-uri-list

URI для подключения к S3-совместимому хранилищу, в котором будут храниться мультимедиа-файлы продукта (иконки, скриншоты).

Для переключения взаимодействия с S3-совместимым хранилищем по протоколу SSL:

  1. Измените URI c http на https.

  2. Разместите публичный сертификат сервера S3 или сертификат выдавшего его удостоверяющего центра в системное хранилище сертификатов

http://localhost:9000,http://localhost:9900

http://10.6.32.156:9000

lcm.multimedia.s3.access-key-id

Идентификатор ключа (access Key) S3-совместимого хранилища мультимедиа-контента

s3adminMultimedia

minioadmin

lcm.multimedia.s3.secret-access-key

Секретный ключ (Secret Key) S3-совместимого хранилища мультимедиа-контента для доступа к сервису S3 (пароль)

s3adminMultimediaPassword

minioadmin123

lcm.multimedia.s3.region

Название региона S3 для хранилища мультимедиа-контента NOTE: Для хранилища Ceph данный параметр не учитывается. Если вы используете Сeph в качестве хранилища, укажите значение default

ru-location-1

ru-location-1

lcm.multimedia.s3.icons-bucket-name

Название бакета S3 для хранения иконок

multimedia-bucket

icons-bucket

lcm.multimedia.s3.images-bucket-name

Название бакета S3 для хранения изображений и скриншотов

multimedia-bucket

images-bucket

lcm.multimedia.s3.others-bucket-name

Название бакета S3 для хранения прочего контента

multimedia-bucket

others-bucket

lcm.multimedia.s3.script-bucket-name

Название бакета S3 для хранения исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства

script-bucket

script-bucket

lcm.multimedia.common.max-file-size-kb

Максимальный размер файла в килобайтах

1024

1024

lcm.multimedia.common.frontend-uri

URI для доступа к фронтенду

http://localhost:8081

http://localhost:8081

Управление конфигурациями
Наименование Описание Значение по умолчанию Пример значения

lcm.catalog.category.configuration-limit

Максимальное количество категорий для одной конфигурации

5

5

lcm.catalog.category.total-limit

Общее число категорий

15

15

lcm.catalog.category.max-script-size-mbytes

Максимальный размер файла скрипта установки агентов (minions) в мегабайтах

10

10

Логирование
Наименование Описание Значение по умолчанию Пример значения

quarkus.log.file.enable

Активация логирования в файл. Возможные значения: true и false

true

true

quarkus.log.json.file.enable

Включение/выключение форматирования логов в JSON при записи в файл

true

true

quarkus.log.json.console.enable

Включение/выключение форматирования логов в JSON при выводе в консоль

false

false

quarkus.log.file.path

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

/app/inno-osmax/logs/osmax/core/osmax-core.log

/app/inno-osmax/logs/osmax/core/osmax-core.log

quarkus.log.file.rotation.max-file-size

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

10М

10М

quarkus.log.file.rotation.max-backup-index

Предельное количество сохраняемых файлов с логами при ротации

5

5

quarkus.log.file.rotation.file-suffix

Суффикс для имен файлов логов после их ротации

.yyyy-MM-dd.gz

.yyyy-MM-dd.gz

quarkus.log.json.fields.mdc.flat-fields

Параметр, который указывает, что контекст MDC (Mapped Diagnostic Context) должен быть записан в плоском формате

true

true

quarkus.log.json.fields.timestamp.date-format

Формат даты и времени для поля timestamp в JSON

yyyy-MM-dd’T’HH:mm:ss.SSS’Z'

yyyy-MM-dd’T’HH:mm:ss.SSS’Z'

quarkus.log.json.fields.timestamp.zone-id

Часовой пояс для поля timestamp в JSON

UTC

UTC

quarkus.log.handler.file.audit-handler.enable

Включение/выключение обработчика для логов аудита

true

true

quarkus.log.handler.file.audit-handler.path

Путь к файлу, в который будут записываться логи аудита

/app/inno-osmax/audit/osmax/core/audit-osmax-core.log

/app/inno-osmax/audit/osmax/core/audit-osmax-core.log

quarkus.log.handler.file.audit-handler.rotation.max-file-size

Максимальный размер файла логов аудита до переноса в исторический файл

10M

10M

quarkus.log.handler.file.audit-handler.rotation.max-backup-index

Максимальное количество резервных копий файлов логов аудита

50

50

quarkus.log.handler.file.audit-handler.rotation.file-suffix

Суффикс для имен файлов логов аудит после их ротации

.yyyy-MM-dd

.yyyy-MM-dd

quarkus.log.category."AUDIT".level

Настройка уровня логирования. Возможные значения:

  • FATAL — сообщение об ошибке, которая привела к критическому сбою программы;

  • ERROR — сообщение об ошибке, которая привела к некритическому сбою программы;

  • WARN — предупреждение о потенциальной проблеме или необычном состоянии, которое не является ошибкой, но требует внимания;

  • INFO — информационное сообщение о ходе работы программы, которое может быть полезно для мониторинга и отладки;

  • DEBUG — детальная отладочная информация, которая помогает разработчикам выявлять и исправлять проблемы в коде;

  • TRACE — cамый низкий уровень важности, предоставляющий еще более детальную информацию, которая используется для отслеживания каждого шага алгоритма или функции.

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

quarkus.log.category.<"system module">

Пример:

quarkus.log.category."AUDIT".level=DEBUG

INFO

INFO

quarkus.log.category."AUDIT".handlers

Обработчик, который будет использоваться для категории "AUDIT"

audit-handler

audit-handler

quarkus.log.category."AUDIT".use-parent-handlers

Включение/выключение использования родительских обработчиков для категории "AUDIT"

false

false

Отладка
Наименование Описание Значение по умолчанию Пример значения

%debug.quarkus.http.access-log.enabled

Включение/выключение логирования доступа к HTTP-серверу (uri и статус). Возможные значения: true и false

true

true

%debug.quarkus.rest-client.logging.scope

Уровень логирования для внутреннего REST-клиента, который будет записывать информацию о запросах и ответах

request-response

request-response

%debug.quarkus.rest-client.logging.body-limit

Размер тела запроса/ответа

500

500

%debug.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level

Уровень логирования для пакета org.jboss.resteasy.reactive.client.logging

DEBUG

DEBUG

%debug.quarkus.log.category."org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext".level

Уровень логирования для класса org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext

DEBUG

DEBUG

%debug.quarkus.log.category."tech.inno.lcm.salt.events".level

Уровень логирования для событий SaltStack

DEBUG

DEBUG

%debug.quarkus.log.category."tech.inno.lcm".level

Уровень логирования для всех сервисов бэкенда, начинающихся с tech.inno.lcm

DEBUG

DEBUG

%debug.quarkus.kerberos.debug

Включение/выключение дополнительного логирования для аутентификации Kerberos. Возможные значения: true и false

true

true

%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".level

Уровень логирования для класса io.quarkiverse.kerberos.runtime.KerberosIdentityProvider

TRACE

TRACE

%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".min-level

Минимальный уровень логирования для класса io.quarkiverse.kerberos.runtime.KerberosIdentityProvider

TRACE

TRACE

%debug.quarkus.log.category."software.amazon.awssdk.request".level

Уровень логирования для категории запросов к сервисам Amazon AWS SDK

DEBUG

DEBUG

Фреймворк Quarkus
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.body.uploads-directory

Директория для временного хранения файлов, загружаемых посредством API

${java.io.tmpdir}/inno_osmax_core_uploads

${java.io.tmpdir}/inno_osmax_core_uploads

quarkus.management.body.uploads-directory

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

${java.io.tmpdir}/inno_osmax_core_uploads

${java.io.tmpdir}/inno_osmax_core_uploads

Установка и настройка фронтенда продукта

Установку фронтенда можно выполнить как на отдельном сервере, так и на сервере вместе с бэкендом продукта.

Фронтенд продукта включает два отдельных модуля:

  • inno-lcm-webadmin — «Кабинет администратора»;

  • inno-lcm-app-shop — «Магазин приложений».

Каждый модуль устанавливается отдельно с помощью одноименного deb-пакета. Модули устанавливаются одинаково.

Установите пакеты inno-lcm-webadmin и inno-lcm-app-shop, выполнив команду:

sudo apt install ./<имя пакета>

Пример:

sudo apt install ./inno-lcm-webadmin_1.6.0-1_all.deb
sudo apt install ./inno-lcm-app-shop_1.6.0-1_all.deb

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

apt list | grep "<имя модуля>"

Пример:

apt list | grep "inno-lcm-webadmin"
apt list | grep "inno-lcm-app-shop"

В случае успешной установки система вернет ответ:

inno-lcm-webadmin/1.7_x86-64,now 1.6.0 all [установлен]

В случае неуспешной установки проверьте логи системы (см. раздел «Рекомендации по сбору и предоставлению информации о проблеме/ошибке» документа «Руководство по эксплуатации»).

После установки пакетов файлы для веб-сервера будут помещены в каталоги:

  • /var/www/lcm-web-ui;

  • /var/www/lcm-app-shop-ui.

Для корректной работы модулей настройте веб-сервер. Для этого создайте необходимые конфигурационные файлы и переопределите в них значения параметров.

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

Ниже в качестве примера рассмотрена конфигурация веб-сервера для модуля inno-lcm-webadmin.

Конфигурация веб-сервера (на примере Nginx)

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

  1. Создайте конфигурационный файл, выполнив команду:

    sudo nano /etc/nginx/conf.d/lcm-web-ui.conf

    Пример файла:

    server {
        listen       80;
        listen       [::]:80;
        server_name  domain-of-your-lcm-web-ui.vpn.company.com;
        root         /var/www/lcm-web-ui;
        index        index.html;
    
        error_log    /var/log/nginx/error.log debug;
        access_log   /var/log/nginx/access.log;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location /api {
            set $backend_uri http://127.0.0.1:8081;
            rewrite ^\/api(\/.*)$ $1 break;
            proxy_pass $backend_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name domain-of-your-lcm-web-ui.vpn.company.com;
        root /var/www/lcm-web-ui;
        index index.html;
    
        ssl_certificate /etc/certs/MY_CRT;
        ssl_certificate_key /etc/certs/MY_KEY;
    
        error_log /var/log/nginx/error.log debug;
        access_log /var/log/nginx/access.log;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location /api {
            set $backend_uri http://127.0.0.1:8081;
            rewrite ^/api(/.*)$ $1 break;
            proxy_pass $backend_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Где:

    • listen — настраивает прослушивание портов на сервере;

    • server_name  — доменное имя, которое будет обслуживаться сервером;

    • root — указывает директорию, в которой находятся статические файлы, отображаемые при запросе корневой директории;

    • index — задает стандартный файл, который будет отображаться при запросе корневой директории;

    • ssl_certificate — указывает SSL-сертификат для обеспечения безопасного соединения;

    • ssl_certificate_key — определяет путь к файлу приватного ключа SSL-сертификата;

    • error_log — указывает файл логов для логирования ошибок;

    • access_log — указывает файл логов для логирования ошибок доступа;

    • location / — указывает веб-серверу на поиск запрашиваемых файлов в директории root; и если файл будет не найден, указывает на файл index.html.

    • location /api —  настраивает проксирование запросов к API-серверу;

      При установке фронтенда на отдельный сервер, в параметре set $backend_uri укажите корректный адрес бэкенда.
      • proxy_pass — директива, перенаправляющая запросы к /api на указанный бэкенд;

      • proxy_set_header — директива, устанавливающая необходимую информацию в заголовках запроса.

  2. Для передачи данных по HTTP переопределите значения только в первом блоке server; для передачи по HTTPS — также переопределите значения во втором блоке.

    1. В первом блоке server в поле server_name укажите имя домена.

    2. В первом блоке server в поле location /api задайте адрес обращения к бэкенду.

    3. (Опционально) во втором блоке server в поле server_name укажите имя домена.

    4. (Опционально) во втором блоке server в поле location /api задайте адрес обращения к бэкенду.

    5. (Опционально) в поле ssl_certificate укажите SSL-сертификат для обеспечения безопасного соединения.

    6. (Опционально) в поле ssl_certificate_key задайте путь к файлу приватного ключа SSL-сертификата.

  3. Активируйте файл в конфигурации веб-сервера, создав для него символическую ссылку в каталоге /etc/nginx/sites-enabled/:

    ln -s /etc/nginx/sites-available/lcm-web-ui.conf /etc/nginx/sites-enabled/
  4. Перезапустите веб-сервер, выполнив команду:

    systemctl restart nginx.service
  5. Убедитесь, что веб-сервер успешно работает, выполнив команду:

    systemctl status nginx.service

    В случае успешного запуска система вернет ответ:

    ● nginx.service - A high performance web server and a reverse proxy server
       Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2024-02-09 16:21:31 MSK; 4s ago
         Docs: man:nginx(8)
      Process: 23739 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
      Process: 23740 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
     Main PID: 23741 (nginx)
        Tasks: 3 (limit: 4653)
       Memory: 2.2M
       CGroup: /system.slice/nginx.service
               ├─23741 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
               ├─23742 nginx: worker process
               └─23743 nginx: worker process
    
    фев 09 16:21:31 lr-441246-cm-1 systemd[1]: Starting A high performance web server and a reverse proxy server...
    фев 09 16:21:31 lr-441246-cm-1 systemd[1]: Started A high performance web server and a reverse proxy server.

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

    curl -I domain-of-your-lcm-web-ui.vpn.company.com
    HTTP/1.1 200 OK
    Server: nginx/1.22.1
    Date: Fri, 09 Feb 2024 13:32:44 GMT
    Content-Type: text/html
    Content-Length: 551
    Last-Modified: Tue, 06 Feb 2024 12:20:20 GMT
    Connection: keep-alive
    ETag: "65c22404-227"
    Accept-Ranges: bytes

Установка продукта на РЕД ОС

В разделе приводится инструкция по установке продукта на РЕД ОС версии 7.3.

Установка модуля координации (SaltStack)

Чтобы избежать ошибок в работе, для текущей версии продукта рекомендуется использовать SaltStack версии 3006.4.

Чтобы установить модуль координации (SaltStack), выполните следующие шаги:

  1. Скачайте и распакуйте архив с модулем координации (SaltStack) для последующей установки сервера управления (master).

  2. Установите пакеты с модулем координации SaltStack на сервере управления (master).

  3. Установите wheel-пакет для работы с Kafka Returner.

  4. Выполните настройку сервера управления (master).

  5. Выполните настройку Kafka returner.

  6. Обновите информацию о модуле исполнения для сбора истории пользовательских сессий на сервере управления (master).

  7. Запустите сервер управления (master).

  8. Запустите модуль salt-api.

  9. Скачайте и распакуйте архив с модулем координации (SaltStack) для последующей установки агентов (minions).

  10. Установите пакеты с модулем координации SaltStack на агентах (minions).

  11. Выполните настройку агентов (minions).

  12. Создайте пары открытых ключей (public key) для взаимодействия сервера управления (master) с агентами (minions).

  13. Запустите и проверьте работу systemd-службы для агентов (minions).

Скачивание и распаковка архива с модулем координации (SaltStack) для последующей установки сервера управления (master)

  1. Скачайте архив с модулем координации (SaltStack) требуемой версии из предоставленного хранилища любым доступным способом.

  2. Распакуйте архив, выполнив команду:

    tar xvf <имя_архива>

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

    tar xvf salt_3006.4.tar.gz
  3. Перенесите пакеты salt, salt-master и salt-api на машину, на которой будет запускаться сервер управления (master), выполнив команду scp (secure copy).

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

    scp ~/Downloads/salt_3006.4/salt-3006.4-*.rpm \
    ~/Downloads/salt_3006.4/salt-master-*.rpm \
    ~/Downloads/salt_3006.4/salt-api-*.rpm \
    user@remote_host:/salt-lcm/
  4. Перенесите wheel-пакет для работы с Kafka Returner на машину, на которой будет запускаться сервер управления (master), выполнив команду scp (secure copy).

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

    scp ~/Downloads/salt_3006.4/confluent_kafka-*.whl user@remote_host:/salt-lcm/

Установка пакетов с модулем координации SaltStack на сервере управления (master)

Если вы предполагаете использовать несколько серверов управления (masters), выполните установку отдельно для каждого из них.

Чтобы установить пакеты с модулем координации SaltStack на сервере управления (master), выполните следующие шаги:

На сервере, который вы будете использовать в качестве сервера управления (master), установите следующие rpm-пакеты в указанном порядке:

  1. salt — пакет, содержащий библиотеки, необходимые для работы модуля координации (SaltStack).

  2. salt-master — пакет для установки сервера управления (master), который будет управлять всеми агентами (minions) в инфраструктуре.

  3. salt-api — пакет, предоставляющий REST API для модуля координации (SaltStack).

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

sudo dnf install ./salt-lcm/salt-3006.4-0.x86_64.rpm
sudo dnf install ./salt-lcm/salt-master-3006.4-0.x86_64.rpm
sudo dnf install ./salt-lcm/salt-api-3006.4-0.x86_64.rpm

Конфигурация сервера управления (master)

На машине, на которой установлен сервер управления (master), задайте настройки его конфигурации, следуя инструкциям в разделах ниже.

По умолчанию сервер управления (master) настраивается через главный файл конфигурации — /etc/salt/master.

Также поддерживается создание файлов конфигураций в каталоге /etc/salt/master.d/, что позволяет группировать логически параметры конфигурации.

Подробную информацию о настройке главного файла конфигурации сервера управления (master) см. в официальной документации.

Создание пользователя, от имени которого будут запускаться процессы SaltStack

Чтобы создать пользователя, от имени которого будут запускаться процессы SaltStack, создайте файл конфигурации сервера управления (master) /etc/salt/master.d/user.conf и укажите в нем необходимого пользователя.

Пример:

user: <my_user>
Если параметр не задан, по умолчанию процессы SaltStack будут запускаться от имени пользователя root.
Включение модуля salt-api

Чтобы включить модуль salt-api для модуля координации (SaltStack), выполните шаги:

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/salt-api.conf.

    Пример:

    rest_cherrypy:
      port: 8080
      debug: True
      disable_ssl: True

    Где:

    • rest_cherrypy — параметры управления конфигурацией встроенного веб-сервера Cherrypy, который использует salt-api:

      • port — укажите порт, который будет запущен salt-api (например, 8080);

      • debug — (опционально) включите (True) или отключите (False) режим отладки (debug mode) для salt-api;

      • disable_ssl — (опционально) если в первом шаге вы не установили SSL-сертификаты, задайте значение True.

Включение модуля salt-api с использованием SSL-сертификатов

Чтобы включить модуль salt-api для модуля координации (SaltStack) с использованием SSL-сертификатов, выполните шаги:

  1. Сгенерируйте SSL-сертификат и закрытый ключ для сервера управления (master). В качестве примера здесь и далее будет использоваться сертификат salt-api.crt и закрытый ключ salt-api.key.

  2. Скопируйте сертификат salt-api.crt и закрытый ключ salt-api.key в директорию /etc/pki/tls/certs/.

  3. В файле конфигурации сервера управления (master) /etc/salt/master.d/salt-api.conf задайте следующие настройки:

    rest_cherrypy:
      port: 8000
      host: 0.0.0.0
      ssl_crt: /etc/pki/tls/certs/salt-api.crt
      ssl_key: /etc/pki/tls/certs/salt-api.key

    где:

    • port — порт, на котором будет запущен веб-сервер;

    • host — IP-адрес, на котором будет открыт порт для подключения клиентов;

    • ssl_crt — путь до файла с SSL-сертификатом сервера управления (master);

    • ssl_key — путь до закрытого ключа от SSL-сертификата сервера управления (master).

Настройка подключения к S3-совместимому хранилищу

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

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/fileserver_backend.conf и в параметре fileserver_backend укажите имя хранилища, которое вы будете использовать в качестве бэкенда для файлов.

    Пример:

    fileserver_backend:
      - s3fs
  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/s3.conf и задайте в нем настройки подключения к S3-совместимому хранилищу.

    Пример:

    s3.service_url: <s3_hostname>:<s3_port>
    s3.keyid: <ACCESS_KEY>
    s3.key: <SECRET_KEY>
    s3.buckets:
      - salt-bucket
    s3.path_style: True
    s3.location: <REGION>

    Где:

    • s3.service_url — URL-адрес и порт для обращения к S3-совместимому хранилищу;

    • s3.keyid — ключ доступа, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • s3.key — секретный ключ, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • s3.buckets — имя бакета (например, salt-bucket) для хранения файлов состояния и формул;

    • s3.path_style — стиль представления пути к объектам в S3-совместимом хранилище;

    • s3.location — регион, в котором расположено S3-совместимое хранилище.

      Подробное описание всех параметров приведено в официальной документации.
  2. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf и задайте в нем настройки подключения к S3-совместимому хранилищу для хранения в отдельном бакете данных Pillar.

    Пример:

    ext_pillar:
      - s3:
          service_url: <s3_hostname>:<s3_port>
          keyid: <ACCESS_KEY>
          key: <SECRET_KEY>
          bucket: pillar-bucket
          multiple_env: False
          environment: base
          prefix: ''
          verify_ssl: False
          s3_cache_expire: 30
          s3_sync_on_update: True
          path_style: True
          https_enable: False

    Где:

    • service_url — URL-адрес и порт для обращения к S3-совместимому хранилищу;

    • keyid — ключ доступа, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • key — секретный ключ, который обеспечивает авторизацию и доступ к S3-совместимому хранилищу;

    • bucket — имя бакета (например, pillar-bucket), которое будет использоваться для хранения данных Pillar;

    • multiple_env — параметр, который определяет, поддерживается ли использование нескольких окружений (environments) в хранилище Pillar;

    • environment — параметр, который указывает на основное окружение (base environment) для хранилища Pillar;

    • prefix — префикс для путей к данным в S3-хранилище; пустая строка означает отсутствие префикса;

    • verify_ssl — параметр, который указывает, следует ли проверять SSL-сертификаты при обращении к S3-хранилищу;

    • s3_cache_expire — время жизни кэша (в секундах) для данных, полученных из S3-хранилища;

    • s3_sync_on_update — параметр, который определяет, следует ли выполнять синхронизацию данных при обновлении данных Pillar;

    • path_style — стиль представления пути к объектам в S3-хранилище;

    • https_enable — параметр, который указывает, следует ли использовать HTTPS для обращения к S3-хранилищу.

      Подробное описание всех полей приведено в официальной документации.
Настройка подключения к S3-совместимому хранилищу с использованием SSL-сертификатов

Если вы подключаетесь к S3-совместимому хранилищу с использованием SSL-сертификатов, выполните настройки:

  1. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значения параметров:

    s3.https_enable: True
    s3.verify_ssl: False
    При выставлении значения False для параметра verify_ssl валидация сертификата S3-совместимого хранилища выполняться не будет.
  2. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра:

    ext_pillar:
     - s3:
        https_enable: True
        verify_ssl: False
    При выставлении значения False для параметра verify_ssl валидация сертификата S3-совместимого хранилища выполняться не будет.

Если требуется валидация сертификатов S3-совместимого хранилища, выполните следующие действия, выбрав один из двух вариантов, описанных ниже:

  • вариант 1:

    1. Скопируйте файл СА-сертификатов на сервер управления (master).

    2. Определите расположение хранилища сертификатов на сервере управления (master):

      $ /opt/saltstack/salt/bin/python3
      Python 3.10.13 (main, Oct  4 2023, 21:54:22) [GCC 11.2.0] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import certifi
      >>> certifi.where()
      '/opt/saltstack/salt/lib/python3.10/site-packages/certifi/cacert.pem'
    3. Добавьте сертификат в хранилище.

      Пример команды для добавления сертификата ca.crt:

      cat ca.crt | sudo tee -a /opt/saltstack/salt/lib/python3.10/site-packages/certifi/cacert.pem
    4. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True).

      Пример:

      s3.verify_ssl: True
      s3.https_enable: True
    5. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True) .

      Пример:

      ext_pillar:
      - s3:
          https_enable: True
          verify_ssl: True
  • вариант 2:

    1. Разместите файл СА-сертификатов, используемый в качестве Issuer в S3-совместимом хранилище, на сервере управления (master) по пути /etc/salt/pki/ca.crt.

    2. В файле конфигурации сервера управления (master) /etc/salt/master.d/s3.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True).

      Пример:

      s3.verify_ssl: True
      s3.https_enable: True
    3. В файле конфигурации сервера управления (master) /etc/salt/master.d/ext_pillar.conf задайте значение параметра verify_ssl: True (аналогично параметру https_enable: True) .

      Пример:

      ext_pillar:
      - s3:
          https_enable: True
          verify_ssl: True
Загрузка пользовательских формул в S3-совместимое хранилище
Готовые формулы (подробнее см. раздел «Готовые формулы» документа «Руководство по эксплуатации») импортируются автоматически при установке продукта.

Чтобы загрузить пользовательские формулы (см. раздел «Пользовательские формулы» документа «Руководство по эксплуатации») и формулы-шаблоны (см. раздел «Формулы-шаблоны» документа «Руководство по эксплуатации»), используйте API для импорта формулы в S3-совместимое хранилище importFormulas (см. раздел «Метод importFormulas» документа «Описание API»).

Настройка интеграции с Apache Kafka
Отправка событий с сервера управления (master) в Apache Kafka выполняется с помощью библиотеки librdkafka.

Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/returner.conf.

Пример файла:

returner.kafka_custom.bootstrap:
  - "<kafka_host>:<kafka_port>"
returner.kafka_custom.topic: 'salt-topic'
returner.kafka_custom.security.protocol: ""
returner.kafka_custom.ssl.cipher.suites: ""
returner.kafka_custom.ssl.curves.list: ""
returner.kafka_custom.ssl.sigalgs.list: ""
returner.kafka_custom.ssl.key.location: ""
returner.kafka_custom.ssl.key.password: ""
returner.kafka_custom.ssl.key.pem: ""
returner.kafka_custom.ssl.certificate.location: ""
returner.kafka_custom.ssl.certificate.pem: ""
returner.kafka_custom.ssl.ca.location: ""
returner.kafka_custom.ssl.ca.pem: ""
returner.kafka_custom.ssl.ca.certificate.stores: ""
returner.kafka_custom.ssl.crl.location: ""
returner.kafka_custom.ssl.keystore.location: ""
returner.kafka_custom.ssl.keystore.password: ""
returner.kafka_custom.ssl.providers: ""
returner.kafka_custom.ssl.engine.id: ""
returner.kafka_custom.enable.ssl.certificate.verification: ""
returner.kafka_custom.ssl.endpoint.identification.algorithm: ""
returner.kafka_custom.debug: "all"
returner.kafka_custom.log_level: ""
returner.kafka_custom.allow.auto.create.topics: "true"
event_return: kafka_custom

В таблицах ниже приводится описание параметров из файла.

Обязательные параметры:

Наименование Описание Пример значения

returner.kafka_custom.bootstrap

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

"192.168.1.101:9092"

returner.kafka_custom.topic

Топик Apache Kafka

salt-topic

event_return

Выбор способа отправки событий возврата

kafka_custom

Опциональные параметры:

Наименование Описание Пример значения

returner.kafka_custom.security.protocol

Протокол, который используется для соединения с Apache Kafka

plaintext

returner.kafka_custom.ssl.cipher.suites

Набор шифров (именованная комбинация аутентификации, шифрование, MAC-адреса и алгоритмы обмена ключами), используемые для согласования параметров безопасности сетевого подключения по протоколу SSL. Подробнее см. SSL_CTX_set_cipher_list

returner.kafka_custom.ssl.curves.list

Поддерживаемые кривые (supported curves), стандартные/именованные или «явные» GF(2^k) или GF(p) для использования сервером, которые передаются в сообщении TLS ClientHello. Подробнее см. SSL_CTX_set1_curves_list

returner.kafka_custom.ssl.sigalgs.list

Поддерживаемые алгоритмы цифровой подписи для использования сервером, которые передаются в сообщении TLS ClientHello. Подробнее см. SSL_CTX_set1_sigalgs

returner.kafka_custom.ssl.key.location

Путь к закрытому ключу клиента (PEM), который используется для аутентификации

returner.kafka_custom.ssl.key.password

Пароль для закрытого ключа (для использования с ssl.key.location и set_ssl_cert())

returner.kafka_custom.ssl.key.pem

Строка закрытого ключа клиента (в PEM-формате), которая используется для аутентификации

returner.kafka_custom.ssl.certificate.location

Путь к публичному ключу клиента (в PEM-формате), который используется для аутентификации

returner.kafka_custom.ssl.certificate.pem

Строка публичного ключа клиента (в PEM-формате), которая используется для аутентификации

returner.kafka_custom.ssl.ca.location

Путь к файлу или каталогу сертификатов CA (Certificate Authority) для проверки ключа брокера

returner.kafka_custom.ssl.ca.pem

Строка сертификата CA (в PEM-формате) для проверки ключа брокера

returner.kafka_custom.ssl.ca.certificate.stores

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

returner.kafka_custom.ssl.crl.location

Путь к CRL для валидации сертификата брокера

returner.kafka_custom.ssl.keystore.location

Путь к хранилищу ключей клиента (PKCS#12), которые используются для аутентификации

returner.kafka_custom.ssl.keystore.password

Пароль хранилища ключей клиента (PKCS#12)

returner.kafka_custom.ssl.providers

Список провайдеров (разделенный запятыми) OpenSSL 3.0.x

returner.kafka_custom.ssl.engine.id

Идентификатор OpenSSL

returner.kafka_custom.enable.ssl.certificate.verification

Включение проверки сертификата встроенного брокера OpenSSL (сервера). Эта проверка может быть расширена приложением путем реализации certificate_verify_cb

returner.kafka_custom.ssl.endpoint.identification.algorithm

Алгоритм идентификации endpoint для проверки имени хоста брокера с использованием сертификата брокера

returner.kafka_custom.debug

Список контекстов отладки (разделенный запятыми), которые необходимо включить

returner.kafka_custom.log_level

Уровень логирования

returner.kafka_custom.allow.auto.create.topics

Разрешение автоматического создания темы в брокере при подписке на несуществующие темы или назначения им тем.

Для корректной работы данной конфигурации брокер должен быть настроен с параметром auto.create.topics.enable=true
Настройка интеграции с Apache Kafka с использованием защищенного TLS-соединения

Если вы настраиваете интеграцию с использованием защищенного TLS-соединения, в файле конфигурации сервера управления (master) /etc/salt/master.d/returner.conf укажите все настройки, приведенные ниже:

returner.kafka_custom.bootstrap:
  - 10.31.0.170:9092
returner.kafka_custom.topic: salt-topic
returner.kafka_custom.security.protocol: "ssl"
returner.kafka_custom.ssl.key.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaclient.key"
returner.kafka_custom.ssl.key.password: "abcdefgh"
returner.kafka_custom.ssl.certificate.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaclient.pem"
returner.kafka_custom.ssl.ca.location: "/etc/<span data-markjs="true" class="terms-mark tooltipstered terms-term-selector">salt</span>/pki/salt_kafkaca.crt"
returnet.kafka_custom.ssl.endpoint.identification.algorithm: "none"
returner.kafka_custom.enable.ssl.certificate.verification: "false"
returner.kafka_custom.allow.auto.create.topics: "true"
returner.kafka_custom.debug: "all"
event_return: kafka_custom
В качестве инструкции по генерации сертификатов используйте документ "Using SSL with librdkafka".
Настройка режима мульти-мастер с автоматическим переключением (failover)
Настройки, описанные ниже, являются опциональными и выполняются только при использовании режима мульти-мастер с автоматическим переключением (failover).
  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/master_sign_pubkey.conf.

  2. В конфигурационном файле сервера управления (master) включите настройку подписи всех открытых ключей, установив значение параметра:

    master_sign_pubkey: True
  3. Перезапустите службу salt-master. После перезапуска сервер управления (master) автоматически создаст новую пару ключей и будет использовать ее для создания подписи открытых ключей, прикрепленной к ответу аутентификации:

    master_sign.pem
    master_sign.pub
  4. (Опционально) задайте имя для пары ключей подписи, установив значение параметра:

    master_sign_key_name: <name_without_suffix>
Настройка параметров оптимизации производительности работы сервера управления (master)

При описанной выше настройке сервер управления (master) вычисляет подпись для каждого запроса аутентификации, что требует большого количества ресурсов процессора.

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

Включение этого параметра также дает пользователям возможность иметь пару ключей подписи в системе, отличной от текущего сервера управления (master), и создавать там подпись с открытыми ключами. Вероятно, в системе с более строгими правилами брандмауэра, без доступа в Интернет и с меньшим количеством пользователей.

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

salt-key --gen-signature

В директории сервера управления (master) pki будет создан файл с подписью по умолчанию:

/etc/salt/pki/master/master_pubkey_signature

Это простой текстовый файл с двоичной подписью, преобразованной в base64. Если пара подписи еще не существует, пара подписи и файл подписи будут автоматически созданы за один вызов:

salt-key --gen-signature --auto-create

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

master_use_pubkey_signature: True

Для этого в каталоге сервера управления (master) pki должен присутствовать файл master_pubkey_signature с правильной подписью. Если у файла будет другое имя, задайте его, указав значение параметра:

master_pubkey_signature: <filename>

При наличии большого количества серверов управления (masters) и открытых ключей (по умолчанию и для подписи) рекомендуется использовать имя хоста salt-masters для имен файлов подписи. Подписи легко перепутать, поскольку они не несут никакой информации о ключе, из которого была создана подпись.

Подробное описание включения режима мульти-мастер с автоматическим переключением (failover) см. в документе «Руководство по эксплуатации» в разделе «Настройка режима мульти-мастер с автоматическим переключением (failover)».

Настройка Kafka returner

Загрузка Kafka returner в S3-совместимое хранилище

В S3-совместимое хранилище поместите файл kafka_return_custom.py в бакет salt-bucket по пути /base/_returners.

Пример результата:

kafka returner path
Обновление информации о Kafka returner на сервере управления (master)

Чтобы убедиться в корректности установки и готовности Kafka returner к использованию, обновите информацию о нем на сервере управления (master), выполнив команду:

sudo salt-run saltutil.sync_returners

Обновление информации о модуле исполнения для сбора истории пользовательских сессий на сервере управления (master)

Модуль исполнения для сбора истории пользовательских сессий запускается автоматически при установке бэкенда продукта и обеспечивает запись данных в S3-бакет salt-bucket в файл user_sessions.py по пути base/_modules/.

Для корректной работы модуля обновите информацию о нем на сервере управления (master), выполнив команду:

salt '*' saltutil.sync_modules --async

Запуск сервера управления (master)

  1. Запустите сервер управления (master), выполнив команду:

    sudo systemctl start salt-master
  2. Проверьте статус сервера управления (master), выполнив команду:

    sudo systemctl status salt-master

Запуск модуля salt-api

  1. Запустите модуль salt-api, выполнив команду:

    sudo systemctl start salt-api
  2. Проверьте статус модуля salt-api, выполнив команду:

    sudo systemctl status salt-api

Скачивание и распаковка архива с модулем координации (SaltStack) для последующей установки агентов (minions)

  1. Скачайте архив с модулем координации (SaltStack) требуемой версии из предоставленного хранилища любым доступным способом.

  2. Распакуйте архив, выполнив команду:

    tar xvf <имя_архива>

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

    tar xvf salt_3006.4.tar.gz
  3. Перенесите rpm-пакеты salt и salt-minion на машину, которая будет использоваться в качестве агента (minion), выполнив команду scp (secure copy).

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

    scp ~/Downloads/salt_3006.4/salt-3006.4-*.rpm \
    ~/Downloads/salt-minion-3006.4-0.x86_64.rpm \
    user@remote_host:/salt-lcm/

Установка пакетов с модулем координации SaltStack на агентах (minions)

Чтобы установить пакеты с модулем координации SaltStack на агентах (minions), выполните следующие шаги:

Установите rpm-пакеты в указанном порядке на устройствах, которые будут использоваться в качестве агентов (minions):

  1. salt — пакет, содержащий библиотеки, необходимые для работы SaltStack.

  2. salt-minion — пакет для установки агентов (minions) на удаленных устройствах.

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

sudo dnf install ./salt-lcm/salt-3006.4-0.x86_64.rpm
sudo dnf install ./salt-lcm/salt-minion-3006.4-0.x86_64.rpm

Конфигурация агента (minion)

На машине, на которой установлен агент (minion), задайте настройки его конфигурации, следуя инструкции ниже.

По умолчанию агент (minion) настраивается через главный файл конфигурации — /etc/salt/minion.

Также поддерживается создание файлов конфигураций в каталоге /etc/salt/minion.d/, что позволяет группировать логически параметры конфигурации.

Подробную информацию о настройке главного файла конфигурации агента см. в официальной документации.

  1. Cоздайте файл конфигурации агента (minion) /etc/salt/minion.d/master.conf.

  2. Задайте параметры для подключения к серверу управления (master).

  3. Задайте интервал в минутах, через который агент будет отправлять ping-запрос на сервер управления (master). Рекомендуемое значение — 10 минут.

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

    При задании параметра следует учитывать следующие факторы:

    • чем меньше значение параметра, тем больший объем данных будет передаваться в единицу времени, увеличивая нагрузку на сеть;

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

    Пример файла:

    master:
      - <адрес сервера управления (master)>
    ping_interval: 10
  4. (Опционально) для организации подключения в отказоустойчивом режиме (HA) — в режиме «мультимастер» (failover) внесите соответствующие настройки в файл /etc/salt/minion.d/master.conf. Ниже представлены минимальные настройки для работы с типом конфигурации failover:

    master:
      - <адрес 1-ого сервера управления (master)>
      - <адрес 2-ого сервера управления (master)>
      - ...
      - <адрес N-ого сервера управления (master)>
    
    master_type: failover
    master_alive_interval: 60
    master_failback: True
    master_failback_interval: 30
    random_master: true

    Где:

    • master_type — используемый способ подключения к серверам управления (master) (режим failover);

    • master_alive_interval — таймаут проверки серверов на предмет доступности, используемый для переключения между серверами;

    • master_failback — сценарий повторного подключения к серверам при их недоступности (значение True позволяет выполнить попытку подключения к серверам, которые были ранее недоступны);

    • master_failback_interval — таймаут проверки серверов при их повторной недоступности;

    • random_master — сценарий выбора сервера управления (master) из списка (значение True указывает, что будет выбираться случайный сервер из списка).

      Подробнее о настройке режима мульти-мастер с автоматическим переключением (failover) см. в документе «Руководство по эксплуатации» в разделе «Настройка режима мульти-мастер с автоматическим переключением (failover)».
  5. (Опционально) создайте файл конфигурации агента (minion) /etc/salt/minion.d/log_level.conf и задайте в нем параметр log_level, чтобы включить подробный уровень логирования.

    Пример файла:

    log_level: debug
  6. (Опционально) создайте файл конфигурации агента (minion) /etc/salt/minion.d/sudo_user.conf и задайте в нем пользователя, от имени которого будут запускаться процессы SaltStack.

    Пример файла:

    user: user
    sudo_user: root

    Где:

    • user — пользователь, от имени которого будут запускаться процессы SaltStack (значение по умолчанию: root);

    • sudo_user — пользователь, с правами которого будут выполняться удаленные команды SaltStack от имени активного пользователя (заданного в параметре user)

      Обычно для параметра sudo_user указывается значение root. В этом случае в параметре user не может быть указан пользователь root.

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

      1. Добавьте нового пользователя в файл sudoers и укажите, что от имени этого пользователя может запускаться агент (minion).

      2. Очистите кэш агента (minion).

      3. Укажите нового пользователя в качестве владельца каталога minion pki: sudo_user: root.

Создание пар открытых ключей (public key) для взаимодействия сервера управления (master) с агентами (minions)

Сервер управления (master) взаимодействует с агентами (minion) посредством открытого ключа шифрования и аутентификации. Чтобы агент (minion) смог принять команды от сервера управления (master), его ключ должен быть принят сервером управления (master).

Для управления всеми ключами на сервере управления (master) используйте команду salt-key.

Для просмотра всех ключей, которые находятся на сервере управления (master) используйте команду salt-key -L.

Пример:

# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
minion01
Rejected Keys:

Где:

  • Accepted — принятые ключи; в этом состоянии агент (minion) может общаться с сервером управления (master);

  • Rejected — ключи, отклоненные с помощью команды salt-key; в этом состоянии агент (minion) не принимает команды с сервера управления (master);

  • Denied — ключи, автоматически отклоненные сервером управления (master); в этом состоянии агент (minion) не принимает команды с сервера управления (master);

  • Unaccepted — ключи, которые находятся в ожидании принятия.

Чтобы принять все отложенные (Unaccepted) ключи, используйте команду salt-key -A.

Пример:

# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
minion01
Proceed? [n/Y] y
Key for minion minion01 accepted.

Чтобы принять ключ только выбранного агента (minion), используйте эту же команду и в аргументе -a укажите имя хоста агента (minion).

Пример:

# salt-key -a minion01
The following keys are going to be accepted:
Unaccepted Keys:
minion
Proceed? [n/Y] y
Key for minion minion01 accepted.

Обмен командами и данными между сервером управления (master) и агентом (minion) возможен только после того, как будет произведен обмен ключами, и ключ агента будет принят (Accepted) сервером управления (master).

Пример:

# salt-key -L
Accepted Keys:
minion01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

В тестовых целях допустимо использовать автоматический прием с подтверждением всех ключей от любых агентов (minions), исключающий необходимость ручного подтверждения каждого нового агента (minion). Для этого в файле конфигурации сервера управления (master) задайте параметр:

auto_accept: true

Запуск и проверка работы systemd-службы для агента (minion)

  1. Запустите systemd-службу salt-minion, выполнив команду:

    sudo systemctl start salt-minion
  2. Перезапустите systemd-службу salt-minion, выполнив команду:

    sudo systemctl restart salt-minion
  3. Проверьте статус службы salt-minion, выполнив команду:

    sudo systemctl status salt-minion

Установка бэкенда и фронтенда продукта

Чтобы установить бэкенд и фронтенд продукта, выполните шаги:

  1. Скачайте и распакуйте архив с основными модулями продукта.

  2. Установите бэкенд.

  3. Выполните настройку бэкенда.

  4. Установите фронтенд и выполните настройку веб-сервера.

Скачивание и распаковка архива с основными модулями продукта

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

  1. Скачайте архив с модулем координации (SaltStack) требуемой версии из предоставленного хранилища любым доступным способом.

  2. Распакуйте архив, выполнив команду:

    tar xvf <имя_архива>

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

    tar xvf inno-lcm-all-1.6.0.tar.gz
  3. Перенесите скачанный архив на машину, на которой будет запускаться inno-lcm, выполнив команду scp (secure copy).

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

    scp ~/Downloads/inno-lcm-*-1.6.0*.rpm  user@remote_host:/inno-lcm/

Установка бэкенда продукта

Установку бэкенда можно выполнить как на отдельном сервере, так и на сервере вместе с фронтендом продукта. Для этого установите пакет inno-lcm-core, выполнив команду:

sudo dnf install ./<пакет>

Пример:

sudo dnf install /inno-lcm/inno-lcm-core-1.4.0~457514.a6ac910e-1.x86_64.rpm -y
Проверка установки

После успешной установки пакета:

  1. Создан конфигурационный файл с настройками по умолчанию — /opt/inno-lcm-core/application.properties (описание настроек см. в разделе «Конфигурация бэкенда»).

    В случае когда выполняется обновление продукта до более новой версии, файл application.properties будет оставаться неизменным, но дополнительно будет создаваться файл application.example.properties. Этот файл будет носить ознакомительный характер и использоваться в качестве примера для самостоятельного переопределения параметров в конфигурационном файле application.properties.
  2. Создана systemd-служба lcm.

    При установке пакета inno-lcm-core автоматически создается пользователь inno-osmax-core, от имени которого будет запускаться systemd-служба lcm. При обновлении или удалении пакета пользователь удален не будет.

Чтобы запустить systemd-службу lcm, выполните команду:

sudo systemctl start lcm

Для включения автозапуска systemd-службы lcm используйте команду:

sudo systemctl enable lcm

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

sudo systemctl status lcm

В случае успешного запуска система вернет ответ, где в поле Active будет указано значение active (running):

systemctl status lcm
● lcm.service
   Loaded: loaded (/etc/systemd/system/lcm.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2024-01-24 19:24:40 MSK; 22h ago
 Main PID: 7894 (inno-lcm-core)
    Tasks: 53 (limit: 19048)
   Memory: 926.0M
   CGroup: /system.slice/lcm.service
           └─7894 /opt/inno-lcm-core/bin/inno-lcm-core

При неуспешном запуске поле Active будет содержать иное значение. В этом случае проверьте логи системы (см. раздел «Рекомендации по сбору и предоставлению информации о проблеме/ошибке» документа «Руководство по эксплуатации»).

Конфигурация бэкенда

Конфигурация бэкенда выполняется в файле application.properties, помещенном в каталог /opt/inno-lcm-core. Файл создается автоматически при установке deb-пакета inno-lcm-core и содержит значения по умолчанию.

Пример конфигурационного файла с настройками по умолчанию:

## This is an example of `application.properties` file as main configuration file for lcm-core backend


###############################################################################
# HTTP server properties section                                              #
###############################################################################

## Main application port
quarkus.http.port=8081

## SSL configuration section.
## To enable serving requests via HTTPS uncomment the following parameters:
#quarkus.http.insecure-requests=disabled
#quarkus.http.ssl-port=8081
#quarkus.http.ssl.certificate.key-store-file=/opt/inno-lcm-core/keystore.jks
#quarkus.http.ssl.certificate.key-store-password=keystore@12345

###############################################################################
# Authentication & Authorization section                                      #
###############################################################################

## Enable/disable authentication
lcm.application.auth.disabled=false
## Enables kerberos authentication debug mode
#quarkus.kerberos.debug=true
## There are 2 alternative options for the kerberos credentials [principal realm, name and password] defining:
## 1) via direct defining;
## 2) via keytab file path defining
##
## Direct kerberos credentials defining:
quarkus.kerberos.service-principal-name=lcm_backend_svc
quarkus.kerberos.service-principal-realm=my.domain.com
quarkus.kerberos.service-principal-password=Password123
## Path to keytab:
#quarkus.kerberos.keytab-path=/opt/inno-lcm-core/my_file.keytab

## Old deprecated authorization based on LDAP-groups only
## List of LDAP groups whose users are authorized in Admin Console
#lcm.authorization.user-groups-white-list[0]=CN=testGroup,CN=Users,DC=inno,DC=test

# New RBAC
lcm.authorization.rbac.enabled=false
# The following users will be mapped to the superuser role when the application starts
#lcm.authorization.rbac.super-users[0]=alice@INNO.TEST
#lcm.authorization.rbac.super-users[1]=bob@INNO.TEST

###############################################################################
# Database properties section                                                 #
###############################################################################

## Main datasource
quarkus.datasource."lcm-db".username=lcm
quarkus.datasource."lcm-db".password=password
quarkus.datasource."lcm-db".reactive.url=postgresql://localhost:5432/lcm
## If you need to specify default DB schema use the syntax below
#quarkus.datasource."lcm-db".reactive.url=postgresql://localhost:5432/lcm?search_path=lcm_schema_name

## Main datasource Liquibase config
quarkus.datasource."lcm-db".jdbc.url=jdbc:postgresql://localhost:5432/lcm
quarkus.liquibase."lcm-db".default-schema-name=lcm
quarkus.liquibase."lcm-db".migrate-at-start=True

## Readonly datasource
quarkus.datasource."lcm-db-readonly".username=readonly
quarkus.datasource."lcm-db-readonly".password=password
quarkus.datasource."lcm-db-readonly".reactive.url=postgresql://localhost:5432/lcm
quarkus.datasource."lcm-db-readonly".jdbc.url=jdbc:postgresql://localhost:5432/lcm

###############################################################################
# Hardware inventory properties section                                       #
###############################################################################

# Schedule for collections pillars synchronization with S3 (quartz cron format)
# [At second :00, every 15 minutes starting at minute :00, of every hour]
lcm.inventory.job.sync-collection-pillars.cron.expr=0 0/15 * ? * * *

# Determines how long session history data should be stored before deletion, 90 days by default
lcm.inventory.job.user-sessions-cleanup.storage-days-count=90

# Schedule for session history cleaning (quartz cron format)
# [At 00:00:00am every day]
lcm.inventory.job.user-sessions-cleanup.cron-expr=0 0 0 ? * * *

# Determines the maximum amount of machine custom attributes in one section
lcm.inventory.machine-attribute.section.size=20

# Determines the maximum amount of user custom attributes in one section
lcm.inventory.user-attribute.section.size=20

# The number of minutes since the last agent activity before the device goes into "Offline" status
lcm.inventory.settings.agent.minutes-to-become-offline=5
# Absolute file path to `wtmp` file which stores historical data of user logins and logouts
lcm.inventory.settings.agent.user-session-file-path=/var/log/wtmp
# Absolute file path to `utmp` file which stores user sessions in real time
lcm.inventory.settings.agent.active-user-session-file-path=/var/run/utmp

## Determines the page size for any ldap query
lcm.inventory.ldap.search-page-size=200
## The first LDAP datasource configuration
lcm.inventory.ldap.datasource[0].name=my.domain.com
lcm.inventory.ldap.datasource[0].base-dn=DC=my,DC=domain,DC=com
lcm.inventory.ldap.datasource[0].host=localhost
lcm.inventory.ldap.datasource[0].port=636
lcm.inventory.ldap.datasource[0].username=administrator@my.domain.com
lcm.inventory.ldap.datasource[0].password=Welkom123
## Optional section for the LDAP datasource
# lcm.inventory.ldap.datasource[0].connect-timeout-millis=10000
# lcm.inventory.ldap.datasource[0].response-timeout=10000
# lcm.inventory.ldap.datasource[0].abandon-on-timeout=true
# lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use=true

## The second and subsequent LDAP datasource configurations are optional
#lcm.inventory.ldap.datasource[1].name=my2.domain.com
#lcm.inventory.ldap.datasource[1].base-dn=DC=my2,DC=domain,DC=com
#lcm.inventory.ldap.datasource[1].host=192.168.0.1
#lcm.inventory.ldap.datasource[1]...

## LDAPS (LDAP over SSL) parameters section.
## There are 3 options available for LDAP datasource:
## value `false` - disable LDAPS
## value `trust_all` - enable LDAPS, allow any SSL certificate without validation
## value `true` - enable LDAPS, requires path to the certificate file
#lcm.inventory.ldap.datasource[0].ssl=true
#lcm.inventory.ldap.datasource[0].ssl-certificate=/opt/inno-lcm-core/samba_cert.pem

###############################################################################
# Application Store properties section                                        #
###############################################################################

# Determines the amount of hours after which order is considered failed
lcm.order-management.completion.time.hours=12
# Schedule for tracking long-running orders as failed (quartz cron format)
# [At second :00 of minute :00 of every hour]
lcm.order-management.autocomplete.cron.expr=0 0 * ? * * *

###############################################################################
# Kafka messages section                                                      #
###############################################################################

## Kafka bootstrap servers (comma separated)
mp.messaging.connector.smallrye-kafka.bootstrap.servers=localhost:9092
# Kafka topic name
mp.messaging.incoming.salt-events-kafka.topic=salt-topic

## Kafka SSL connection parameters section.
## To enable SSL connection mode uncomment three following parameters:
#mp.messaging.connector.smallrye-kafka.security.protocol=SSL
#mp.messaging.connector.smallrye-kafka.ssl.truststore.location=/etc/ssl/certs/java/cacerts
#mp.messaging.connector.smallrye-kafka.ssl.truststore.password=changeit
## Optionally if the custom truststore is used:
## To change the format use one of JKS, JCEKS, P12, PKCS12, PFX. Default format is JKS
#mp.messaging.connector.smallrye-kafka.ssl.truststore.type=PKCS12

###############################################################################
# REST clients common configuration                                           #
###############################################################################

## SSL connection parameters sections.
## To enable accessing REST endpoints via HTTPS uncomment two following parameters:
#quarkus.rest-client.trust-store=/etc/ssl/certs/java/cacerts
#quarkus.rest-client.trust-store-password=changeit
## Optionally if the custom truststore is used:
## To change the format use one of JKS, JCEKS, P12, PKCS12, PFX. Default format is JKS
#quarkus.rest-client.trust-store-type=PKCS12
## For disabling SSL connection verification you can use option below
#quarkus.rest-client.remote-access.trust-all=true

###############################################################################
# SaltStack integration section                                               #
###############################################################################

lcm.salt-adapter.command-runner.http-scheme=http
lcm.salt-adapter.command-runner.master-api-port=8000
lcm.salt-adapter.command-runner.global-auth.eauth=pam
lcm.salt-adapter.command-runner.global-auth.login=salt_api
lcm.salt-adapter.command-runner.global-auth.password=123
lcm.salt-adapter.command-runner.retry.number-of-attempts=5
lcm.salt-adapter.command-runner.retry.initial-back-off=1s
lcm.salt-adapter.command-runner.retry.max-back-off=1s

## Salt masters configuration section.
## Optional, this section should be used when backend server can't resolve salt master by DNS name
#lcm.salt-adapter.command-runner.override-masters[0].id=salt-master1
#lcm.salt-adapter.command-runner.override-masters[0].uri=http://192.168.0.1:8000

## The second and other Salt masters can be configured in the same way
#lcm.salt-adapter.command-runner.override-masters[1].id=salt-master2
#lcm.salt-adapter.command-runner.override-masters[1].uri=http://192.168.0.2:8000

###############################################################################
# Remote access service integration section                                   #
###############################################################################

# URL to the guacamole remote access service
quarkus.rest-client.remote-access.url=https://guacamole-host.net:9099/guacamole
# for an advanced configuration of the quarkus REST client to the guacamole service you can set up the following settings group
#quarkus.rest-client.remote-access.connect-timeout
#quarkus.rest-client.remote-access.trust-store
#quarkus.rest-client.remote-access.trust-store-password
#quarkus.rest-client.remote-access.trust-store-type
#quarkus.rest-client.remote-access.key-store
#quarkus.rest-client.remote-access.key-store-password
#quarkus.rest-client.remote-access.key-store-type
#quarkus.rest-client.remote-access.hostname-verifier
#quarkus.rest-client.remote-access.connection-ttl
#and others
#quarkus.rest-client.remote-access.***

# system account login for the guacamole remote access service
lcm.inventory.remote-access.username=admin
# system account login password for the guacamole remote access service
lcm.inventory.remote-access.password=password

###############################################################################
# S3 integration section                                                      #
###############################################################################

# contains a list of S3 server URIs
lcm.salt-adapter.s3.server-uri-list=http://localhost:9000,http://localhost:9900
lcm.salt-adapter.s3.access-key-id=s3adminSalt
lcm.salt-adapter.s3.secret-access-key=s3adminSaltPassword
lcm.salt-adapter.s3.region=ru-location-1
lcm.salt-adapter.s3.state-bucket-name=salt-bucket
lcm.salt-adapter.s3.pillar-bucket-name=pillar-bucket
lcm.salt-adapter.s3.script-bucket-name=script-bucket

###############################################################################
# Multimedia service section                                                  #
###############################################################################

# contains a list of S3 server URIs
lcm.multimedia.s3.server-uri-list=http://localhost:9000,http://localhost:9900
lcm.multimedia.s3.access-key-id=s3adminMultimedia
lcm.multimedia.s3.secret-access-key=s3adminMultimediaPassword
lcm.multimedia.s3.region=ru-location-1
lcm.multimedia.s3.icons-bucket-name=multimedia-bucket
lcm.multimedia.s3.images-bucket-name=multimedia-bucket
lcm.multimedia.s3.others-bucket-name=multimedia-bucket
lcm.multimedia.s3.script-bucket-name=script-bucket
lcm.multimedia.common.max-file-size-kb=1024
# Contains current nginx frontend uri, used to form bootstrap script installation link
lcm.multimedia.common.frontend-uri=http://localhost:8081

###############################################################################
# Configurations manager section                                              #
###############################################################################

# Determines maximum amount of categories per one configuration
lcm.catalog.category.configuration-limit=5
# Determines total amount of categories
lcm.catalog.category.total-limit=15
# Determines maximum salt-agent installation script file size in megabytes
lcm.catalog.category.max-script-size-mbytes=10

###############################################################################
# Logging section                                                             #
###############################################################################

# Common logging config
quarkus.log.file.enable=true
quarkus.log.json.file.enable=true
quarkus.log.json.console.enable=false

# File logging config
quarkus.log.file.path=/app/inno-osmax/logs/osmax/core/osmax-core.log
quarkus.log.file.rotation.max-file-size=10M
quarkus.log.file.rotation.max-backup-index=5
quarkus.log.file.rotation.file-suffix=.yyyy-MM-dd.gz

# Json format config
quarkus.log.json.fields.mdc.flat-fields=true
quarkus.log.json.fields.timestamp.date-format=yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
quarkus.log.json.fields.timestamp.zone-id=UTC

# Audit logging config
quarkus.log.handler.file.audit-handler.enable=true
quarkus.log.handler.file.audit-handler.path=/app/inno-osmax/audit/osmax/core/audit-osmax-core.log
quarkus.log.handler.file.audit-handler.rotation.max-file-size=10M
quarkus.log.handler.file.audit-handler.rotation.max-backup-index=50
quarkus.log.handler.file.audit-handler.rotation.file-suffix=.yyyy-MM-dd

quarkus.log.category."AUDIT".level=INFO
quarkus.log.category."AUDIT".handlers=audit-handler
quarkus.log.category."AUDIT".use-parent-handlers=false

###############################################################################
# Debug section                                                               #
# Enable all logging events via environment variable `QUARKUS_PROFILE=debug`  #
# or delete `%debug.` prefix                                                  #
###############################################################################

# HTTP server access logs (uri + status)
%debug.quarkus.http.access-log.enabled=true

# Internal rest-client
%debug.quarkus.rest-client.logging.scope=request-response
%debug.quarkus.rest-client.logging.body-limit=500
%debug.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level=DEBUG
%debug.quarkus.log.category."org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext".level=DEBUG

# SaltStack events
%debug.quarkus.log.category."tech.inno.lcm.salt.events".level=DEBUG

# All backend services
%debug.quarkus.log.category."tech.inno.lcm".level=DEBUG

# Kerberos
%debug.quarkus.kerberos.debug=true
%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".level=TRACE
%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".min-level=TRACE

# AWS client
%debug.quarkus.log.category."software.amazon.awssdk.request".level=DEBUG

###############################################################################
# Quarkus framework section                                                   #
###############################################################################

# application is run under specific user, those settings allow not clashing with other quarkus apps on the same server
quarkus.http.body.uploads-directory=${java.io.tmpdir}/inno_osmax_core_uploads
quarkus.management.body.uploads-directory=${java.io.tmpdir}/inno_osmax_core_uploads
Перед запуском systemd-службы lcm измените права доступа к конфигурационному файлу, предоставив доступ только для пользователя, от имени которого она будет запускаться.

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

Подключение к HTTP-серверу
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.port

Основной порт подключения

8081

8081

Подключение к HTTPS-серверу
Настройки, описанные в разделе, являются опциональными и используются, только при подключении по протоколу SSL.
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.insecure-requests

Возможные значения:

  • enabled — HTTP-порт открыт;

  • disabled — HTTP-порт закрыт;

  • redirect — HTTP-порт открыт, но все запросы будут перенаправляться на HTTPS-порт

disabled

quarkus.http.ssl-port

Порт для подключения к HTTPS-серверу

8081

quarkus.http.ssl.certificate.key-store-file

Путь к хранилищу (keystore-файлу), где хранятся закрытые ключи и сертификаты, необходимые для установки защищенного HTTPS-соединения

/opt/inno-lcm-core/keystore.jks

quarkus.http.ssl.certificate.key-store-password

Пароль для доступа к keystore-файлу

keystore@12345

Аутентификация и авторизация
Параметры quarkus.kerberos.keytab-path и quarkus.kerberos.service-principal-<name/password/real> являются опциональными и взаимозаменяемыми. С точки зрения безопасности рекомендуется использовать keytab-файл для аутентификации в домене и указывать параметр quarkus.kerberos.keytab-path.
Наименование Описание Значение по умолчанию Пример значения

lcm.application.auth.disabled

Включение/выключение аутентификации Kerberos. Возможные значения: true и false

false

false

quarkus.kerberos.debug

(Опциональный параметр) включение/выключение отправки сообщений для отладки Kerberos. Возможные значения: true и false

true

quarkus.kerberos.service-principal-name

(Опциональный параметр) имя принципала для аутентификации Kerberos

lcm_backend_svc

quarkus.kerberos.service-principal-realm

(Опциональный параметр) наименование области безопасности (realm) принципала

my.domain.com

quarkus.kerberos.service-principal-password

(Опциональный параметр) пароль принципала

Password123

quarkus.kerberos.keytab-path

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

/opt/inno-lcm-core/my_file.keytab

lcm.authorization.user-groups-white-list[0]

(Устаревший опциональный параметр) список групп LDAP, пользователи которых авторизованы в графическом интерфейсе администратора

CN=testGroup,CN=Users,DC=inno,DC=test

lcm.authorization.rbac.enabled

Включение/выключение авторизации RBAC

false

false

lcm.authorization.rbac.super-users[0]

Пользователи, которым будут выданы права суперпользователя при запуске продукта. Параметр задается, если включена Авторизация RBAC (lcm.authorization.rbac.enabled=true).

Параметр задается отдельно для каждого пользователя, начиная с 0, например:

lcm.authorization.rbac.super-users[0]=alice@INNO.TEST
lcm.authorization.rbac.super-users[1]=bob@INNO.TEST

alice@INNO.TEST

Подключение к БД
Наименование Описание Значение по умолчанию Пример значения

quarkus.datasource."lcm-db".username

Имя пользователя для подключения к БД

lcm

lcmadmin

quarkus.datasource."lcm-db".password

Пароль пользователя для подключения к БД

password

qwerty123

quarkus.datasource."lcm-db".reactive.url

Адрес подключения серверной части продукта к БД. Формат:

pass:[postgresql://{db_host}:{db_port}/{db_name}]
Если необходимо указать схему по умолчанию используйте синтаксис: postgresql://localhost:5432/lcm?search_path=lcm_schema_name

postgresql://localhost:5432/lcm

postgresql://10.6.32.156:5432/lcm

quarkus.datasource."lcm-db".jdbc.url

Адрес подключения к БД. Параметр используется утилитой Liquibase для актуализации схемы БД. Формат:

pass:[jdbc:postgresql://{db_host}:{db_port}/{db_name}]

jdbc:postgresql://localhost:5432/lcm

jdbc:postgresql://10.6.32.156:5432/lcm

quarkus.liquibase."lcm-db".default-schema-name

Имя схемы данных

lcm

lcm

quarkus.liquibase."lcm-db".migrate-at-start

Включение/выключение автоматического обновления структуры БД с помощью утилиты Liquibase. Возможные значения: true и false

True

True

quarkus.datasource."lcm-db-readonly".username

Имя пользователя с правами только на чтение данных (read-only) для подключения к БД

readonly

lcmuser

quarkus.datasource."lcm-db-readonly".password

Пароль пользователя с правами только на чтение данных (read-only) для подключения к БД

password

lcmuserpassword

quarkus.datasource."lcm-db-readonly".reactive.url

Адрес подключения серверной части продукта к БД. Формат:

pass:[postgresql://{db_host}:{db_port}/{db_name}]

postgresql://localhost:5432/lcm

postgresql://localhost:5432/lcm

quarkus.datasource."lcm-db-readonly".jdbc.url

Адрес подключения к БД. Формат:

pass:[jdbc:postgresql://{db_host}:{db_port}/{db_name}]

jdbc:postgresql://localhost:5432/lcm

jdbc:postgresql://10.6.32.156:5432/lcm

Инвентаризация оборудования

Нумерация массива lcm.inventory.ldap.datasource начинается с 0.

Параметры подключения к домену №2 аналогичны параметрам домена №1.

Пример:

  • lcm.inventory.ldap.datasource[1].host=192.168.0.1;

  • lcm.inventory.ldap.datasource[1].name=domain_alias2;

  • lcm.inventory.ldap.datasource[1].port=389;

  • lcm.inventory.ldap.datasource[1].username=username2@domain2_name;

  • lcm.inventory.ldap.datasource[1].ssl=false;

  • lcm.inventory.ldap.datasource[1].base-dn=DC=domain_name2,DC=local.

Наименование Описание Значение по умолчанию Пример значения

lcm.inventory.job-sync-collection-pillars.cron.expr

Cron-выражение в формате quartz, которое задает частоту синхронизации состава коллекций на бэкенде продукта и на сервере управления (master) (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0/15 * ? * * *

0/10 * * ? * * *

lcm.inventory.job.user-sessions-cleanup.storage-days-count

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

90

90

lcm.inventory.job.user-sessions-cleanup.cron-expr

Cron-выражение в формате quartz, которое задает расписание удаления данных истории сессий пользователей (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0 0 ? * * *

0 0 0 ? * * *

lcm.inventory.user-attribute.section.size

Максимальное количество атрибутов устройств в одном разделе

20

20

lcm.inventory.user-attribute.section.size

Максимальное количество пользовательских атрибутов в одном разделе

20

20

lcm.inventory.settings.agent.minutes-to-become-offline

Интервал в минутах, в течение которого на агенте (minion) нет активности. По истечению этого интервала сетевой статус агента (minion) будет изменен на неактивный (offline)

5

5

lcm.inventory.settings.agent.user-session-file-path

Путь к файлу на сервере с агентом (minion), в котором хранится информация о сессиях пользователей

/var/log/wtmp

/var/log/wtmp

lcm.inventory.settings.agent.active-user-session-file-path

Путь к файлу на сервере с агентом (minion), в котором хранится информация о текущих сессиях пользователей

/var/run/utmp

/var/run/utmp

lcm.inventory.ldap.search-page-size

Максимальное количество записей, которое будет возвращаться в ответ на один запрос синхронизации с LDAP-сервером. Чем больше значение, тем больше данных LDAP-серверу необходимо обработать в рамках одного запроса. Чем меньше значение, тем дольше будет выполняться синхронизация

200

200

lcm.inventory.ldap.datasource[0].name

Название источника данных (например, имя домена)

my.domain.com

lcm-1583.terra.inno.tech

lcm.inventory.ldap.datasource[0].base-dn

Базовое имя домена в формате LDAP

DC=my,DC=domain,DC=com

DC=lcm-1583,DC=terra,DC=inno,DC=tech

lcm.inventory.ldap.datasource[0].host

IP-адрес или сетевое имя контроллера домена (сервера LDAP)

localhost

10.6.32.204

lcm.inventory.ldap.datasource[0].port

Порт для соединения по протоколу LDAP. Опциональный параметр

636

389; для LDAP over SSL обычно используется порт 636

lcm.inventory.ldap.datasource[0].username

Имя пользователя для подключения к домену LDAP-сервера.

Может быть указано в одном из следующих форматов:

  • <имя_пользователя>@<имя домена>, например, ivanov@INNO;

  • пользователь в формате LDAP, например, CN=ivanov,CN=Users,DC=inno,DC=local

administrator@my.domain.com

Administrator@lcm-1583.terra.inno.tech

lcm.inventory.ldap.datasource[0].password

Пароль пользователя для подключения к домену LDAP-сервера

Welkom123

Welkom123

Опциональные параметры

lcm.inventory.ldap.datasource[0].connect-timeout-millis

Максимальная длительность подключения к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание

10000

lcm.inventory.ldap.datasource[0].response-timeout

Максимальная длительность выполнения запроса к LDAP-серверу в миллисекундах. Значение 0 означает бесконечное ожидание

10000

lcm.inventory.ldap.datasource[0].abandon-on-timeout

Параметр, который отвечает за освобождение соединения в случае превышения максимальной длительности ожидания запроса. Возможные значения: true и false

true

lcm.inventory.ldap.datasource[0].allow-concurrent-socket-factory-use

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

true

lcm.inventory.ldap.datasource[0].ssl

Параметр, отвечающий за соединение по протоколу LDAP over SSL (LDAPS).

Возможные значения:

  • false — соответствует выключенному протоколу LDAPS, используется обычный LDAP;

  • true — соответствует включенному протоколу LDAPS, требует наличия файла с сертификатом для SSL-соединения (задается отдельным параметром);

  • trust_all — соответствует включенному протоколу LDAPS, принимает любые сертификаты без подтверждения

true

lcm.inventory.ldap.datasource[0].ssl-certificate

Относительный или абсолютный путь к файлу с сертификатом для подключения через LDAPS. Опциональный параметр

/opt/inno-lcm-core/samba_cert.pem

Работа с пользовательским интерфейсом «Магазин приложений»
Наименование Описание Значение по умолчанию Пример значения

lcm.order-management.completion.time.hours

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

12

12

lcm.order-management.autocomplete.cron.expr

Cron-выражение в формате quartz задающее расписание выполнения проверки долго выполняющихся заказов, после которой они будут считаться невыполненными (см. описание формата в разделе «Cron-выражение формата Quartz» документа «Руководство по эксплуатации»)

0 0 * ? * * *

0 0 * ? * * *

Интеграция с Apache Kafka
Наименование Описание Значение по умолчанию Пример значения

mp.messaging.incoming.salt-events-kafka.bootstrap.servers

Адрес сервера для подключения к брокеру Apache Kafka, который будет использоваться для получения сообщений от серверов управления (masters)

localhost:9092

10.6.32.156:9092

mp.messaging.incoming.salt-events-kafka.topic

Топик Apache Kafka, из которого будут поступать сообщения

salt-topic

salt-topic

Настройка SSL-соединения с Apache Kafka
Параметры из данного блока являются опциональными и задаются, только если требуется SSL для Apache Kafka.
Наименование Описание Значение по умолчанию Пример значения

mp.messaging.connector.smallrye-kafka.security.protocol

SSL-протокол для защищенного соединения

SSL

mp.messaging.connector.smallrye-kafka.ssl.truststore.location

Путь к файлу хранилища доверенных сертификатов (truststore), который содержит сертификаты доверенных центров сертификации

/etc/ssl/certs/java/cacerts

mp.messaging.connector.smallrye-kafka.ssl.truststore.password

Пароль для доступа к хранилищу доверенных сертификатов

truststore@12345

mp.messaging.connector.smallrye-kafka.ssl.truststore.type

Тип хранилища, например, JKS, JCEKS, P12, PKCS12, PFX. Если значение не задано, по умолчанию используется значение JKS

PKCS12

Настройки REST-клиентов
Настройки, описанные в разделе, являются опциональными и используются, только при подключении по протоколу SSL.
Наименование Описание Значение по умолчанию Пример значения

quarkus.rest-client.trust-store

Путь к файлу хранилища доверенных сертификатов (truststore), который содержит сертификаты доверенных центров сертификации

/etc/ssl/certs/java/cacerts

quarkus.rest-client.trust-store-password

Пароль для доступа к хранилищу доверенных сертификатов

truststore@12345

quarkus.rest-client.trust-store-type

Тип хранилища, например, JKS, JCEKS, P12, PKCS12, PFX. Если значение не задано, по умолчанию используется значение JKS

PKCS12

quarkus.rest-client.remote-access.trust-all

Отключение проверки SSL-соединения

true

Интеграция с API SaltStack
Наименование Описание Значение по умолчанию Пример значения

lcm.salt-adapter.command-runner.http-scheme

Протокол, который будет использоваться для отправки HTTP-запросов между компонентами Salt Adapter и Command Runner модуля координации. Возможные значения: http или https

http

http

lcm.salt-adapter.command-runner.master-api-port

Порт, на котором будет запущен API-модуль сервера управления (master). Значение параметра задается для всех используемых серверов управления (masters)

8000

8000

lcm.salt-adapter.command-runner.global-auth.eauth

Тип аутентификации для запросов. Значение параметра задается для всех используемых серверов управления (masters). Возможные значения: ldap или pam. ldap — аутентификация через внешний LDAP-сервер, pam — аутентификация с помощью локальной учетной записи на машине, на которой установлен сервер управления (master).

Если установлено значение pam, для сервера управления (master) требуется root-доступ

pam

pam

lcm.salt-adapter.command-runner.global-auth.login

Логин для подключения к серверу управления (master). Значение параметра задается для всех используемых серверов управления (masters)

salt_api

salt_api

lcm.salt-adapter.command-runner.global-auth.password

Пароль для подключения к серверу управления (master). Значение параметра задается для всех используемых серверов управления (masters)

salt123

salt123

lcm.salt-adapter.command-runner.retry.number-of-attempts

Количество попыток выполнения команды, после неудачной попытки

5

5

lcm.salt-adapter.command-runner.retry.initial-back-off

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

1s

1s

lcm.salt-adapter.command-runner.retry.max-back-off

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

1s

1s

Опциональные параметры

lcm.salt-adapter.command-runner.override-masters[0].id

Имя машины, на которой установлен сервер управления (master)

При использовании нескольких серверов управления (masters) значение задается отдельно для каждого; нумерация массива начинается с [0]. Пример: lcm.salt-adapter.command-runner.override-masters[0].id=salt-master1, lcm.salt-adapter.command-runner.override-masters[1].id=salt-master2

salt-master2

lcm.salt-adapter.command-runner.override-masters[0].uri

Полный адрес API-модуль сервера управления (master), указанного в параметре lcm.salt-adapter.command-runner.override-masters[0].id

При использовании нескольких серверов управления (masters) значение задается отдельно для каждого; нумерация массива начинается с [0]. Пример: lcm.salt-adapter.command-runner.override-masters[0].http://192.168.0.1:8000, lcm.salt-adapter.command-runner.override-masters[0].uri=http://192.168.0.2:8000

http://192.168.0.2:8000

Интеграция с модулем «Удаленный доступ»
Наименование Описание Значение по умолчанию Пример значения

quarkus.rest-client.remote-access.url

URL-адрес для подключения к модулю «Удаленный доступ»

https://guacamole-host.net:9099/guacamole

https://guacamole-host.net:9099/guacamole

lcm.inventory.remote-access.username

Аккаунт для входа в модуль «Удаленный доступ»

admin

admin

lcm.inventory.remote-access.password

Пароль от аккаунта для входа в модуль «Удаленный доступ»

12345

12345

Опциональные параметры, которые используются для расширенной настройки REST-клиента Quarkus модуля «Удаленный доступ»

quarkus.rest-client.remote-access.connect-timeout

Таймаут соединения при обращении к удаленному серверу

quarkus.rest-client.remote-access.trust-store

Путь к файлу доверенных сертификатов для проверки подлинности удаленного сервера

quarkus.rest-client.remote-access.trust-store-password

Пароль для доступа к файлу доверенных сертификатов

quarkus.rest-client.remote-access.trust-store-type

Тип хранилища доверенных сертификатов (например, JKS)

quarkus.rest-client.remote-access.key-store

Путь к файлу с ключами (keystore) для аутентификации при обращении к удаленному серверу

quarkus.rest-client.remote-access.key-store-password

Пароль для доступа к файлу с ключами (keystore)

quarkus.rest-client.remote-access.key-store-type

Тип хранилища ключей (например, JKS)

quarkus.rest-client.remote-access.hostname-verifier

Параметр, определяющий, должно ли проверяться доменное имя удаленного сервера при установке соединения

quarkus.rest-client.remote-access.connection-ttl

Длительность соединения с удаленным сервером

Интеграция с S3-совместимым хранилищем
Наименование Описание Значение по умолчанию Пример значения

lcm.salt-adapter.s3.server-uri-list

URI для подключения к S3-совместимому хранилищу, в котором будут храниться файлы для SaltStack.

Для переключения взаимодействия с S3-совместимым хранилищем по протоколу SSL:

  1. Измените URI c http на https.

  2. Разместите публичный сертификат сервера S3 или сертификат выдавшего его удостоверяющего центра в системное хранилище сертификатов

http://10.6.32.156:9000

lcm.salt-adapter.s3.access-key-id

Идентификатор ключа (access Key) S3-совместимого хранилища

s3adminSalt

minioadmin

lcm.salt-adapter.s3.secret-access-key

Секретный ключ (Secret Key) S3-совместимого хранилища

s3adminSaltPassword

minioadmin123

lcm.salt-adapter.s3.region

Название региона S3 NOTE: Для хранилища Ceph данный параметр не учитывается. Если вы используете Сeph в качестве хранилища, укажите значение default

ru-location-1

ru-location-1

lcm.salt-adapter.s3.state-bucket-name

Название бакета S3 для хранения общих файлов конфигураций и файлов состояний

salt-bucket

salt-bucket

lcm.salt-adapter.s3.pillar-bucket-name

Название бакета S3 для хранения данных Pillar

pillar-bucket

pillar-bucket

lcm.salt-adapter.s3.script-bucket-name

Название бакета S3 для хранения исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства

script-bucket

script-bucket

Хранение мультимедиа-файлов в S3-совместимом хранилище
Наименование Описание Значение по умолчанию Пример значения

lcm.multimedia.s3.server-uri-list

URI для подключения к S3-совместимому хранилищу, в котором будут храниться мультимедиа-файлы продукта (иконки, скриншоты).

Для переключения взаимодействия с S3-совместимым хранилищем по протоколу SSL:

  1. Измените URI c http на https.

  2. Разместите публичный сертификат сервера S3 или сертификат выдавшего его удостоверяющего центра в системное хранилище сертификатов

http://localhost:9000,http://localhost:9900

http://10.6.32.156:9000

lcm.multimedia.s3.access-key-id

Идентификатор ключа (access Key) S3-совместимого хранилища мультимедиа-контента

s3adminMultimedia

minioadmin

lcm.multimedia.s3.secret-access-key

Секретный ключ (Secret Key) S3-совместимого хранилища мультимедиа-контента для доступа к сервису S3 (пароль)

s3adminMultimediaPassword

minioadmin123

lcm.multimedia.s3.region

Название региона S3 для хранилища мультимедиа-контента NOTE: Для хранилища Ceph данный параметр не учитывается. Если вы используете Сeph в качестве хранилища, укажите значение default

ru-location-1

ru-location-1

lcm.multimedia.s3.icons-bucket-name

Название бакета S3 для хранения иконок

multimedia-bucket

icons-bucket

lcm.multimedia.s3.images-bucket-name

Название бакета S3 для хранения изображений и скриншотов

multimedia-bucket

images-bucket

lcm.multimedia.s3.others-bucket-name

Название бакета S3 для хранения прочего контента

multimedia-bucket

others-bucket

lcm.multimedia.s3.script-bucket-name

Название бакета S3 для хранения исполняемых файлов (скриптов), предназначенных для установки агентов (minions) на устройства

script-bucket

script-bucket

lcm.multimedia.common.max-file-size-kb

Максимальный размер файла в килобайтах

1024

1024

lcm.multimedia.common.frontend-uri

URI для доступа к фронтенду

http://localhost:8081

http://localhost:8081

Управление конфигурациями
Наименование Описание Значение по умолчанию Пример значения

lcm.catalog.category.configuration-limit

Максимальное количество категорий для одной конфигурации

5

5

lcm.catalog.category.total-limit

Общее число категорий

15

15

lcm.catalog.category.max-script-size-mbytes

Максимальный размер файла скрипта установки агентов (minions) в мегабайтах

10

10

Логирование
Наименование Описание Значение по умолчанию Пример значения

quarkus.log.file.enable

Активация логирования в файл. Возможные значения: true и false

true

true

quarkus.log.json.file.enable

Включение/выключение форматирования логов в JSON при записи в файл

true

true

quarkus.log.json.console.enable

Включение/выключение форматирования логов в JSON при выводе в консоль

false

false

quarkus.log.file.path

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

/app/inno-osmax/logs/osmax/core/osmax-core.log

/app/inno-osmax/logs/osmax/core/osmax-core.log

quarkus.log.file.rotation.max-file-size

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

10М

10М

quarkus.log.file.rotation.max-backup-index

Предельное количество сохраняемых файлов с логами при ротации

5

5

quarkus.log.file.rotation.file-suffix

Суффикс для имен файлов логов после их ротации

.yyyy-MM-dd.gz

.yyyy-MM-dd.gz

quarkus.log.json.fields.mdc.flat-fields

Параметр, который указывает, что контекст MDC (Mapped Diagnostic Context) должен быть записан в плоском формате

true

true

quarkus.log.json.fields.timestamp.date-format

Формат даты и времени для поля timestamp в JSON

yyyy-MM-dd’T’HH:mm:ss.SSS’Z'

yyyy-MM-dd’T’HH:mm:ss.SSS’Z'

quarkus.log.json.fields.timestamp.zone-id

Часовой пояс для поля timestamp в JSON

UTC

UTC

quarkus.log.handler.file.audit-handler.enable

Включение/выключение обработчика для логов аудита

true

true

quarkus.log.handler.file.audit-handler.path

Путь к файлу, в который будут записываться логи аудита

/app/inno-osmax/audit/osmax/core/audit-osmax-core.log

/app/inno-osmax/audit/osmax/core/audit-osmax-core.log

quarkus.log.handler.file.audit-handler.rotation.max-file-size

Максимальный размер файла логов аудита до переноса в исторический файл

10M

10M

quarkus.log.handler.file.audit-handler.rotation.max-backup-index

Максимальное количество резервных копий файлов логов аудита

50

50

quarkus.log.handler.file.audit-handler.rotation.file-suffix

Суффикс для имен файлов логов аудит после их ротации

.yyyy-MM-dd

.yyyy-MM-dd

quarkus.log.category."AUDIT".level

Настройка уровня логирования. Возможные значения:

  • FATAL — сообщение об ошибке, которая привела к критическому сбою программы;

  • ERROR — сообщение об ошибке, которая привела к некритическому сбою программы;

  • WARN — предупреждение о потенциальной проблеме или необычном состоянии, которое не является ошибкой, но требует внимания;

  • INFO — информационное сообщение о ходе работы программы, которое может быть полезно для мониторинга и отладки;

  • DEBUG — детальная отладочная информация, которая помогает разработчикам выявлять и исправлять проблемы в коде;

  • TRACE — cамый низкий уровень важности, предоставляющий еще более детальную информацию, которая используется для отслеживания каждого шага алгоритма или функции.

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

quarkus.log.category.<"system module">

Пример:

quarkus.log.category."AUDIT".level=DEBUG

INFO

INFO

quarkus.log.category."AUDIT".handlers

Обработчик, который будет использоваться для категории "AUDIT"

audit-handler

audit-handler

quarkus.log.category."AUDIT".use-parent-handlers

Включение/выключение использования родительских обработчиков для категории "AUDIT"

false

false

Отладка
Наименование Описание Значение по умолчанию Пример значения

%debug.quarkus.http.access-log.enabled

Включение/выключение логирования доступа к HTTP-серверу (uri и статус). Возможные значения: true и false

true

true

%debug.quarkus.rest-client.logging.scope

Уровень логирования для внутреннего REST-клиента, который будет записывать информацию о запросах и ответах

request-response

request-response

%debug.quarkus.rest-client.logging.body-limit

Размер тела запроса/ответа

500

500

%debug.quarkus.log.category."org.jboss.resteasy.reactive.client.logging".level

Уровень логирования для пакета org.jboss.resteasy.reactive.client.logging

DEBUG

DEBUG

%debug.quarkus.log.category."org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext".level

Уровень логирования для класса org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext

DEBUG

DEBUG

%debug.quarkus.log.category."tech.inno.lcm.salt.events".level

Уровень логирования для событий SaltStack

DEBUG

DEBUG

%debug.quarkus.log.category."tech.inno.lcm".level

Уровень логирования для всех сервисов бэкенда, начинающихся с tech.inno.lcm

DEBUG

DEBUG

%debug.quarkus.kerberos.debug

Включение/выключение дополнительного логирования для аутентификации Kerberos. Возможные значения: true и false

true

true

%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".level

Уровень логирования для класса io.quarkiverse.kerberos.runtime.KerberosIdentityProvider

TRACE

TRACE

%debug.quarkus.log.category."io.quarkiverse.kerberos.runtime.KerberosIdentityProvider".min-level

Минимальный уровень логирования для класса io.quarkiverse.kerberos.runtime.KerberosIdentityProvider

TRACE

TRACE

%debug.quarkus.log.category."software.amazon.awssdk.request".level

Уровень логирования для категории запросов к сервисам Amazon AWS SDK

DEBUG

DEBUG

Фреймворк Quarkus
Наименование Описание Значение по умолчанию Пример значения

quarkus.http.body.uploads-directory

Директория для временного хранения файлов, загружаемых посредством API

${java.io.tmpdir}/inno_osmax_core_uploads

${java.io.tmpdir}/inno_osmax_core_uploads

quarkus.management.body.uploads-directory

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

${java.io.tmpdir}/inno_osmax_core_uploads

${java.io.tmpdir}/inno_osmax_core_uploads

Установка и настройка фронтенда продукта

Установку фронтенда можно выполнить как на отдельном сервере, так и на сервере вместе с бэкендом продукта.

Фронтенд продукта включает два отдельных модуля:

  • inno-lcm-webadmin — «Кабинет администратора»;

  • inno-lcm-app-shop — «Магазин приложений».

Каждый модуль устанавливается отдельно с помощью одноименного rpm-пакета. Модули устанавливаются одинаково.

Установите пакеты inno-lcm-webadmin и inno-lcm-app-shop, выполнив команду:

sudo dnf install ./<имя пакета>

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

sudo dnf install ./inno-lcm-webadmin-1.6.0~465909.af37daaf-1.noarch.rpm
sudo dnf install ./inno-lcm-app-shop-1.6.0~465738.aeaf71cd-1.noarch.rpm

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

sudo dnf list | grep "<имя модуля>"

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

sudo dnf list | grep "inno-lcm-webadmin"
sudo dnf list | grep "inno-lcm-app-shop"

В случае успешной установки система вернет ответ:

inno-lcm-webadmin/1.7_x86-64,now 1.6.0 all [установлен]

В случае неуспешной установки проверьте логи системы (см. раздел «Рекомендации по сбору и предоставлению информации о проблеме/ошибке» документа «Руководство по эксплуатации»).

После установки пакетов файлы для веб-сервера будут помещены в каталоги:

  • /var/www/lcm-web-ui;

  • /var/www/lcm-app-shop-ui.

Для корректной работы модулей настройте веб-сервер. Для этого создайте необходимые конфигурационные файлы и переопределите в них значения параметров.

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

Ниже в качестве примера рассмотрена конфигурация веб-сервера для модуля inno-lcm-webadmin.

Конфигурация веб-сервера (на примере Nginx)

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

  1. Создайте конфигурационный файл, выполнив команду:

    sudo nano /etc/nginx/conf.d/lcm-web-ui.conf

    Пример файла:

    server {
        listen       80;
        listen       [::]:80;
        server_name  domain-of-your-lcm-web-ui.vpn.company.com;
        root         /var/www/lcm-web-ui;
        index        index.html;
    
        error_log    /var/log/nginx/error.log debug;
        access_log   /var/log/nginx/access.log;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location /api {
            set $backend_uri http://127.0.0.1:8081;
            rewrite ^\/api(\/.*)$ $1 break;
            proxy_pass $backend_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name domain-of-your-lcm-web-ui.vpn.company.com;
        root /var/www/lcm-web-ui;
        index index.html;
    
        ssl_certificate /etc/certs/MY_CRT;
        ssl_certificate_key /etc/certs/MY_KEY;
    
        error_log /var/log/nginx/error.log debug;
        access_log /var/log/nginx/access.log;
    
        location / {
            try_files $uri $uri/ /index.html;
        }
    
        location /api {
            set $backend_uri http://127.0.0.1:8081;
            rewrite ^/api(/.*)$ $1 break;
            proxy_pass $backend_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Где:

    • listen — настраивает прослушивание портов на сервере;

    • server_name  — доменное имя, которое будет обслуживаться сервером;

    • root — указывает директорию, в которой находятся статические файлы, отображаемые при запросе корневой директории;

    • index — задает стандартный файл, который будет отображаться при запросе корневой директории;

    • ssl_certificate — указывает SSL-сертификат для обеспечения безопасного соединения;

    • ssl_certificate_key — определяет путь к файлу приватного ключа SSL-сертификата;

    • error_log — указывает файл логов для логирования ошибок;

    • access_log — указывает файл логов для логирования ошибок доступа;

    • location / — указывает веб-серверу на поиск запрашиваемых файлов в директории root; и если файл будет не найден, указывает на файл index.html.

    • location /api —  настраивает проксирование запросов к API-серверу;

      При установке фронтенда на отдельный сервер, в параметре set $backend_uri укажите корректный адрес бэкенда.
      • proxy_pass — директива, перенаправляющая запросы к /api на указанный бэкенд;

      • proxy_set_header — директива, устанавливающая необходимую информацию в заголовках запроса.

  2. Для передачи данных по HTTP переопределите значения только в первом блоке server; для передачи по HTTPS — также переопределите значения во втором блоке.

    1. В первом блоке server в поле server_name укажите имя домена.

    2. В первом блоке server в поле location /api задайте адрес обращения к бэкенду.

    3. (Опционально) во втором блоке server в поле server_name укажите имя домена.

    4. (Опционально) во втором блоке server в поле location /api задайте адрес обращения к бэкенду.

    5. (Опционально) в поле ssl_certificate укажите SSL-сертификат для обеспечения безопасного соединения.

    6. (Опционально) в поле ssl_certificate_key задайте путь к файлу приватного ключа SSL-сертификата.

  3. Активируйте файл в конфигурации веб-сервера, создав для него символическую ссылку в каталоге /etc/nginx/sites-enabled/:

    ln -s /etc/nginx/sites-available/lcm-web-ui.conf /etc/nginx/sites-enabled/
  4. Перезапустите веб-сервер, выполнив команду:

    systemctl restart nginx.service
  5. Убедитесь, что веб-сервер успешно работает, выполнив команду:

    systemctl status nginx.service

    В случае успешного запуска система вернет ответ:

    ● nginx.service - A high performance web server and a reverse proxy server
       Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
       Active: active (running) since Fri 2024-02-09 16:21:31 MSK; 4s ago
         Docs: man:nginx(8)
      Process: 23739 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
      Process: 23740 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
     Main PID: 23741 (nginx)
        Tasks: 3 (limit: 4653)
       Memory: 2.2M
       CGroup: /system.slice/nginx.service
               ├─23741 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
               ├─23742 nginx: worker process
               └─23743 nginx: worker process
    
    фев 09 16:21:31 lr-441246-cm-1 systemd[1]: Starting A high performance web server and a reverse proxy server...
    фев 09 16:21:31 lr-441246-cm-1 systemd[1]: Started A high performance web server and a reverse proxy server.

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

    curl -I domain-of-your-lcm-web-ui.vpn.company.com
    HTTP/1.1 200 OK
    Server: nginx/1.22.1
    Date: Fri, 09 Feb 2024 13:32:44 GMT
    Content-Type: text/html
    Content-Length: 551
    Last-Modified: Tue, 06 Feb 2024 12:20:20 GMT
    Connection: keep-alive
    ETag: "65c22404-227"
    Accept-Ranges: bytes

Установка модуля «Удаленный доступ»

Руководство включает полное поэтапное описание процесса установки модуля «Удаленный доступ» на операционную систему Astra Linux Special Edition версии 1.7.3 и выше.

Подготовка к установке

На этапе подготовки к установке убедитесь, что:

  1. Для PostgreSQL:

    1. Создана техническая учетная запись пользователя.

    2. Техническому пользователю назначена схема, в которой будут созданы таблицы схемы Guacamole.

    3. Техническому пользователю выданы права на выполнение DDL-операций.

  2. Настроен DNS.

  3. Настроена служба каталогов.

  4. Создана техническая учетная запись пользователя службы каталогов.

  5. (Опционально) сгенерированы SSL-сертификаты и закрытый ключ.

Состав архива дистрибутива

В архив дистрибутива включены следующие deb-пакеты, необходимые для установки модуля «Удаленный доступ»:

  • inno-ira-tigervnc — пакет для работы «Удаленный доступ» на агентах (minions);

  • libinnovncserver-dev — библиотека, необходимая для компонента inno-ira-guacamole-server;

  • inno-ira-guacamole-server — сервер шлюза удаленного доступа;

  • inno-ira-guacamole-client — WEB-клиент шлюза удаленного доступа;

  • inno-ira-guacamole-schema — БД удаленного доступа.

Схема развертывания

На Рис. 1 представлена схема развертывания продукта.

deploy ira
Рис. 2. Схема развертывания

Установка

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

Скачивание и распаковка архива с компонентами модуля

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

  1. Скачайте архив с deb-пакетами требуемой версии и соответствующие файлы контрольных сумм из предоставленного хранилища любым доступным способом.

  2. (Опционально) убедитесь в целостности архива, сравнив его контрольные суммы с контрольными суммами в соответствующих файлах.

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

    shasum -a 512 -c inno-lcm-all-1.6.0.tar.gz inno-lcm-all-1.6.0.tar.gz.sha512
  3. Перенесите скачанный архив на машину, на которой будут запускаться компоненты, выполнив команду scp (secure copy):

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

    scp inno-lcm-all-1.6.0.tar.gz 10.6.32.218
  4. Создайте временный каталог для распаковки и распакуйте архив.

    Пример команд для создания каталога и распаковки архива:

    mkdir lcm-all
    tar xvf inno-lcm-all-1.6.0.tar.gz -C lcm-all

    Пример результата выполнения с содержимым архива:

    packages/libinnovncserver-dev_0.9.14_amd64.deb
    packages/inno-ira-guacamole-server_1.0.0_amd64.deb
    packages/inno-ira-guacamole-client_1.0.0_amd64.deb
    packages/inno-ira-guacamole-schema_1.0.0_amd64.deb

Установка и конфигурирование компонента inno-ira-guacamole-server

Установка выполняется на сервер шлюза удаленного доступа.

Шаги выполнения:

  1. Установите пакет libinnovncserver-dev, выполнив команду:

    sudo apt install ./libinnovncserver-dev_0.9.14_amd64.deb
  2. Установите пакет inno-ira-guacamole-server, выполнив команду:

    sudo apt install ./inno-ira-guacamole-server_1.0.0_amd64.deb

    После успешной установки будет создана и запущена systemd-служба guacd;

  3. Создайте каталог для сервера Guacamole, выполнив команду:

    mkdir -p /etc/guacamole/
  4. Создайте конфигурационный файл для сервера Guacamole, выполнив команду:

    touch /etc/guacamole/guacd.conf
  5. В файле /etc/guacamole/guacd.conf задайте значения параметров:

    Наименование Описание Значение по умолчанию Обязательный параметр

    Секция настройки сервера ([server])

    bind_host

    Хост компонента guacd

    localhost

    Да

    bind_port

    Порт компонента guacd

    4822

    Да

    Секция настройки daemon-сервера ([daemon])

    log_level

    Уровень логирования

    info

    Нет

    Секция настройки SSL-соединения ([ssl])

    server_certificate

    Путь до SSL-сертификата

    Нет

    server_key

    Путь до ключа SSL-сертификата

    Нет

    Пример файла:

    [server]
    bind_host = ira-server.domain.local
    bind_port = 4822
    
    [daemon]
    log_level = debug
    
    [ssl]
    server_certificate = /ssl/domain.pem
    server_key = /ssl/domain.key
  6. Перезапустите systemd-службу guacd, выполнив команду:

    sudo systemctl restart guacd

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

sudo systemctl status guacd

В случае успешного запуска система вернет ответ, где в поле Active будет указано значение active (running):

systemctl status guacd
● guacd.service - Guacamole Server
   Loaded: loaded (/usr/local/lib/systemd/system/guacd.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2024-05-30 09:00:29 MSK; 1s ago
     Docs: man:guacd(8)
 Main PID: 19060 (guacd)
    Tasks: 1 (limit: 4651)
   Memory: 10.1M
      CPU: 15ms
   CGroup: /system.slice/guacd.service
           └─19060 /usr/local/sbin/guacd -f

мая 30 09:00:29 ira-server systemd[1]: Started Guacamole Server.
мая 30 09:00:29 ira-server guacd[19060]: IRC: Guacamole proxy daemon (guacd) version 1.5.4 started
мая 30 09:00:29 ira-server guacd[19060]: IRC: Successfully bound AF_INET socket to host 127.0.0.1, port 4822
мая 30 09:00:29 ira-server guacd[19060]: IRC: Communication will require SSL/TLS.
мая 30 09:00:29 ira-server guacd[19060]: IRC: Using PEM keyfile /ssl/domain.key
мая 30 09:00:29 ira-server guacd[19060]: IRC: Using certificate file /ssl/domain.pem
мая 30 09:00:29 ira-server guacd[19060]: IRC: Listening on host 127.0.0.1, port 4822

При неуспешном запуске поле Active будет содержать иное значение. В этом случае проверьте логи системы (см. раздел «Рекомендации по сбору и предоставлению информации о проблеме/ошибке» документа «Руководство по эксплуатации»).

Установка и конфигурирование компонента inno-ira-guacamole-client

Установка выполняется на сервере шлюза удаленного доступа.

Шаги выполнения:

  1. Установите пакет inno-ira-guacamole-client, выполнив команду:

    sudo apt install ./inno-ira-guacamole-client_1.0.0_amd64.deb
  2. Создайте каталог для клиента Guacamole, выполнив команду:

    mkdir -p /etc/guacamole/
  3. Создайте конфигурационный файл для клиента Guacamole, выполнив команду:

    touch /etc/guacamole/guacamole.properties
  4. В файле guacamole.properties задайте значения параметров:

    Наименование Описание Значение по умолчанию Обязательный параметр

    Параметры сервера

    guacd-hostname

    Имя хоста guacd сервера

    localhost

    Нет

    guacd-port

    Порт guacd сервера

    4822

    Нет

    guacd-ssl

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

    false

    Нет

    Параметры подключения к БД PostgreSQL

    postgresql-hostname

    Имя хоста БД PostgreSQL

    Да

    postgresql-port

    Порт БД PostgreSQL

    5432

    Нет

    postgresql-database

    Имя БД PostgreSQL

    Да

    postgresql-username

    Имя пользователя БД PostgreSQL

    Да

    postgresql-password

    Пароль пользователя БД PostgreSQL

    Да

    Параметры подключения к БД PostgreSQL с использованием SSL

    postgresql-ssl-cert-file

    Файл, содержащий SSL-сертификат клиента, который будет использоваться при установлении соединения с сервером Postgres в формате PEM

    postgresql-ssl-key-file

    Файл, содержащий закрытый ключ клиента

    postgresql-ssl-root-cert-file

    Файл, содержащий корневой и промежуточный сертификаты

    postgresql-ssl-key-password

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

    postgresql-default-statement-timeout

    Время ожидания ответа от БД в секундах

    postgresql-socket-timeout

    Время ожидания выполнения операций чтения сокета

    postgresql-batch-size

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

    Параметры LDAP

    ldap-hostname

    Имя хоста LDAP-сервера

    Да

    ldap-port

    Имя порта LDAP-сервера

    389 или 636 (в зависимости от значения параметра ldap-encryption-method)

    Нет

    ldap-encryption-method

    Механизм шифрования LDAP-сервера. Возможные значения:

    • ssl — для взаимодействия с LDAP через SSL/TLS;

    • starttls — для STARTTLS;

    • none — не использовать шифрование

    none

    ldap-user-base-dn

    Базовый DN для всех пользователя Guacamole

    Да

    ldap-group-base-dn

    Базовый DN для все пользовательских групп

    Да

    ldap-username-attribute

    Атрибут, который содержит имя пользователя во всех объектах пользователей Guacamole в каталоге LDAP

    Да (sAMAccountName)

    ldap-group-name-attribute

    Атрибут, определяющие уникальные имена групп пользователей в каталоге LDAP.

    Да (sAMAccountName)

    ldap-member-attribute-type

    Атрибут, указывающий тип атрибута (указанного в парамтере ldap-member-attribute), который определяет членство пользователя в группе

    Да (dn)

    ldap-member-attribute

    Атрибут, содержащий участников всех групповых объектов в каталоге LDAP

    Да (member)

    ldap-group-search-filter

    Фильтр, который определяет условия поиска для получения всех записей группы из LDAP

    (objectClass=*)

    Да ((objectClass=group))

    ldap-user-search-filter

    Фильтр поиска, который определяет условия поиска для получения всех записей пользователя из LDAP

    Например, чтобы только члены группы CN=RCUsers,CN=Users,DC=windomain1,DC=com имели доступ к УД, задайте значение вида: (&(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=RCUsers,CN=Users,DC=windomain1,DC=com))

    (objectClass=*)

    Да

    ldap-search-bind-dn

    DN пользователя для подключения к LDAP-серверу в формате: CN=RCUser,CN=Users,DC=windomain1,DC=com

    Да

    ldap-search-bind-password

    Пароль пользователя для подключения к LDAP-серверу

    Да

    Пример файла:

    # guacd properties
    guacd-hostname: localhost
    guacd-port: 4822
    
    # PostgreSQL properties
    postgresql-hostname: localhost
    postgresql-database: guacamole_db
    postgresql-username: guacamole_db_user
    postgresql-password: password
    
    # LDAP properties
    ## Common
    ldap-hostname:          ira-server.domain.local
    ldap-encryption-method: ssl
    
    ## Base DN
    ldap-user-base-dn:  DC=domain,DC=local
    ldap-group-base-dn: DC=domain,DC=local
    
    ## Attributes
    ldap-username-attribute:    sAMAccountName
    ldap-group-name-attribute:  sAMAccountName
    
    ldap-member-attribute-type: dn
    ldap-member-attribute:      member
    
    ## Search
    ldap-user-search-filter: (&(objectClass=person)(memberOf:1.2.840.113556.1.4.1941:=CN=arm_admins,CN=Users,DC=domain,DC=local))
    ldap-group-search-filter: (objectClass=group)
    ldap-search-bind-dn:       CN=Administrator,CN=Users,DC=domain,DC=local
    ldap-search-bind-password: Password123
  5. (Опционально) для настройки шифрования в файле /opt/tomcat/conf/server.xml выполните настройки секций Connector.

    Пример:

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"/>
    <Connector port="8083" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="<ssl_certificate_key>"
                         certificateFile="<ssl_certificate>"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

    Где:

    • ssl_certificate_key — определяет путь к файлу приватного ключа SSL-сертификата;

    • ssl_certificate — указывает SSL-сертификат для обеспечения безопасного соединения.

  6. Перезапустите сервер Tomcat, выполнив команду:

    sudo systemctl restart tomcat9

Установка и конфигурирование компонента inno-ira-guacamole-schema

Установка выполняется на сервере, с которого будет осуществлена установка схемы Guacamole в БД PostgreSQL. На этом сервере должен быть установлен клиент psql.

Шаги выполнения:

  1. Установите пакет inno-ira-guacamole-schema, выполнив команду:

    sudo apt install ./inno-ira-guacamole-schema_1.0.0_amd64.deb
  2. Установите схему Guacamole, выполнив команду:

    cat /opt/irc/guacamole-schema/schema/*.sql | psql --host <guacamole_database_host>
    --port <guacamole_database_port> -dbname <guacamole_database_name>
    --username <guacamole_database_user> --password -f -

    + Где в параметрах необходимо указать технического пользователя и БД, созданных на этапе подготовки к установке:

    • <guacamole_database_host> — имя хоста БД;

    • <guacamole_database_port> — порт БД;

    • <guacamole_database_name> — имя БД;

    • <guacamole_database_user> — имя пользователя БД.

      При выполнении команды будет запрошен пароль пользователя БД.

  3. Введите пароль пользователя БД.

    Будет создана схема Guacamole и пользователь guacadmin c паролем guacadmin.

    После создания схемы Guacamole измените пароль пользователя guacadmin.

Установка на агенте (minion)

Для работы с агентами (minions) через модуль «Удаленный доступ» примените конфигурацию TigerVNC (см. раздел «Формула tigervnc-formula» документа «Руководство по эксплуатации»).

Глоссарий

Certificate Revocation List (CRL)

Список отозванных сертификатов. Список сертификатов, которые удостоверяющий центр (Certificate Authority — CA) пометил как отозванные. Используется для проверки действительности сертификата. CRL содержит информацию о сертификатах, которые больше не должны использоваться, например, если они были скомпрометированы или утеряны.

Cron-формат

Формат времени, используемый в системах планирования задач в операционных системах Unix и Linux. Этот формат представляет собой строку, которая содержит шесть или семь полей, разделенных пробелами или табуляцией. В каждом поле задано значение времени или даты, когда задача должна быть выполнена. Поля могут содержать любые разрешенные значения, а также различные комбинации разрешенных специальных символов для этого поля.

Deb-пакет (Debian package)

Формат упаковки программного обеспечения для операционной системы Debian и ее производных, таких как Ubuntu. Deb-пакет содержит программу или библиотеку, а также информацию о зависимостях и конфигурации. Он может быть установлен с помощью менеджера пакетов, например, apt-get или dpkg. Deb-пакеты облегчают установку и обновление программного обеспечения в системе, а также позволяют управлять зависимостями между пакетами.

PKCS#12

Один из стандартов семейства Public-Key Cryptography Standards (PKCS), опубликованных RSA Laboratories.

Privacy Enhanced Mail (PEM)

Формат кодирования данных, который используется для хранения и передачи сертификатов, закрытых ключей, а также других конфиденциальных данных в виде текста. Формат PEM был разработан для безопасной передачи электронной почты, но сейчас широко используется в SSL/TLS-сертификатах и других системах безопасности.

Role Based Access Control (RBAC)

Управление доступом на основе ролей.

Service Principal Name (SPN)

Уникальное имя для аутентификации службы в рамках протокола Kerberos.

Агент (в терминологии SaltStack: Minion)

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

Версия конфигурации

Сущность продукта, которая представляет собой отдельный файл в формате JSON. Файл загружается в модуль «Кабинет администратора» и позволяет изменять конфигурацию в соответствии с требованиями пользователя. В файле указывается идентификатор версии, мета-атрибуты версии и параметры формулы, доступные для переопределения.

Кабинет администратора

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

Коллекция устройств

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

Конфигурация

Сущность продукта, которая представляет собой отдельный файл в формате JSON, содержащий описание набора метаданных для формулы SaltStack. Файл загружается в модуль «Кабинет администратора», и, используя формулу, обеспечивает выполнение установки и настройки системы в соответствии с требованиями пользователя.

Магазин приложений

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

Сервер управления (в терминологии SaltStack: Master)

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

Формула

Сущность SaltStack, представляющая собой директорию с файлами состояний (файлы с расширением .sls) в формате YAML. Файлы состояний определяют поведение и конечное состояние системы, которого она должна достичь после применения формулы, и используются для установки, настройки и управления программным обеспечением, настройки сетевых параметров, создания пользователей и др. Виды формул:

  • готовые — загруженные на сервер готовые к использованию формулы с настройками по умолчанию; при необходимости могут быть переопределены пользователем;

  • пользовательские — готовые формулы, для корректной работы которых необходимо создать пользовательскую конфигурацию;

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

Сокращения

AD

Active Directory

CRL

Certificate Revocation List

RBAC

Role Based Access Control

SPN

Service Principal Name

ОС

Операционная система

ПО

Программное обеспечение