System AdministratorАутентификация LDAP

Author: System Administrator Displayed: 9810
Created: 16/10/2015 Updated: 02/08/2020
Version: 28
Tags: LDAP
MoreLess

Как настроить аутентификацию LDAP

Обзор
Объявление режима аутентификации LDAP
Создание пользователя на лету
Групповой вход в систему LDAP
Поиск неисправностей

 

Обзор

LDAP (облегченный протокол доступа к каталогам) - это программный протокол, позволяющий любому человеку находить организации, отдельных лиц и другие ресурсы, такие как файлы и устройства, в сети, будь то общедоступный Интернет или корпоративная интрасеть. LDAP - это «облегченная» (меньший объем кода) версия протокола доступа к каталогам (DAP), который является частью стандарта X.500, стандарта для служб каталогов в сети. LDAP легче, потому что в своей первоначальной версии он не включал функции безопасности. Easy Redmine изначально поддерживает аутентификацию LDAP с использованием одного или нескольких каталогов LDAP. Поддерживаемые типы служб каталогов включают Active Directory, OpenLDAP, eDirectory, Sun Java System Directory Server, а также другие совместимые службы каталогов.

Каталог LDAP организован в виде простой «древовидной» иерархии, состоящей из следующих уровней:

  1. Корневой каталог (начальное место или источник дерева), который разветвляется на
  2. Страны, каждая из которых разветвляется на
  3. Организации, которые разветвляются на
  4. Организационные единицы (отделы, отделы и т. д.), которые разветвляются (включают запись для)
  5. Отдельные лица (включая людей, файлы и общие ресурсы, такие как принтеры)

 

Объявление режима аутентификации LDAP

Зайдите в Администрирование и нажмите «Аутентификация LDAP» в меню. Здесь вы найдете список всех существующих режимов аутентификации LDAP, включая опции для тестирования или удаления любых. Чтобы создать новый, нажмите зеленую кнопку «Новый режим аутентификации» в правом верхнем углу.

Image20200526200817_1.png

Поставщик услуг LDAP использует URL-адрес для настройки соединения с сервером каталогов. Для генерации URL-адреса соединения LDAP необходимо указать следующие поля:

  • Имя: произвольное имя для каталога.
  • Хост: имя хоста LDAP (тестовый сервер).
  • Порт: порт LDAP (по умолчанию 389).
  • LDAPS: отметьте это, если вы хотите или должны использовать LDAPS для доступа к каталогу.
  • Учетная запись: введите имя пользователя, имеющего доступ для чтения к LDAP, в противном случае оставьте это поле пустым, если LDAP можно читать анонимно (серверы Active Directory обычно не разрешают анонимный доступ).
  • Пароль: Пароль для учетной записи.
  • Базовое DN: DN верхнего уровня вашего дерева каталогов LDAP (пример: dc = пример, dc = com).
  • Фильтр LDAP: Фильтры могут использоваться для ограничения количества пользователей или групп, которым разрешен доступ к приложению. По сути, фильтр ограничивает, с какой части дерева LDAP синхронизируется приложение. Фильтр может и должен быть написан для членства пользователей и групп. Это гарантирует, что вы не заполняете свое приложение пользователями и группами, которым не нужен доступ.

 

Образцы фильтров

Эти фильтры написаны для Active Directory. Чтобы использовать их для чего-то типа OpenLDAP, атрибуты нужно будет изменить.

Они будут синхронизировать только пользователей в группе «Captain Planet» - это следует применить к фильтру пользовательских объектов:

(&(objectCategory=Person)(sAMAccountName=*)(memberOf=cn=CaptainPlanet,ou=users,dc=company,dc=com))

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

(&(objectCategory=Person)(sAMAccountName=*)(memberOf:1.2.840.113556.1.4.1941:=cn=CaptainPlanet,ou=users,dc=company,dc=com))

Для Active Directory важно иметь memberOf: 1.2.840.113556.1.4.1941, если вы хотите найти вложенные группы (не заменяйте числовую строку) внутри группы CaptainPlanet.

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

(&(objectCategory=Person)(sAMAccountName=*)(|(memberOf=cn=fire,ou=users,dc=company,dc=com)(memberOf=cn=wind,ou=users,dc=company,dc=com)(memberOf=cn=water,ou=users,dc=company,dc=com)(memberOf=cn=heart,ou=users,dc=company,dc=com)))

  • Тайм-аут (в секундах): если поставщик LDAP не получает ответ LDAP в течение указанного периода, он прерывает попытку чтения. Целое число должно быть больше нуля. Целое число, меньшее или равное нулю, означает, что тайм-аут чтения не указан, что эквивалентно бесконечному ожиданию ответа до его получения, который по умолчанию соответствует исходному поведению. Если это свойство не указано, по умолчанию используется ожидание ответа до его получения.
  • Создание пользователя «на лету». Если этот флажок установлен, любой пользователь LDAP автоматически создает свою учетную запись Easy Redmine при первом входе в Easy Redmine. В противном случае вам придется вручную создать пользователя в Easy Redmine для каждого пользователя LDAP, который хочет войти в систему.

Атрибуты (примеры):

  • Атрибут входа: имя входа, под которым пользователь входит в систему и проходит аутентификацию.
  • Атрибут имени: атрибут имени.
  • Атрибут фамилии: Атрибут для фамилии.
  • Атрибут электронной почты: атрибут для адреса электронной почты.

Image20200526200817_2.png

Пользователи Easy Redmine теперь должны иметь возможность проходить аутентификацию, используя свое имя пользователя и пароль LDAP, если их учетные записи настроены на использование LDAP для аутентификации (проверьте настройку «Режим аутентификации» при редактировании профиля пользователя).

Чтобы проверить это, создайте пользователя Easy Redmine с именем входа, соответствующим его учетной записи LDAP (обычно Easy Redmine посоветует вам поиск данных LDAP), выберите вновь созданный LDAP в раскрывающемся списке Режим аутентификации (это поле отображается на экране учетной записи только в случае объявления LDAP) и оставьте свой пароль пустым. Попробуйте войти в Easy Redmine, используя имя пользователя и пароль LDAP.

Image20200526200817_3.png

 

Создание пользователя на лету

Проверяя создание пользователя на лету, любой пользователь LDAP автоматически создает свою учетную запись Easy Redmine при первом входе в Easy Redmine.

Для этого вам необходимо указать имя атрибутов LDAP (имя, фамилия, адрес электронной почты), которые будут использоваться для создания их учетных записей Easy Redmine.

Вот типичный пример использования Active Directory:

Name     = My Directory

Host     = host.domain.org

Port     = 389

LDAPS    = no

Account  = MyDomain\UserName (or UserName@MyDomain depending on AD server)

Password = <password>

Base DN  = CN=users,DC=host,DC=domain,DC=org

On-the-fly user creation = yes

Attributes

 Login     = sAMAccountName

 Firstname = givenName

 Lastname  = sN

 Email     = mail

Вот еще один пример для Active Directory с разделенной интрасетью:

Name     = Just a description for the auth modes page

Host     = DepartmentName.OrganizationName.local

Port     = 389

LDAPS    = no

Account  = DepartmentName\UserName (or UserName@MyDomain depending on AD server or bind DN uid=Manager,cn=users,dc=MyDomain,dc=com)

Password = <password>

Base DN  = DC=DepartmentName,DC=OrganizationName,DC=local

On-the-fly user creation = yes

Attributes

Login     = sAMAccountName

Firstname = givenName

Lastname  = sN

Email     = mail

Обратите внимание, что имена атрибутов LDAP чувствительны к различным регистрам.

 

Учетная запись динамического связывания

Приведенная выше настройка потребует специальной учетной записи на сервере каталогов, которую Easy Redmine использует для предварительной аутентификации. В поле учетной записи можно использовать ключевое слово $ login, которое затем будет заменено текущим логином. В этом случае пароль можно оставить пустым, например:

Account: $login@COMPANY.DOMAIN.NAME

или

Account: company\$login

 

Варианты базового DN

Хотя вполне возможно, что приведенный выше базовый DN является стандартным для Active Directory, Active Directory на сайте моего работодателя не использует контейнер Users для обычных пользователей, поэтому эти инструкции отправили меня по длинному и мучительному пути. Я рекомендую также попробовать просто "DC = хост, DC = домен, DC = org", если вход в систему не удастся с настройками.

 

Групповой вход в систему LDAP

Если вы хотите просто разрешить вход в систему пользователям, принадлежащим к определенной группе LDAP, следуйте приведенным ниже инструкциям. Они основаны на сервере OpenLDAP LDAP и Easy Redmine.

 

1. (Сервер OpenLDAP) Включение оверлея memberof

1.1. Создайте файл:

vim ~/memberof_add.ldif

С содержанием ниже:

dn: cn=module,cn=config

objectClass: olcModuleList

cn: module

olcModulePath: /usr/lib/ldap

olcModuleLoad: memberof

 

1.2. Создайте файл:

vim ~/memberof_config.ldif

С содержанием ниже:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config

objectClass: olcMemberOf

objectClass: olcOverlayConfig

objectClass: olcConfig

objectClass: top

olcOverlay: memberof

olcMemberOfDangling: ignore

olcMemberOfRefInt: TRUE

olcMemberOfGroupOC: groupOfNames

olcMemberOfMemberAD: member

olcMemberOfMemberOfAD: memberOf

 

1.3. Загрузите их. Это будет зависеть от вашей конфигурации OpenLDAP, поэтому мы предложим несколько возможностей:

sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_add.ldif

sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif

Или:

ldapadd -D cn=admin,cn=config -w "password" -H ldapi:/// -f memberof_add.ldif

ldapadd -D cn=admin,cn=config -w "password" -H ldapi:/// -f memberof_config.ldif

Перезапуск НЕ требуется, если вы используете динамический механизм конфигурирования во время выполнения (slapd-config).

 

1.4. (Необязательно) Проверьте это:

ldapsearch -D cn=admin,dc=example,dc=com -x -W -b 'dc=example,dc=com' -H 'ldap://127.0.0.1:389/' '(&(objectClass=posixAccount)(memberOf=cn=ldapeasyredmine,ou=groups,dc=example,dc=com))'

 

2. (Сервер OpenLDAP) Создайте группу. В этом примере пользователь «ldap_user_1», а группа «ldapeasyredmine»:

dn: cn=ldapeasyredmine,ou=groups,dc=example,dc=com

cn: ldapeasyredmine

description: Staff members allowed to login to Easy Redmine ticketing system

member: cn=ldap_user_1,ou=people,dc=example,dc=com

objectclass: groupOfNames

objectclass: top

Отрегулируйте «dn» и «cn» для соответствия вашей структуре DIT

 

3. (Easy Redmine) Отредактируйте режим аутентификации LDAP. В моем случае «ldap_user_1» - это объектный класс «posixAccount»:

Base DN: dc=example,dc=com

Filter: (&(objectClass=posixAccount)(memberOf=cn=ldapeasyredmine,ou=groups,dc=example,dc=com))

 

Поиск неисправностей

Если вы хотите использовать создание пользователей «на лету», убедитесь, что Easy Redmine может извлечь из вашего LDAP всю необходимую информацию для создания действительного пользователя.

Например, создание пользователя на лету не будет работать, если у вас нет действительных адресов электронной почты в вашем каталоге (вы получите сообщение об ошибке «Неверное имя пользователя / пароль» при попытке войти в систему).

(Это не относится к более новым версиям Easy Redmine; диалоговое окно создания пользователя заполняется всем, что он может найти на сервере LDAP, и просит нового пользователя заполнить остальные.)

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

Ошибки в системе входа не сообщаются с какой-либо реальной информацией в журналах Easy Redmine, что затрудняет устранение неполадок. Однако вы можете найти большую часть необходимой вам информации с помощью Wireshark между вашим хостом Easy Redmine и сервером LDAP. Обратите внимание, что это работает, только если у вас есть права на чтение сетевого трафика между этими двумя хостами.

Вы также можете использовать инструмент 'ldapsearch', чтобы проверить правильность настроек. Войдите в систему Linux, на которой находится ваш Easy Redmine (и, возможно, установите ldaputils), и запустите:

ldapsearch -x -b  "dc=example,dc=com" -H ldap://hostname/ -D "DOMAIN\USER" -w mypassword [searchterm]

В случае успеха вы получите список содержимого AD, соответствующий вашему поисковому запросу. Затем вы узнаете, как заполнять поля в конфигурации LDAP в Easy Redmine.

 

Альтернативные способы проверки работоспособности

  • Попробуйте удалить фильтры LDAP, которые, если они установлены неправильно, могут удалить пользователей, которых вы хотите найти.
  • Рядом с «Атрибутом входа» находится значок книги. Если вы щелкнете по нему и LDAP настроен правильно, «обычные атрибуты» автоматически будут предварительно заполнены фактическим сервером LDAP. Вместо текстовых полей появляются поля выбора для случая, когда пользователь хочет изменить настройки. В большинстве случаев пользователю не нужно заполнять это вообще. Если это работает, то все остальное, вероятно, будет работать.
  • При возникновении проблем с подключением вы можете использовать кнопку «Тест» в списке серверов LDAP. Осторожно, это служит только для проверки возможности подключения к LDAP. Общая проблема заключается в том, что администраторы не заполняют пользователя системы LDAP, даже если параметры LDAP все еще защищены. В этом случае тест будет выполнен нормально, потому что соединение работает, но пользователи не могут быть добавлены, потому что LDAP «не видит» их.
  • Чтобы проверить, действительно ли работает LDAP, можно также использовать номер «Доступные пользователи» - если его значение равно 0, LDAP не возвращает никаких данных и, вероятно, неправильно установлен. Если есть число, вы можете щелкнуть по нему, чтобы развернуть и посмотреть, что показывает LDAP (и соответственно настроить фильтры).

 

Формат учетной записи

Возможно, потребуется указать имя пользователя для учетных данных привязки как DN, а не как UPN (user@domain.com) или как домен \ пользователь, как указано в этом комментарии в source:trunk/vendor/plugins/ruby-net-ldap-0.0.4/lib/net/ldap.rb:

# as described under #bind, most LDAP servers require that you supply a complete DN

# as a binding-credential, along with an authenticator such as a password.

Поэтому пользователь с именем MyDomain \ MyUserName или MyUserName@MyDomain.com может ввести только MyUserName в качестве имени для входа в систему Easy Redmine.

 

Медленная аутентификация LDAP

Если аутентификация LDAP идет медленно и у вас есть кластер AD, попробуйте указать в поле Host один из физических серверов AD. Это может помочь.

 

OpenDS

Если вы используете сервер OpenDS, у вас могут возникнуть проблемы с элементом управления запросом «Постраничные результаты», отправляемым с начальным запросом при поиске пользователя по указанному атрибуту входа. Этот элемент управления запросом 1.2.840.113556.1.4.319 не разрешен для анонимных пользователей по умолчанию, что не позволяет Easy Redmine найти пользователя в каталоге даже до того, как произойдет привязка.

Добавьте глобальный ACI, как показано ниже.

./dsconfig -h SERVER_IP -p 4444 -D cn="Directory Manager" -w PASSWORD -n set-access-control-handler-prop --trustAll

--add global-aci:\(targetcontrol=\"1.2.840.113556.1.4.319\"\)\ \(version\ 3.0\;\ acl\

\"Anonymous\ control\ access\ to\ 1.2.840.113556.1.4.319\"\;\ allow\ \(read\)\ userdn=\"ldap:///anyone\"\;\)

Примечание: введите команду в одну строку, используйте экранирование точно так, как указано (\ после «acl» должно быть «\» для пробела).

 

Некоторые пользователи не могут войти

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

Решение: Скорее всего, проблема связана не с неправильными настройками, а с проблемой Active Directory (AD). Пользователям, которым не удалось подключиться, было задано поле «Вход в систему» ​​для определенного ПК в свойствах пользователя AD (администрирование AD). После изменения его на «Вход в систему отовсюду», он должен работать. Более конкретно, это поле должно быть установлено на: Пользователь AD -> Свойства -> Учетная запись -> Вход отовсюду.

 

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

Вы можете столкнуться с проблемами при входе в систему при использовании LDAPS без действительного сертификата. В Redmine 4 сертификат LDAPS всегда проверяется. С недействительным сертификатом пользователи не смогут войти в систему. Конечно, правильным и долгосрочным решением является использование действующего сертификата. Но до тех пор, пока вы этого не добьетесь, временное решение - перейти в Администрирование >> Аутентификация LDAP >> Редактировать соответствующий режим авторизации.

Измените настройку на LDAPS (без проверки сертификата).

Image20200526200817_4.png

С помощью решения Easy Redmine Server вы можете массово изменить его с консоли rails

rails r "AuthSource.update_all(verify_peer: false)" -e production

или через SQL

UPDATE auth_sources set verify_peer = 0;

Add picture from clipboard