Установка FAM LDAP Proxy в ОС Linux из tar.gz-архива


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

Компонент Avanpost FAM LDAP Proxy позволяет обеспечить решение задачи двухфакторной аутентификации для унаследованных приложений с поддержкой аутентификации по паролю (LDAP BIND) через LDAP-каталог (Microsoft Active Directory, FreeIPA и т.д.). Данная инструкция описывает порядок установки и настройки компонента Avanpost FAM LDAP Proxy в ОС Linux из tar.gz-архива.

Сценарий аутентификации при помощи компонента LDAP Proxy осуществляется следующим образом:

  • Пользователь проходит аутентификацию путём ввода логина и пароля в интерфейс аутентификации целевого приложения;
  • Пользователю проходит аутентификацию по второй фактору через один из выбранных администратором методов (push-уведомление в Avanpost Authenticator или push-уведомление в Telegram);
  • После успешной проверки второго фактора осуществляется проверка логина и пароля в LDAP-каталоге, подключенном к компоненту LDAP Proxy;
  • После успешной проверки пароля в LDAP-каталоге ответ возвращается целевому приложению, завершая процесс аутентификации.

До выполнения шагов, указанных в инструкции, требуется обеспечить:

  • Наличие и доступность gRPC-порта (по умолчанию TCP 9007) развернутого компонента Avanpost FAM Server;
  • Наличие и доступность LDAP-порта каталога/домена (по умолчанию TCP 389 для LDAP и TCP 636 для LDAPS), с которым будет взаимодействовать компонент Avanpost FAM LDAP Proxy;
  • Наличие в ОС программы sudo (программа выполнения команд от имени суперпользователя);
  • Корректную настройку метода аутентификации по запросам/push-запросам в мобильном приложении Avanpost Authenticator (настройка выполняется согласно инструкции Настройка метода Avanpost Authenticator) и/или метода аутентификации по запросам в мессенджер Telegram (настройка выполняется согласно инструкции Настройка метода Telegram).

Порядок установки

Установка компонента осуществляется последовательно в три этапа:

  1. Развертывание файлов дистрибутива из tar.gz-архива.
  2. Регистрация службы в systemd.
  3. Создание приложения на стороне Avanpost FAM Server.

Развёртывание файлов дистрибутива из архива

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

  1. Скачать актуальную версию компонента Avanpost FAM LDAP Proxy
  2. Создать служебного пользователя ОС idp (параметр -m необходим для создания домашней директории) при помощи команд:
    sudo useradd -m idp
    sudo passwd idp
    
  3. Ввести пароль и подтвердить его (если введенный пароль окажется слишком коротким и/или простым, будет выдано соответствующее оповещение, после которого нужно повторить ввод пароля, соблюдая рекомендации).
  4. Создать директорию /opt/ldapproxy, использую команду:
    sudo mkdir /opt/ldapproxy
  5. Присвоить права на директорию пользователю idp, использую команду:
    sudo chown -R idp:idp /opt/ldapproxy
  6. Переключиться на пользователя idp и перейти в директорию opt/ldapproxy, используя команды:
    sudo su idp
    cd /opt/ldapproxy
  7. В зависимости от расположения файла с архивом дистрибутива FAM LDAP Proxy скопировать его из исходной директории в целевую директорию opt/ldapproxy (заменить в нижеприведенной команде /source-path на путь к архиву, а Avanpost.*.tar.gz на корректное имя скачанного архива):
    cp /source-path/Avanpost.*.tar.gz -t /opt/ldapproxy
  8. Распаковать файлы дистрибутива из архива, находясь в той же директории (в нижеприведенной команде заменить Avanpost.*.tar.gz на корректное имя архива):
    tar -xvzf Avanpost.*.tar.gz
  9. После получения сообщения об успешной распаковке, удалить архив дистрибутива (в нижеприведенной команде заменить Avanpost.*.tar.gz на корректное имя архива):
    rm Avanpost.*.tar.gz

Регистрация службы в systemd 

Для корректного запуска, контроля и управления компонентом FAM LDAP Proxy требуется зарегистрировать его в системе инициализации и управления службами systemd:

  1. Создать конфигурационный файл сервиса на основе примера в приложении Б (в данном примере используется текстовый редактор vi, однако допускается использовать любой текстовый редактор, доступный в системе), используя команду.
    sudo vi /etc/systemd/system/ldapproxy.service

    Примечание

    Перечень команд в текстовом редакторе vi:

    • :i  — перейти в режим ввода из командного режима в текстовом редакторе.
    • :w  — сохранить файл.

    • :q  — выйти из редактора (с сохранением).

    • :q! — выйти из редактора без сохранения.

    • :wq — сохранить файл и выйти.

    Выход из режима ввода в командный режим осуществляется клавишей Esc.

  2. Перезагрузить конфигурационные файлы юнитов systemd при помощи команды:
    sudo systemctl daemon-reload
  3. Включить автозапуск службы LDAP Proxy при помощи команды: 
    sudo systemctl enable ldapproxy
  4. Запустить службу LDAP Proxy при помощи команды:  
    sudo systemctl start ldapproxy

Настройка на стороне административной консоли Avanpost FAM Server

Настройка компонента на стороне административной консоли Avanpost FAM проводится следующим образом:

  1. Открыть административную консоль Avanpost FAM Server и зайти во вкладку создания приложения, нажав кнопку "Добавить приложение" режима "Приложения".
  2. На этапе "Основные настройки" требуется ввести наименование и выбрать тип LDAP Proxy (более подробно процесс создания и управления приложениями описан в разделах Управление приложениями и Управление LDAP Proxy-приложениями).
  3. На этапе "Настройки аутентификации" выбрать факторы аутентификации приложения, установив переключатели напротив тех или иных факторов (более подробно описано в Шаг.2 Настройки аутентификации для LDAP Proxy-приложений). При этом необходимо обязательно включить использование фактора Password на первом шаге аутентификации. 
  4. На этапе "Завершение" следует сохранить приложение, делая его активным сразу после создания (более подробно описано в Шаг 3. Завершение для LDAP Proxy-приложений).
  5. Создать группу (если таковая отсутствует), пользователи которой будет аутентифицироваться с использованием компонента. Для этого необходимо нажать кнопку "Добавить группу" в режиме "Группы" и в открывшейся вкладке ввести запрашиваемые параметры (более подробно в разделе Добавление новых групп).
  6. Добавить в группу пользователей, которые будут аутентифицироваться в настроенных приложениях (более подробно о настройке интеграции с внешними LDAP-источниками пользователей описано в разделе Управление LDAP-источниками).
  7. Предоставить группе доступ к созданному приложению: в профиле группы зайти во вкладку "Приложения", найти созданное LDAP Proxy-приложение и перевести переключать напротив него в положение  (более подробно функционале описан в Управление группами). 

Настройка целевой системы (на примере "Континент АП")

Если компонент FAM LDAP Proxy запущен на другом хосте, отличном от контроллера домена, в целевой системе необходимо изменить порт и IP-адрес на значения, указанные в параметре "listen" конфигурационного файла (Рисунок).

Местоположение настройки IP-адреса и порта зависит от конкретной целевой системы

При настройке для FreeIPA следует использовать DN Bind в качестве параметра аутентификации.

Приложение A. Спецификация конфигурационного файла config.toml

Конфигурационный файл доступен в архиве с FAM LDAP Proxy. Подробное описание параметров приведено в таблице.

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

[server]
listen = "172.24.38.14:12636"
listen_enabled = true
start_tls_enabled = true
debug = true
retry_count = 3

[log]
level = "debug"
output = ["stdout"]

[backend]
endpoint = "hq-dc02.rugrid.ru:389"
start_tls_enabled = true

[auth]
endpoint = "127.0.0.1:9007"
app_id = "Continent"
dn_search_attribute = "dn"
upn_search_attribute = "userPrincipalName"
empty_domain_override = "rugrid"
skip_service_accounts = ["HQ_svc_LDAP_AUTH_FAM@rugrid.ru"]
request_timeout = "10s"
tls_enabled = true
tls_config = "fam"

#[tls.default]
#key_file=""
#cert_file=""
#insecure_skip_verify=true
#server_name_override=""

[tls.backend]
key_file="develop-key-client.pem"
cert_file="develop-cert-client.pem"
#client_session_cache_enabled = true
#insecure_skip_verify=true
#server_name_override=""

[tls.fam]
key_file="/opt/ldapproxy-rugrid/ssl/key.pem"
cert_file="/opt/ldapproxy-rugrid/ssl/cert.pem"
insecure_skip_verify=true

[profile]
enabled = true
listen = ":6060"
dump_enabled = true
dump_interval = "30s"
dump_output = "./profile_data"

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

ПараметрОписаниеПример устанавливаемых значений

[server]

listen

Задает IP-адрес сетевого адаптера, на котором прослушиваются входящие запросы от целевых систем, использующих LDAP.

"10.10.181.97:389"
listen_enabledНастройка прослушивания порта (выключение/выключение) из параметра "listen".true/false
listen_tls

Порт для SSL/TLS-шифрованного прослушивания.

":636"
listen_tls_enabled

Включение прослушивания порта из параметра "listen_tls".

true/false
tls_config

Идентификатор конфигурации TLS для использования определенных в ней настроек (указано в последней секции "[tls.default]").

"default"

shutdown_timeout

Определяет время, в течение которого сервер должен завершить все текущие запросы перед принудительной остановкой.

"30s"
[log]
level

Уровень логирования (debug, info, error и др.).

"debug"
output

Места вывода логов (stdout, файл).

["stdout", "log.txt"]

[backend]

endpointАдрес контроллера домена.
"10.10.181.97:389"
tls_enabledВключение/отключение TLS-шифрования.true/false
tls_configКлюч конфигурации TLS для использования определенных в ней настроек: указывает как настройки TLS будут применены (например, при значении tls_config = "default" будут применены настройки TLS из секции [tls.default]).

[auth]

endpointЗадает адрес сервера FAM.
"10.10.181.96:9007"
app_id

Название LDAP Proxy-приложения. Должно совпадать с наименование приложения, созданного на этапе настройки в административной консоли Avanpost FAM Server.

"LDAP"
dn_search_attribute

Указывает, какой атрибут в LDAP-запросе будет использоваться для поиска пользовательской информации по DN.

DN – уникальное имя, которое идентифицирует узел в дереве домена Active Directory (AD).

"dn"
upn_search_attribute

Указывает, какой атрибут в LDAP-запросе будет использоваться для поиска пользовательской информации по UPN.

UPN –  уникальное имя пользователя в AD, которое представляет собой комбинацию логина пользователя и домена.

"userPrincipalName"
empty_domain_override

Переопределение домена по умолчанию.

"avt"
skip_service_accounts

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

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

["admin@doska.local"]
allow_anonymous

Разрешение анонимной авторизации.

true/false
disabled

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

В этом случае (true) компонент LDAP Proxy не будет выполнять процесс аутентификации для запросов клиентов, и сервер LDAP будет обрабатывать запросы без использования LDAP Proxy.

true/false
request_timeout

Таймаут запроса к серверу FAM.

"30s"
tls_enabled

Включение SSL/TLS для подключения к серверу FAM.

true/false
tls_config

Ключ конфигурации TLS для использования определенных в ней настроек: указывает как настройки TLS будут применены (например, при значении tls_config = "default" будут применены настройки TLS из секции [tls.default]).

"default"
[tls.default]
key_file

Путь к файлу с закрытым ключом.


cert_file

Путь к файлу с сертификатом.


insecure_skip_verify

Отключение проверки подлинности сервера (при использовании самоподписанного сертификата необходимо установить значение параметра true).

true/false
server_name_override

Замена имени сервера при проверке подлинности.


[tls.backend]

key_file

Путь к файлу с закрытым ключом.


cert_file

Путь к файлу с сертификатом.


client_session_cache_enabled

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

true/false
insecure_skip_verify

Отключение проверки подлинности сервера (при использовании самоподписанного сертификата необходимо установить значение параметра true).

true/false
server_name_override

Замена имени сервера при проверке подлинности.


[tls.fam]

key_file

Путь к файлу с закрытым ключом.


cert_file

Путь к файлу с сертификатом.


insecure_skip_verify

Отключение проверки подлинности сервера (при использовании самоподписанного сертификата необходимо установить значение параметра true).

true/false
server_name_override

Замена имени сервера при проверке подлинности.


[profile]

enabled

Включение профилирования FAM (с возможностью ручной выгрузки профиля, если dump_enabled = false).

true/false
listen

Порт для прослушивания профиля.

":6060"
dump_enabled 

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

true/false
dump_interval

Временной интервал, по прошествии которого происходит автоматическое сохранение профиля. 

"40s"
dump_output

Имя и путь к файлу, в котором будут сохраняться профили. 

"./profile_data"


Приложение Б. Спецификация конфигурационного файла системы управления службами

Конфигурационный файл настраивается при регистрации Avanpost FAM LDAP Proxy в системе управления службами Linux-системы systemd.

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

[Unit]
Description=LDAPPROXY

[Service]
WorkingDirectory=/opt/ldapproxy
ExecStart=/opt/ldapproxy/ldap-proxy_linux_amd64
Restart=always
RestartSec=10
SyslogIdentifier=ldap_proxy
User=idp

[Install]
WantedBy=multi-user.target

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

ПараметрОписание
[Unit]
Description
Наименование службы, используемое для идентификации и маркировки службы.
[Service]
WorkingDirectory
Путь к директории, в которой будет выполняться программа.
ExecStart
Путь к исполняемому файлу, запускаемому в качестве службы.
Restart

Поведение системы при завершении работы службы:

  • no — Служба не перезапускается автоматически при завершении процесса;
  • on-failure — Служба перезапускается только в случае сбоя;
  • always — Служба перезапускается всегда, независимо от причины завершения процесса (рекомендуемое значение при настройке FAM LDAP Proxy);
  • on-abort — Служба перезапускается, если она была остановлена с помощью сигнала SIGABRT (сигнал аварийного завершения с выполнением дампа памяти);
  • on-successСлужба перезапускается, если она завершилась успешно;
  • on-watchdogИспользуется в сочетании с watchdog-юнитами для перезапуска службы при срабатывании сторожевого таймера.
RestartSec
Интервал в секундах между перезапусками службы.
SyslogIdentifier
Идентификатор сообщений службы в системном журнале.
User
Пользователь, от имени которого выполняется служба.
[Install]
WantedBy
Цель (target), для которой используется данный юнит при его активации (multi-user.target —  многопользовательский режим без графического интерфейса).

Приложение В. Экспорт сертификата LDAPS из FreeIPA

Перед экспортом сертификатов следует убедиться, что выполнены условия:

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

При использовании FreeIPA необходимости следующим образом:

  1. Найти сертификат LDAPS в хранилище сертификатов. Чтобы найти хранилище сертификатов допускается использовать команду (заменить YOUR_REALM_NAME на фактическое имя домена):
     certutil -L -d /etc/dirsrv/slapd-YOUR_REALM_NAME
  2. Экспортировать сертификат в формат .pem при помощи команды (в данной команде сертификат ldapserver-cert экспортируется в ldapserver-cert.pem):
    certutil -L -d /etc/dirsrv/slapd-YOUR_REALM_NAME -n "ldapserver-cert" -a > ldapserver-cert.pem
  3. Настроить LDAP клиент, используя экспортированный сертификат.


Обсуждение