Настройка интеграции с LDAP¶
Примечание
Выполняется пользователем с правами Администратор.
Система позволяет настроить интеграцию с большинством известных LDAP-совместимых серверов:
- Microsoft Active Directory.
- Apple Open Directory.
- Open LDAP.
- 389 Server.
Примечание
Система не поддерживает Microsoft Active Directory Trusts.
Примечание
LDAP-пользователи должны иметь адрес электронной почты, независимо от того, используется ли он для авторизации.
Основные настройки конфигурации¶
Доступны следующие настройки:
| Настройка | Обязат. | Тип | Описание |
|---|---|---|---|
label |
Да | Строк. | Удобное для человека имя LDAP-сервера, которое отображается на странице авторизации. Например: Paris или Acme, Ltd |
host |
Да | Строк. | IP-адрес или доменное имя LDAP-сервера. Игнорируется, если определены хосты. Например: ldap.mydomain.com |
port |
Да | Целочисл. | Порт соединения с LDAP-сервером. Игнорируется, если определены хосты. Например: 389 или 636 (для SSL) |
uid |
Да | Строк. | Атрибут LDAP, сопоставляемый с именем пользователя, которое он использует для входа в систему. Это должен быть атрибут, а не значение, сопоставляемое с uid. Не влияет на имя пользователя Системы. Например: sAMAccountName или uid, или userPrincipalName |
base |
Да | Строк. | База, в которой осуществляется поиск пользователей. Например: ou=people,dc=appseccode,dc=example или DC=mydomain,DC=com |
encryption |
Да | Строк. | Метод шифрования (параметр method устарел, вместо него рекомендуется использовать encryption). Может принимать одно из трёх значений: start_tls, simple_tls или plain. simple_tls соответствует ‘Simple TLS’ в библиотеке LDAP. start_tls соответствует StartTLS, что не следует путать с обычным TLS. Если вы указываете simple_tls, обычно используется порт 636, в то время как start_tls (StartTLS) работает через порт 389. plain также работает через порт 389 |
hosts |
Нет | Массив строк и целочисленных значений | Массив пар хостов и портов для открытия соединений. Каждый настроенный сервер должен иметь такой набор данных. Это не означает, что необходимо конфигурировать несколько отдельных LDAP-серверов — используется только в целях повышения отказоустойчивости. Хосты перебираются в порядке их появления в конфигурации. Например: [['ldap1.mydomain.com', 636], ['ldap2.mydomain.com', 636]] |
bind_dn |
Нет | Строк. | Полное DN пользователя, с которым устанавливается связь. Например: america\momo или CN=AppSecCode,OU=Users,DC=domain,DC=com |
password |
Нет | Строк. | Пароль пользователя, с которым устанавливается связь |
verify_certificates |
Нет | Логич. | По умолчанию имеет значение true. Включает проверку сертификата SSL, если методом шифрования является start_tls или simple_tls. Если установлено значение false, проверка SSL-сертификата LDAP-сервера не производится |
timeout |
Нет | Целочисл. | Значение по умолчанию — 10. Таймаут LDAP-запросов (в секундах) - позволяет избежать блокировки запроса, если LDAP-сервер не отвечает на него |
active_directory |
Нет | Логич. | Параметр определяет, является ли LDAP-сервер сервером Active Directory. Для серверов, не являющихся серверами AD, он пропускает запросы, специфичные для AD. Если LDAP-сервер не является сервером AD, установите значение false |
allow_username_or_email_login |
Нет | Логич. | Значение по умолчанию — false. Если этот параметр включен, то Система игнорирует все, что следует за первым символом «@» в имени пользователя LDAP при авторизации. Если используется uid: 'userPrincipalName' в Active Directory, вы должны отключить этот параметр, поскольку имя userPrincipalName содержит символ «@» |
block_auto_created_users |
Нет | Логич. | Значение по умолчанию — false. Включите этот параметр, чтобы блокировать новых пользователей, пока они не будут разрешены администратором |
user_filter |
Нет | Строк. | Фильтр пользователей LDAP. Соответствует формату RFC 4515. Система не поддерживает пользовательский синтаксис фильтра omniauth-ldap. Примеры синтаксиса поля user_filter:– '(employeeType=developer)';– '(&(objectclass=user)(|(samaccountname=momo)(samaccountname=toto)))' |
lowercase_usernames |
Нет | Логич. | Если эта опция включена, Система преобразует имена в нижний регистр |
retry_empty_result_with_codes |
Нет | Array | Массив кодов ответов на запросы LDAP, которые пытаются повторить операцию, если результат/содержимое пуст. Для Google Secure LDAP установите значение [80] |
Приведем шаги настройки LDAP с базовыми параметрами конфигурации.
-
Отредактируйте файл docker-compose.yml и установите необходимые значения для указанных выше параметров.
-
Сохраните файл и выполните переконфигурацию Системы:
docker compose up -d
Настройка SSL¶
Параметры конфигурации SSL могут быть заданы в tls_options через пары имен/значений. Доступны следующие параметры конфигурации SSL:
| Настройка | Описание | Обязат. | Пример |
|---|---|---|---|
ca_file |
Путь к файлу, содержащему СА-сертификат в формате PEM, например, при использовании внутреннего CA | Нет | '/etc/ca.pem' |
ssl_version |
Версия SSL для использования OpenSSL, если версия OpenSSL по умолчанию не подходит | Нет | 'TLSv1_1' |
ciphers |
SSL-шифры для использования при взаимодействии с LDAP-серверами | Нет | 'ALL:!EXPORT:!LOW:!aNULL:!eNULL:!SSLv2' |
cert |
Сертификат клиента | Нет | '-----BEGIN CERTIFICATE----- <REDACTED> -----END CERTIFICATE -----' |
key |
Приватный ключ клиента | Нет | '-----BEGIN PRIVATE KEY----- <REDACTED> -----END PRIVATE KEY -----' |
Параметры конфигурации атрибутов¶
Система использует приведенные ниже LDAP-атрибуты для создания аккаунта LDAP-пользователя. Могут использоваться следующие атрибуты:
- Имя атрибута, как строковая переменная, например:
'mail'. - Массив имен атрибутов, которые перебираются по порядку. Например:
['mail', 'email'].
LDAP-атрибут пользователя, который используется для авторизации — uid.
Необходимо определить следующие атрибуты в хеше attributes.
| Настройка | Описание | Обязат. | Пример |
|---|---|---|---|
username |
Используется в путях к собственным проектам пользователя (например, yoursite.ru/username/project) и при упоминании их в проблемах, запросах на слияние и комментариях (например, @username). Если атрибут, указанный для имени пользователя, содержит адрес электронной почты, то имя пользователя Системы является частью адреса электронной почты перед символом «@» |
Нет | ['uid', 'userid', 'sAMAccountName'] |
email |
LDAP-атрибут для электронной почты пользователя | Нет | ['mail', 'email', 'userPrincipalName'] |
name |
LDAP-атрибут для отображаемого имени пользователя. Если name пуст, используется полное имя, взятое из атрибутов first_name и last_name |
Нет | Атрибуты 'cn' или 'displayName' обычно содержат полные имена. В качестве альтернативы можно принудительно использовать first_name и last_name, указав отсутствующий атрибут, например, 'somethingNonExistent' |
first_name |
LDAP-атрибут для имени пользователя. Используется, когда атрибут для name не сконфигурирован |
Нет | 'givenName' |
last_name |
LDAP-атрибут для фамилии пользователя. Используется, когда атрибут для name не сконфигурирован |
Нет | 'sn' |
Настройки синхронизации LDAP-конфигурации¶
Доступны следующие настройки синхронизации LDAP-конфигурации:
| Настройка | Описание | Обязат. | Пример |
|---|---|---|---|
group_base |
База, используемая для поиска групп | Нет (обязат., когда сконфигурирован external_groups) |
'ou=groups,dc=appseccode,dc=example' |
admin_group |
CN группы администраторов Системы | Нет | 'administrators' |
external_groups |
Массив CN групп, содержащих пользователей, которые должны рассматриваться в качестве внешних | Нет | ['interns', 'contractors'] |
sync_ssh_keys |
LDAP-атрибут, содержащий публичный SSH-ключ пользователя | Нет | 'sshPublicKey' или false, если не задан |
Использование нескольких LDAP-серверов¶
Можно сконфигурировать систему для работы с несколькими LDAP-серверами. Чтобы добавить дополнительный LDAP-сервер:
- Продублируйте
mainLDAP-конфигурацию. -
Отредактируйте каждую скопированную конфигурацию для использования дополнительных серверов.
- Для каждого дополнительного сервера, выберите другой ID-провайдера, например
main,secondaryилиtertiary. Используйте цифры и буквы в нижнем регистре. Система использует ID провайдера, чтобы связать каждого пользователя с определенным LDAP-сервером. - Для каждой записи используйте уникальное значение метки
label. Эти значения используются для названия вкладок на странице авторизации.
- Для каждого дополнительного сервера, выберите другой ID-провайдера, например
Включение перевода имен LDAP-пользователей в нижний регистр¶
Некоторые LDAP-серверы, в зависимости от их конфигурации, могут возвращать имена пользователей в верхнем регистре, что может приводить к некоторым проблемам, например, создание ссылок или пространств имен с использованием букв в верхнем регистре.
Система автоматически переводит имя пользователя, предоставленное LDAP-сервером в нижний регистр, если выбрана опция lowercase_usernames. По умолчанию для этой опции выбрано значение false.
-
Отредактируйте файл docker-compose.yml и установите для параметра
lowercase_usernamesзначениеtrue. -
Сохраните файл и перезапустите Систему:
docker compose up -d
Использование шифрования учетных данных¶
Вместо хранения учетных данных для интеграции с LDAP в открытом виде, можно использовать зашифрованный файл.
Чтобы использовать зашифрованные учетные данные, необходимо сначала включить конфигурацию с шифрованием, которая, в свою очередь, находится в зашифрованном YAML-файле.
Нешифрованное содержимое файла должно представлять собой подмножество секретных настроек из блока ваших серверов в конфигурации LDAP.
Поддерживаются следующие элементы конфигурации для зашифрованного файла:
bind_dn;password.
Удаление пользователей LDAP¶
Удаление пользователей с LDAP-сервера незамедлительно блокирует его авторизацию в Системе.
Однако пользователи смогут продолжать использовать Систему через SSH, до следующей проверки кэша LDAP.
Чтобы удалить аккаунт незамедлительно, можно заблокировать пользователя вручную.
Обновление адресов электронной почты¶
Адреса электронной почты на LDAP-сервере считаются источником истины при авторизации.
Обновление адресов электронной почты пользователей должно производиться на LDAP-сервере, который управляет пользователем. Адрес электронной почты для Системы обновляется либо:
- При следующем входе пользователя в систему.
- При выполнении следующей синхронизации пользователя.
Обновленный (предыдущий) адрес электронной почты пользователя становится вторичным для сохранения истории коммитов этого пользователя.