На сервере должен быть установлен модуль PHP для LDAP. Он добавлен в автоустановку, но если у вы увидите ошибку его отсутсвия — установите на сервер командой:
apt install php8.3-ldap
Для подключения Totum к вашему серверу LDAP заполняем таблицу ttm__ldap_settings
:
h_host
— хост ldap-сервера
h_port
— порт ldap-сервера. Обычно 389
.
Если в вашей конфигурации внутренней сети несколько доменов и они находятся на разных хостах, то эти параметры передаются в массиве в h_domains_settings
(см.дальше) к конкретному домену. Если параметр передан в h_domains_settings
, то он будет использован оттуда. Если нет — из общих настроек:
h_host
-› host
h_port
-› port
h_version
-› version
h_ssl
-› ssl
h_cert_file
-› cert_file
h_bind_format
-› bind_format
[at|dn]
h_login_param
-› login_param
h_fio_param
-› fio_param
h_email_type
-› email_type
[bind|param]
h_email_param
-› email_param
h_get_groups
-› get_groups
h_group_param
-› group_param
h_version
— если поле не заполнено то используется {"LDAP_OPT_PROTOCOL_VERSION":"3"}
, но вы можете задать кастомные настройки параметров PHP для подключения в формате ключ-значение.
h_ssl
— поставьте галочку, если нужно проверять SSL-сертификат сервера LDAP.
h_cert_file
— загрузите два файла .key
и .crt
сертификата, если сервер LDAP использует сертификат выпущенный не общедоступным центром сертификации.
h_ldap_on
— включите, после того, как настроите все параметры.
Важно! Не включайте до того как проверите работоспособность подключения.
h_domains_settings
— настройки доменов (одного или нескольких)
Можно заполнить примером по умолчанию по правой кнопке.
В верхнем ключе указывается домен (полностью с точками):
DC=totum,DC=local
— надо указать как totum.local
user
— логин пользователя, имеющего доступ к поиску в этом домене.
pass
— пароль пользователя доступа.
Если сервер поддерживает анонимные запросы — то
user
иpass
могут отсутствовать. Именно отсутствовать, а не быть с пустыми значениями!
basedn
— базовый DN
в котором будет осуществлена фильтрация. Если не знаете, что это такое, то установите DN
указанного домена.
Для
AD
нельзя просто так указатьDN
равный домену. Должен быть задан либо более конкретныйOU
в котором будет осуществлен поиск, либо передан параметр"LDAP_OPT_REFERRALS": "0",
в полеh_versions
. Подробнее здесь.
filter
— фильтр поиска, на основе которого будут выбраны пользователи с сервера LDAP:
// пример для сервера AD
(&(objectCategory=Person)(memberOf=CN=totum,OU=AccessGroup,DC=totum,DC=local)(!(useraccountcontrol:1.2.840.113556.1.4.803:=2)))
// пример для unix
(uid=*)
Документация по фильтрам поиска в AD: https://social.technet.microsoft.com/...
filter_single
— фильтр поиска, по которому будет осуществлятся поиск отдельного пользователя по его логину:
// для AD
(&(objectCategory=Person)({USER_LOGIN_PARAM}={USER_LOGIN}))
// для unix
({USER_LOGIN_PARAM}={USER_LOGIN})
Используется две замены значения:
{USER_LOGIN_PARAM}
— будет взят из h_login_param
.
{USER_LOGIN}
— будет взят логин пользователя.
h_bind_format
— формат бинда пользователя на сервере LDAP:
@ type
— для серверов AD
dn type
— для Linux-серверов (в этом случае в h_domains_settings
— domain
— user]
должен быть указан dn
пользователя доступа)
Для
DN
-типа авторизации недоступны режимы создания пользователей «Загружать при первом бинде» вh_user_processing_type
. Только предварительная загрузка!
h_domain_selector
— вид переключателя доменов на странице авторизации (подробнее про последовательность авторизации смотрите дальше):
Скрыт
Totum/LDAP
Totum/Список доменов
h_login_param
— какой параметр является логином на вашем сервере паролей.
Стандартное значение для AD — sAMAccountName
можно заполнить по правой кнопке.
Для Linux-систем скорее всего будет dn
.
h_fio_param
— что записывать в FIO
в таблице пользователей Totum. Можно изменить непосредственнов Totum. Он будет обновлен из Ldap
только в том случае, если этот параметр изменится в Ldap
.
Тип email
для записи в таблицу пользователей Totum:
From bind: login@domain.zone
— email будет сформирован из логина и домена.
From param
— email будет взят из параметра с сервера LDAP указанного в h_email_param
.
В обоих случаях можно изменить email
непосредственно в Totum. Он будет обновлен из Ldap
только в том случае, если он изменится в Ldap
.
h_show_result
— проверяет подключение с введенными значениями. По правой кнопке можно получить данные от Ldap-сервера с учетом параметров поиска Групп.
h_user_processing_type
— определяет в какой момент будут создаваться пользователя в totum:
Загружать при первом бинде — пользователи не будут создаваться в тотум предварительно, только в момент успешного бинда.
Загружать при первом бинде при соответствии ролей — пользователь будет авторизован и создан в totum только при успешном бинде и наличии соответствий ролей.
Все найденные пользователи — пользователи будут загружены и созданы в Totum при нажатии на h_import_users
независимо от соответствия ролей. При отсутствии соответствия роли у такого пользователя будут пустыми.
Только с совпадающими ролями — пользователи будут загружены и созданы в Totum при нажатии на h_import_users
только, если у них есть соответствующие роли.
h_get_groups
— настройки получения групп. Для каждого пользователя будут выполнены дополнительные запросы c подстановкой {USER_DN}
и результат помещен в указанный ключ (для AD можно заполнить по правой кнопке):
Пустое
— не загружать группы.
получить прямое вхождение в группы:
groups: (&(objectCategory=group)(member={USER_DN}))
all_groups: (&(objectCategory=group)(member:1.2.840.113556.1.4.1941:={USER_DN}))
h_group_param
— параметр, который будет запрошен при выполнении h_get_groups
и по которому потом будет происходить матчинг групп. Для AD обычно используется CN
.
h_import_users
— импортирует пользователей (добавляет и обновляет) из Ldap в Totum в соответсвии с настройками.
Особенности создания пользователя в Totum
Логин Тотум для ldap-пользователей — пустой.
В поле ttm__auth_type устанавливается значение ldap.
Логин в ldap в формате loginParam@domain.zone — записываем в отдельное после ttm__extparams (тип данные) + туда же записываем DN и загружаемые параметры + назначенные по правилам соответствия роли.
h_update_one_user
— добавляет и обновляет одного пользователя.
h_generate_cron
— создает задание крона в таблице Кроны, нажимающее по расписанию на кнопку h_import_users
.
В comparison_parameters
набираются параметры, а в roles_in_totum
— соответствующие им роли в Totum.
Правила:
Результаты по каждой строке будут сложены. Если параметры пользователя подходят под несколько строк, то он получит сумму ролей.
В comparison_parameters
:
В ключе указывается параметр по которому идет сравнение.
Если параметр является строкой, то сравнения будет идти по полному значению.
Если параметр является списком, то сравнение будет идти по отдельным элементам, разделенным в ответе Ldap
запятыми.
Для параметров групп сравнение всегда идет по отдельному элементу, даже если указать его как строковое значение для всего параметра.
Обработка всех условий идет по принципу И
(должны присутствовать все указанные параметры).
Ключи нерегистрочувствительны.
Значения регистрочуствительны!
Примеры:
Пользователь dn
+ роль Создатель
:
dn=cn=polunin,ou=Totum,dc=totum,dc=online
{
"dn": "cn=polunin,ou=Totum,dc=totum,dc=online"
}
Входит в домен totum.online
и прямое вхождение в группу Totum
:
{
"dn": [
"dc=totum",
"dc=online"
],
"groups": "Totum"
}
Прямое вхождение в группу totum
и managers
:
{
"groups": [
"Totum",
"Boss" ]
}
Прямое вхождение в группу managers
и косвенное в totum
:
{
"groups_all": "totum",
"groups": "managers"
}
Если включен Ldap
и если есть @
во введенном значении то проверяем по email
.
Если этот email
относится к пользователю Ldap
, то дальше авторизация отправляется биндится на ldap-сервер.
Если email не найден то ищем в ttm__extparams
по логин + домен.
Если селектор в состоянии показа, и домен после собаки совпадает с одним из доменов — то селектор переключится и запомнится для следующей авторизации в браузере.
Если указан только логин, то мы смотрим выбранный в селекторе домен и ищем еще раз в login
или в ttm__extparams
.
Если селектор в статусе Скрыт и указан только логин то сначала ищем в логинах, и если не нашли и у нас один домен в списке, то подставляем этот домен и ищем в ttm__extparams
.
Login
(те пользователи Totum) в этом случае имеют приоритет.
Если несколько доменов в списке, то говорим, что не нашли и дальше не идем.
Если мы не нашли пользователя в Totum, то мы из под пользователя доступа поищем его в Ldap
.
Если не нашли и в Ldap
то «Пользователь не найден».
Если нашли, мы его создаем и пытаемся его забиндить.
Если ролей соответсвия нет и настройка стоит «Только с соответсвующими ролями» — «Пользователь не имеет доступа к Тотум»
Если не проходит бинд то — «Авторизация неуспешна»
Эта инструкция взята из документации Google.
Использование Stunnel
в качестве прокси-сервера.
Если в клиенте не предусмотрен способ аутентификации в LDAP с помощью сертификата клиента (или еще по каким нестандартным причинам не проходит защищенное подключение к вашему серверу LDAP
), используйте сервис Stunnel
в качестве прокси-сервера.
Для этого необходимо настроить в Stunnel
предоставление сертификата клиента серверу LDAP
, а в клиенте — подключение к Stunnel
. Желательно запускать Stunnel
на том же сервере, что и ваше приложение, и выполнять прослушивание локально (чтобы каталог LDAP
не был доступен за пределами этого сервера).
Установите Stunnel
:
apt-get install stunnel4
Создайте файл конфигурации /etc/stunnel/google-ldap.conf
со следующим содержимым (в приведенном ниже примере ldap-client.crt
– это файл сертификата, а ldap-client.key
– файл ключа, это приммер подключения к Google AD):
[ldap]
client = yes
accept = 127.0.0.1:1636
connect = ldap.google.com:636
cert = ldap-client.crt
key = ldap-client.key
Чтобы включить Stunnel
, откройте файл /etc/default/stunnel4
и задайте параметр ENABLED=1
.
Перезапустите Stunnel
:
service stunnel restart
Настройте приложение так, чтобы оно указывало на ldap://127.0.0.1:1636
.
Если вы также изменили строку accept
в файле конфигурации, то можете заменить 1636
номером любого другого неиспользуемого порта. Поскольку обмен данными между клиентом и сервисом Stunnel
происходит локально, учетные данные для LDAP
хранятся как обычный текст (параметр StartTLS/SSL/TLS
отключен).