Avanpost FAM/MFA+ : 4.3.6. Установка Avanpost FAM SelfService в ОС Linux

При наличии нескольких экземпляров Avanpost FAM возможно реализовать общий личный кабинет на основе опроса этих экземпляров. В данной статье рассмотрен вопрос настройки данного механизма посредством использования компонента SelfService.

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

  • В сети существуют несколько экземпляров Avanpost FAM для настройки, далее именуемые соответственно FAM1, FAM2 и т.д.
  • Выполнена синхронизация времени в ОС с сервером синхронизации времени

  • В ОС семейства Debian Linux должны быть установлены следующие программы:
    - openssl (программа управления сертификатами);
    - psql (CLI-клиент из состава PostgreSQL);
    - nginx (веб-сервер/прокси-сервер);
    - sudo (программа выполнения команд от имени суперпользователя).

Установка и настройка FAM SelfService

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

  1. Скачать и распаковать на рабочую машину актуальную версию Avanpost FAM SelfService из репозитория.
  2. Создать пользователя idp, используя следующую команду
    sudo useradd idp
  3. Создать папку сервиса, используя следующую команду
    sudo mkdir /opt/avanpost_selfservice
  4. Распаковать архив, используя следующую команду
    sudo tar -C /opt/avanpost_selfservice -xvzf /path_to_tar_file/avanpost_selfservice-1.0-4.linux.tar.gz
  5. Перейти в папку avanpost_selfservice, используя команду
    cd /opt/avanpost_selfservice/
  6. Скопировать стандартный конфигурационный файл FAM SelfService, используя команду
    cp config.selfservice.sample.toml config.selfservice.toml
  7. Скопировать конфигурационный файл NATS-сервера, используя команду
    cp config.selfservice.nats.sample.json config.selfservice.nats.json
  8. Предоставить пользователю idp полные права на осуществление действий с данными файлами, используя команду
    sudo chown -R idp:idp /opt/avanpost_selfservice
  9. Создать файл сервиса для дальнейшего автоматического запуска используя команду 
    sudo nano /etc/systemd/system/selfservice.service
    [Unit]
    Description=SelfService
    [Service]
    WorkingDirectory=/opt/avanpost_selfservice
    ExecStart=/opt/avanpost_selfservice/selfservice_linux_amd64
    Restart=always
    RestartSec=10
    SyslogIdentifier=selfservice
    User=idp
    Environment="SSO_CFG=/opt/avanpost_selfservice/config.selfservice.toml"
    [Install]
    WantedBy=multi-user.target
  10. Перезагрузить конфигурацию, используя команду
    sudo systemctl daemon-reload
  11.  При необходимости исправить параметры конфигурационного файла NATS-сервере config.selfservice.nats.json (подробнее о параметрах описано в приложении А), используя команду
    sudo nano /opt/avanpost_selfservice/config.selfservice.nats.json
  12. Скопировать закрытую часть сертификата (самоподписанный сертификат, создаваемый на стороне Avanpost FAM Server) для дальнейшего указания в параметре cert конфигурационного файла config.selfservice.toml.  
  13. Отредактировать конфигурационный файл SelfService config.selfservice.toml в соответствии с таблицей (более подробно о настройке параметров описано в приложении Б). 

    ПараметрЗначение
    certИмя и путь файла сертификата (в данном примере cert.pem).
    issuerСкопировать параметр из конфигурационной файла FAM Server.
    baseUrlБазовый URL-адрес, по которому переходит пользователь в личный кабинет (в данном примере https://self.avanpost.local/)
    authorityURL-адрес, по которому осуществляется аутентификация. Рекомендуется указать адрес из параметра baseUrl.
    clientIdИдентификатор OpenID-приложения из настроек Avanpost FAM Server.
    serverCfgFileИмя и путь файла конфигурации NATS-сервера.


  14. Запустить SelfService, используя команду
    sudo systemctl start selfservice
  15. Создать файл nginx по пути  /etc/nginx/conf.d/self.conf, указав в нем параметры проксирования аналогично Avanpost FAM Server.
    sudo nano /etc/nginx/conf.d/self.conf
     server {
        listen        80;
        server_name   self.avanpost.local;
        location / {
            proxy_pass       http://127.0.0.1:4009;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
     }
  16.  Добавить в раздел [lk] конфигурационного файла config.selfservice.toml следующее
    runAs = "nats"
    webauthnOrigin = "https://selfservice.local" #baseUrl SelfService
  17.  Добавить в раздел [lk.nats] конфигурационного файла config.selfservice.toml следующее
     connection = "nats://<IP Self Service>:4223"
     useTls = false
     #caCertPath = "cmd/selfservice/develop-cert-ca.pem"
     #clientCertPath = "cmd/selfservice/develop-cert-client.pem"
     #clientKeyPath = "cmd/selfservice/develop-key-client.pem"
     #username = "natsUser"
     #password = "password"
  18. Открыть административную консоль главного узла FAM1 и зайти во вкладку создания приложения, нажав кнопку "Добавить приложение" режима "Приложения".
  19. На этапе "Основные настройки" требуется ввести наименование и выбрать тип "OAuth/OpenID Connect" (более подробно процесс создания и управления приложениями описан в разделах Управление приложениями и Управление OIDC-приложениями).
  20. На этапе "Настройки интеграции" заполнить указанные поля в соответствии с таблицей (назначение прочих параметров описано в Шаг 2. Настройки интеграции для OIDC-приложений).
    ПараметрЗначение
    ID synonymremote-lk-client
    BaseUrlДолжен соответствовать параметру baseUrl из конфигурационного файла (по умолчанию, http://localhost:4009).
    Redirect URlsДолжен соответствовать параметру callbackUrl из конфигурационного файла (по умолчанию, http://localhost:4009/callback). 
    Backchannel-logout URIДолжен соответствовать параметру baseUrl из конфигурационного файла (по умолчанию, http://localhost:4009/logout). 
    Audienceremote-lk-client
    Allowed Grant TypesОбязательно включить grant type "Autorization code" (рекомендуется, но не обязательно включить "Refresh Token").
    Access Token typeВыбрать "JSON Web Token".
  21. На этапе "Настройки аутентификации" выбрать факторы аутентификации приложения, установив переключатели напротив тех или иных факторов (более подробно описано в Шаг 3. Настройки аутентификации для OIDC-приложения).
  22. На этапе "Завершение" следует сохранить приложение, делая его активным сразу после создания (более подробно в Шаг 4. Завершение для OIDC-приложения).
  23. Из консоли машины с узлом FAM1 запустить приложение FAM SelfService следующей командой:
    cd /opt/newlk/
    SSO_CFG=/opt/newlk/config.lk.toml ./lk_linux_amd64
  24. Проверить корректность настройки:
    1. Открыть в браузере адрес http://baseUrl, по которому выполняется запрос к Avanpost FAM.
    2. Удостовериться, что осуществляется вход в личный кабинет.

Обновление FAM SelfService

Обновление компонента Avanpost FAM SelfService следует проводить следующим образом:

  1. Скачать и распаковать на рабочую машину обновленную версию Avanpost FAM SelfService из репозитория.
  2. Остановить сервисы FAM SelfService, используя команду
    sudo systemctl stop selfservice.service
  3. Удалить папку /public, используя команду
    sudo rm -r /opt/avanpost_selfservice/public/
  4. Обновить компонент, используя скаченный файл, при помощи команды
    tar -C /opt/avanpost_selfservice -xvzf /path_to_tar_file/avanpost_selfservice-*.linux.tar.gz
  5. Запустить FAM SelfService, используя команду
    sudo systemctl start selfservice.service

Приложение A. Параметры конфигурационного файла NATS-сервера config.selfservice.nats.sample.json

ПараметрОписание
port

Порт для установки соединения клиента с NATS-сервером.

По умолчанию: 4222

addrIP-адрес NATS-сервера

В конфигурационном файле NATS-сервера допускается настройка дополнительных параметров согласно документации https://docs.nats.io/running-a-nats-service/configuration.

Приложение B. Параметры конфигурационного файла FAM Self Service config.selfservice.sample.json 

ПараметрОписание
cert

Путь к сертификату, используемому в продукте. Токены, верифицируемые Avanpost Self Service в процессе работы компонента подписываются данным сертификатом.

public_dirПуть к директории public, где располагаются публичные ресурсы (статические файлы и шаблоны), необходимые для установки и настройки компонента.
[templates]
templates

Путь к директории с шаблонами по умолчанию.

localization

Путь к директории с шаблонами локализации.   

saml_response

Путь к шаблону ответа SAML.

oauth2_form_post_templateПуть к шаблону формы ответа OAuth2 для метода POST.
oauth2_error_templateПуть к шаблону ошибки OAuth2.
[lk]
issuer

Идентификатор системы (автора токена) при выдаче токенов подтверждения личности. По умолчанию: devenv.avanpost.ru

baseUrlБазовый URL компонента. По умолчанию: http://localhost:4009
authority

Параметр, настраивающий способ авторизации пользователя:

  • Базовый URL Avanpost FAM Self Service (значение параметра: baseUrl данного конфигурационного файла) -  Avanpost Self Service выступает сервером авторизации и проксирует запросы авторизации в FAM Server через NATS-сервер.
  • Базовый URL Avanpost FAM Server (значение параметра: baseUrl конфигурационного файла Avanpost FAM Server) - Avanpost Self Service перенаправляет пользователя на Avanpost FAM Server, где пользователь авторизуется и затем перенаправляется обратно в Self Service

По умолчанию: http://localhost:4008

portПорт, на котором работает Avanpost FAM Self Service. По умолчанию: 4009
callbackUrlURL-адрес, на который возвращается пользователь после выполнения аутентификации посредством Avanpost FAM .
pathПуть к Avanpost FAM Self Service (если он поднят не в корневом каталоге хоста).
idleTimeoutInMinutes

Промежуток времени бездействия (в минутах), после которого пользователь будет отключен от личного кабинета (допускается не настраивать параметр, если он настроен для Avanpost FAM Service). По умолчанию: 50

dirПуть к директории, в которой содержится файлы для SPA-приложения.
clientIdИмя клиента, по которому происходит авторизация на FAM Server.
natsTimeoutSecПромежуток времени (в секундах) на ответ от NATS-сервера. 
[nats]
connection

Параметр, по которому можно указать адрес хоста NATS-сервера, для которого выпущен сертификат.

embedded

Параметр, позволяющий задать тип NATS-сервера:

  • true - используется встроенный NATS-сервер;
  • false - используется внешний NATS-сервер.

По умолчанию в конфигурационном файле: true

serverCfgFileПуть к конфигурационному файлу NATS-сервера.
useTls

Параметр, позволяющий использовать защищенное TLS-соединение:

  • true - TLS-соединение используется;
  • false - TLS-соединение используется.
caCertPathПуть к корневому сертификату удостоверяющего центра (УЦ).
certPathПуть к открытой части сертификата NATS-сервера, выпущенного через УЦ.
keyPathПуть к закрытой части (ключу) сертификата NATS-сервера, выпущенного через УЦ.
clientCertPath

Путь к открытой части сертификата клиента, выпущенного через УЦ.

clientKeyPath

Путь к закрытой части (ключу) сертификата клиента, выпущенного через УЦ.

usernameЛогин клиента, подключающегося к NATS-серверу.
passwordПароль клиента, подключающегося к NATS-серверу.
tokenТокен клиента, подключающегося к NATS-серверу (токен используется как замена логина и пароля).
[cluster]
enabled

Параметр, позволяющий организовать поднятые серверы с Avanpost FAM в кластер:

  • true - организовывать в кластер;
  • false - не организовывать в кластер.

Если включена организация нод в кластер, требуется указать идентификаторы главного и прочих узлов FAM.

По умолчанию в конфигурационном файле: true

[cluster.self]
idУникальный идентификатор главного узла FAM Server. 
[cluster.nodes]
idИдентификаторы прочих нод Avanpost FAM, который будут предоставлять информацию главному узлу. 

Приложение В. Пример конфигурационного файла 

 cert = 'cert.pem'
 public_dir = 'public/'
 
[templates]
 templates = 'public/templates/default'
 localization = 'public/templates/localization'
 saml_response = 'public/templates/saml-response.html'
 oauth2_form_post_template = 'public/templates/oauth2-formpost-response.html'
 oauth2_error_template = 'public/templates/oauth2-error-response.html'

[lk]
 issuer = 'fam.avanpost.local'
 baseUrl = 'http://self.avanpost.local'
 authority = 'http://self.avanpost.local'
 port = 4009
 host = '127.0.0.1'
 path = '/'
 idleTimeoutInMinutes = 50
 dir = './public/spa'
 clientId = 'remote-lk-client'
 natsTimeoutSec = 30
 
[nats]
 # omit or empty for embedded NATS
 connection = 'nats://0.0.0.0:4222'
 embedded = true
 serverCfgFile = 'config.selfservice.nats.json'
 #useTls = false
 #caCertPath = ''
 #certPath = ''
 #keyPath = ''
 #clientCertPath = ''
 #clientKeyPath = ''

 [cluster]
 enabled = false

 [cluster.self]
 id = 'some.1'

[[cluster.nodes]]
 id = 'other.2'

[[cluster.nodes]]
 id = 'another.3'
                                   


Обсуждение