Настройка аутентификации пользователей через LDAP#
Данный раздел описывает настройку входа пользователей через внешнее LDAP-хранилище.
За работу LDAP-аутентификации отвечает сервис roox-sso. Параметры находятся в общих файлах настроек, которые могут читать разные сервисы ПУИД.
Примечание
После изменения LDAP-параметров необходимо перезапустить сервис roox-sso, чтобы новые значения были применены.
Общая схема настройки#
Для включения LDAP-аутентификации необходимо выполнить следующие действия:
Включить внешний способ аутентификации через LDAP.
Включить LDAP-репозиторий пользователей.
Указать параметры подключения к LDAP: адрес сервера, базовый DN, сервисную учетную запись и пароль.
Указать атрибут, по которому сервис
roox-ssoбудет искать пользователя в LDAP.Указать список LDAP-атрибутов, которые нужно получать при входе пользователя.
Настроить сопоставление полученных атрибутов с полями пользователя ПУИД.
При необходимости настроить правила назначения ролей и организаций.
Перезапустить сервис
roox-sso.
Минимальный набор включающих параметров:
com.rooxteam.uidm.ldap.externalAuthentication.enabled=true
com.rooxteam.uidm.ldapv3repository.enabled=true
Типовые операции администратора#
Настройка одного LDAP-каталога#
Пример ниже показывает настройку одного LDAP-каталога. В этом случае компонент <alias> в имени ключа можно не указывать.
com.rooxteam.uidm.ldap.externalAuthentication.enabled=true
com.rooxteam.uidm.ldapv3repository.enabled=true
com.rooxteam.uidm.ldap.repository.strategy=walkthrough
com.rooxteam.uidm.ldapv3repository.ldapUrl=ldap://ldap.domain.local:389
com.rooxteam.uidm.ldapv3repository.superuserId=uidm-admin
com.rooxteam.uidm.ldapv3repository.superuserPassword=<password>
com.rooxteam.uidm.ldapv3repository.baseDN=dc=domain,dc=local
com.rooxteam.uidm.ldapv3repository.namingAttribute=uid
com.rooxteam.uidm.ldapv3repository.profileAttributesToFetch=displayName,memberOf,mail,telephoneNumber,mobile,ipaUniqueID,userPrincipalName,street,givenName,sn
com.rooxteam.uidm.ldapv3repository.userSearchFilter=
com.rooxteam.uidm.ldapv3repository.attributes.use_as_login=userPrincipalName
com.rooxteam.uidm.ldapv3repository.attributes.map=login=uid,displayName=displayName,contactEmail=mail,contactPhone=mobile,uid=ipaUniqueID,roles=memberOf,organization_id=street,givenname=givenName,sn=sn
Значение superuserPassword необходимо хранить как секрет и не публиковать в открытых документах, журналах или заявках.
Выбор LDAP-каталога#
Если настроен один LDAP-каталог, компонент <alias> в имени ключа можно опустить. Следует использовать ключи вида:
com.rooxteam.uidm.ldapv3repository.<parameter>
Например:
propepropertiesrties
com.rooxteam.uidm.ldapv3repository.ldapUrl=ldap://ldap.domain.local:389
Если LDAP-каталогов несколько, необходимо настроить отдельный блок параметров для каждого алиаса:
com.rooxteam.uidm.ldapv3repository.<alias>.<parameter>
Например:
com.rooxteam.uidm.ldapv3repository.ldap.domain.local.ldapUrl=ldap://ldap.domain.local:389
Параметр com.rooxteam.uidm.ldap.repository.strategy определяет, как сервис roox-sso выбирает LDAP-каталог при входе пользователя.
Значение |
Как работает |
Когда использовать |
|---|---|---|
|
Сервис |
Подходит для большинства установок, особенно если LDAP-каталог один |
|
Сервис |
Следует использовать, если пользователи входят с указанием домена или префикса, и по нему нужно выбрать конкретный LDAP-каталог |
Для alias-based логин должен содержать алиас LDAP-каталога. На практике чаще всего используют формат user@domain.local, где domain.local соответствует алиасу LDAP-каталога.
Настройка поиска и проверки пользователя#
При входе пользователя сервис roox-sso выполняет поиск записи в LDAP от имени сервисной учетной записи superuserId.
Поиск выполняется:
внутри дерева
baseDN;по атрибуту
namingAttribute;с учетом дополнительного фильтра
userSearchFilter, если он задан.
После нахождения пользователя сервис roox-sso проверяет введенный пароль через LDAP. Если пользователь не найден, найдено несколько записей или пароль не принят LDAP-сервером, вход отклоняется.
Для корректной проверки состояния учетной записи необходимо в profileAttributesToFetch включить атрибуты, требуемые используемому сервису каталога. Например:
Каталог |
Рекомендуемые атрибуты |
|---|---|
Active Directory |
|
FreeIPA |
|
Общие пользовательские атрибуты |
|
Настройка сопоставления LDAP-атрибутов с пользователем ПУИД#
Сопоставление задается параметром:
com.rooxteam.uidm.ldapv3repository.attributes.map=<uidm_attr>=<ldap_attr>,<uidm_attr>=<ldap_attr>
Пример:
com.rooxteam.uidm.ldapv3repository.attributes.map=login=uid,displayName=displayName,contactEmail=mail,contactPhone=mobile,uid=ipaUniqueID,roles=memberOf,organization_id=street,givenname=givenName,sn=sn
В этом примере:
Поле ПУИД |
LDAP-атрибут |
Назначение |
|---|---|---|
|
|
Логин пользователя |
|
|
Отображаемое имя пользователя |
|
|
Адрес электронной почты |
|
|
Номер телефона |
|
|
Уникальный идентификатор пользователя |
|
|
Группы LDAP, из которых формируются роли |
|
|
Внешний идентификатор организации, если используется такая модель заполнения |
|
|
Имя пользователя |
|
|
Фамилия пользователя |
Если для поля roles используется LDAP-атрибут memberOf, в роли попадает имя группы из DN группы. Например, из cn=WebSSO-Ops,ou=Groups,dc=domain,dc=local будет использовано имя WebSSO-Ops.
Дополнительно можно указать роли и организацию, которые будут назначаться пользователям по умолчанию:
com.rooxteam.uidm.ldapv3repository.default_roles=guest
com.rooxteam.uidm.ldapv3repository.default_org_id=my-org-external-id
Настройка атрибута логина#
Параметр com.rooxteam.uidm.ldapv3repository.attributes.use_as_login задает LDAP-атрибут, значение которого используется как логин пользователя в ПУИД.
Пример:
com.rooxteam.uidm.ldapv3repository.attributes.use_as_login=userPrincipalName
Примечание
Необходимо удостовериться, что этот атрибут включен в список profileAttributesToFetch.
Настроить назначение ролей по группам LDAP#
Для прямого сопоставления LDAP-групп с ролями необходимо использовать параметр:
com.rooxteam.uidm.ldapv3repository.groups_to_roles_mapping=<ldap_group>=<uidm_role>,<ldap_group>=<uidm_role>
Пример:
com.rooxteam.uidm.ldapv3repository.groups_to_roles_mapping=rooxgroup1=rooxgroup1,rooxgroup_all=rooxgroup_all,arm_self_services=arm_self_services
Для назначения ролей внутри организаций следует использовать параметры вида:
com.rooxteam.uidm.ldapv3repository.groups_to_org_roles_mapping.<groupName>=<orgName>=<role1>;<role2>
Пример:
com.rooxteam.uidm.ldapv3repository.groups_to_org_roles_mapping.GROUP_EMPLOYEE=b2b=adminAllOperations
Настройка проверки состояния учетной записи#
Сервис roox-sso может проверять состояние учетной записи по LDAP-атрибутам. Для Active Directory доступны настройки флагов userAccountControl:
com.rooxteam.uidm.ldap.externalAuthentication.userAccountControl.attributesOn=NORMAL_ACCOUNT
com.rooxteam.uidm.ldap.externalAuthentication.userAccountControl.attributesOff=ACCOUNTDISABLE,LOCKOUT,PASSWORD_EXPIRED
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
|
|
Флаги, которые должны быть включены у пользователя |
|
|
|
Флаги, которые должны быть выключены у пользователя |
Если атрибут userAccountControl отсутствует в записи пользователя, проверка флагов Active Directory пропускается.
Настройка пула LDAP-соединений#
Для настройка пула LDAP-соединений необходимо выполнить следующие действия:
Определить, для какого LDAP-каталога нужно изменить поведение пула: единственный каталог без алиаса или каталог с конкретным
<alias>.Открыть файл
/usr/share/tomcat/ldap.properties.Изменить параметры пула из подраздела Пул LDAP-соединений.
Для повышения устойчивости после длительного простоя включить проверку простаивающих соединений:
com.rooxteam.uidm.ldapv3repository.pool2.test-while-idle=true
com.rooxteam.uidm.ldapv3repository.pool2.eviction-run-interval-millis=300000
Перезапустить сервис
roox-sso.Проверить вход пользователя из LDAP и отсутствие ошибок подключения к LDAP-серверу в журнале
/var/log/roox-sso/roox-sso.log.
Настройка смены пароля пользователя во внешнем LDAP#
Если сценарий смены или сброса пароля пользователя предполагает необходимость изменять пароль во внешнем LDAP-каталоге, необходимо настроить отдельный блок параметров:
com.rooxteam.sso.credentials.external-ldap-change.providedUrl=ldaps://dc.domain.local:636
com.rooxteam.sso.credentials.external-ldap-change.superuserId=CN=svc-sso,DC=domain,DC=local
com.rooxteam.sso.credentials.external-ldap-change.superuserPassword=<password>
com.rooxteam.sso.credentials.external-ldap-change.baseDn=DC=domain,DC=local
com.rooxteam.sso.credentials.external-ldap-change.uidmNamingAttribute=uid
com.rooxteam.sso.credentials.external-ldap-change.namingAttribute=sAMAccountName
com.rooxteam.sso.credentials.external-ldap-change.userSearchFilter=(objectClass=person)
com.rooxteam.sso.credentials.external-ldap-change.passwordAttribute=userPassword
com.rooxteam.sso.credentials.external-ldap-change.isUnicodePasswordAttribute=false
com.rooxteam.sso.credentials.external-ldap-change.ignoreErrors=true
com.rooxteam.sso.credentials.external-ldap-change.additionalProperties=
Для Active Directory обычно требуется использовать атрибут unicodePwd; в этом случае следует задать:
com.rooxteam.sso.credentials.external-ldap-change.passwordAttribute=unicodePwd
com.rooxteam.sso.credentials.external-ldap-change.isUnicodePasswordAttribute=true
Справочник путей к конфигурационным файлам#
Параметры работы с LDAP задаются в общем файле настроек:
Файл настройки на VM |
Назначение |
Ответственный сервис |
Действие после изменения |
|---|---|---|---|
|
Настройки LDAP-аутентификации, LDAP-репозитория пользователей, выбора LDAP-каталога, сопоставления атрибутов и проверки состояния учетной записи |
|
Перезапуск |
В этом же файле обычно размещаются:
включение LDAP-аутентификации;
параметры подключения к одному или нескольким LDAP-каталогам;
правила выбора LDAP-каталога;
список LDAP-атрибутов, которые нужно читать;
сопоставление LDAP-атрибутов с атрибутами пользователя ПУИД;
дополнительные проверки состояния учетной записи;
параметры пула LDAP-соединений.
Справочник параметров#
В колонке Значение по умолчанию указано значение, которое используется, если параметр не задан в конфигурации. Значение нет означает, что встроенного значения по умолчанию нет.
Включение LDAP-аутентификации#
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
|
|
Включает LDAP как внешний способ аутентификации пользователей |
|
|
|
Включает LDAP-репозиторий пользователей |
|
|
|
Способ выбора LDAP-каталога: |
Подключение к LDAP-каталогу#
Для единственного LDAP-каталога следует использовать ключи без алиаса:
com.rooxteam.uidm.ldapv3repository.<parameter>
Для нескольких LDAP-каталогов требуются ключи с алиасом:
com.rooxteam.uidm.ldapv3repository.<alias>.<parameter>
В таблице ниже показана форма с <alias>. Для одного LDAP-каталога необходимо удалить фрагмент <alias>. из имени ключа.
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
нет |
|
URL LDAP-сервера. Для защищенного соединения следует использовать
|
|
нет |
|
Сервисная учетная запись для поиска пользователей |
|
нет |
|
Пароль сервисной учетной записи |
|
нет |
|
Базовый DN, внутри которого выполняется поиск пользователей |
|
нет |
|
LDAP-атрибут, по которому ищется пользователь при входе |
|
пустой список |
|
LDAP-атрибуты, которые сервис |
|
нет |
|
Дополнительный LDAP-фильтр поиска. Может быть пустым |
|
нет |
|
Режим обработки LDAP referral-ссылок |
|
|
|
Таймаут подключения к LDAP-серверу в миллисекундах |
|
|
|
Таймаут чтения ответа LDAP-сервера в миллисекундах |
|
нет |
|
Дополнительные свойства LDAP-подключения в формате |
Пул LDAP-соединений#
Сервис roox-sso использует пул LDAP-соединений для операций поиска пользователя и чтения LDAP-атрибутов от имени сервисной учетной записи superuserId. Проверка пароля пользователя выполняется отдельным LDAP bind-соединением и не берется из этого пула.
Пул создается автоматически при старте roox-sso для каждого настроенного LDAP-каталога. Если LDAP-каталог один и алиас не указан, создается один пул для настроек без алиаса. Если настроено несколько LDAP-каталогов с алиасами, для каждого алиаса создается отдельный пул.
Параметры пула задаются общим префиксом:
com.rooxteam.uidm.ldapv3repository.pool2.
pool2 в этом префиксе — не имя пула и не алиас LDAP-каталога, а фиксированная часть имени параметров пула. Отдельное имя пула в настройках не задается. Принадлежность пула к LDAP-каталогу определяется настройкой самого LDAP-каталога: без алиаса для единственного каталога или по алиасу каталога при множественной настройке.
Для большинства установок достаточно включить test-while-idle и задать eviction-run-interval-millis, если LDAP-сервер или сетевое оборудование закрывает простаивающие соединения. В этом случае сервис roox-sso периодически проверяет простаивающие соединения в пуле и удаляет невалидные соединения.
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
|
|
Максимальное количество соединений в пуле. Значение |
|
|
|
Максимальное количество соединений для одного типа LDAP-контекста |
|
|
|
Максимальное количество простаивающих соединений, которые пул сохраняет |
|
|
|
Минимальное количество простаивающих соединений, которые пул старается поддерживать |
|
значение |
|
Время ожидания (в миллисекундах) свободного соединения, если пул исчерпан |
|
|
|
Если |
|
|
|
Включение проверки соединения при создании |
|
|
|
Включение проверки соединения перед выдачей из пула |
|
|
|
Включение проверки соединения при возврате в пул |
|
|
|
|
|
|
|
Интервал периодической проверки простаивающих соединений в
миллисекундах. Значение |
|
|
|
Количество простаивающих соединений, проверяемых за один запуск проверки |
|
|
|
Время (в миллисекундах), через которое простаивающее соединение может быть удалено из пула |
|
|
|
Мягкий порог удаления простаивающих соединений в миллисекундах |
|
|
|
Политика удаления простаивающих соединений из пула |
|
|
|
Включение справедливого порядка ожидания свободного соединения |
|
пустая строка |
пустая строка |
Базовый DN для проверки соединения |
|
|
|
LDAP-фильтр для проверки соединения |
Атрибуты и роли#
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
нет |
|
LDAP-атрибут, который используется как логин пользователя в ПУИД |
|
нет |
|
Сопоставление полей ПУИД и LDAP-атрибутов |
|
пустой список |
|
Роли, назначаемые всем пользователям из LDAP |
|
нет |
|
Организация, назначаемая всем пользователям из LDAP |
|
пустой список |
|
Сопоставление групп LDAP с ролями ПУИД |
|
пустой список |
|
Назначение ролей в рамках организации по LDAP-группе |
Смена пароля в LDAP#
Параметр |
Значение по умолчанию |
Пример |
Описание |
|---|---|---|---|
|
нет |
|
URL LDAP-сервера для операции смены пароля |
|
нет |
|
Сервисная учетная запись с правом изменения пароля |
|
нет |
|
Пароль сервисной учетной записи |
|
нет |
|
Базовый DN для поиска пользователя при смене пароля |
|
|
|
Атрибут пользователя ПУИД, значение которого используется для поиска в LDAP |
|
|
|
LDAP-атрибут, по которому ищется пользователь при смене пароля |
|
нет |
|
Дополнительный LDAP-фильтр поиска пользователя |
|
|
|
LDAP-атрибут пароля. Для Active Directory обычно
|
|
|
|
Включает формат записи пароля для |
|
|
|
Если |
|
пустой список |
|
Дополнительные свойства LDAP-подключения в формате
|
Проверка после изменения#
Для проверки внесенных изменений в файл /usr/share/tomcat/ldap.properties необходимо:
Перезапустить сервис
roox-sso.Выполнить вход от имени тестового пользователя из LDAP.
Удостовериться, что пользователь найден по ожидаемому атрибуту
namingAttribute.Удостовериться, что роли и организация назначены согласно
attributes.map,default_rolesи настройкам групп.Если вход отклонен, проверить пароль пользователя, доступность LDAP-сервера, корректность
baseDN,namingAttribute,userSearchFilterи права сервисной учетной записи.