9.4 KiB
Аутентификация LDAP
Требования¶
-
Включенное в PHP раширение LDAP
-
Сервер LDAP:
-
OpenLDAP
-
Microsoft Active Directory
-
Novell eDirectory
-
Рабочий процесс¶
Когда активирована аутентификация LDAP, процесс входа выглядит следующим образом:
-
Выполняется попытка аутентификации пользователя в базе данных Канборда
-
Если пользователь не найден в базе Канборда, выполняется аутентификация LDAP
-
Если аутентификация LDAP выполнена успешно, по умолчанию, локальный пользователь (в Канборде) создается автоматически без пароля и помечается как пользователь LDAP.
Полное имя и email адрес автоматически подгружаются из сервера LDAP.
Типы аутентификации¶
| Тип | Описание |
|---|---|
| Proxy User | Использовать специального пользователя для просмотра директории LDAP |
| User | Использовать учетные данные конечного пользователя для просмотра директории LDAP |
| Anonymous | Не надо выполнять аутентификацию для доступа к каталогу LDAP |
Рекомендуемый метод аутентификации - “Proxy”.
Анонимный (Anonymous) метод¶
define('LDAP_BIND_TYPE', 'anonymous');
define('LDAP_USERNAME', null);
define('LDAP_PASSWORD', null);
Этот метод используется по умолчанию, но некоторые сервера LDAP не поддерживают доступ анонимам, из соображений безопасности.
Proxy метод¶
Специальный пользователь используется для доступа к директории LDAP:
define('LDAP_BIND_TYPE', 'proxy');
define('LDAP_USERNAME', 'my proxy user');
define('LDAP_PASSWORD', 'my proxy password');
Пользовательский метод (user)¶
Этот метод используется для доступа под учетной записью конечного пользователя.
Например, Microsoft Active Directory не разрешает подключение под анонимным пользователем и если вы не хотите использовать пользователя proxy, то используйте этот метод.
define('LDAP_BIND_TYPE', 'user');
define('LDAP_USERNAME', '%s@kanboard.local');
define('LDAP_PASSWORD', null);
В этом методе, константа LDAP_USERNAME использутся как шаблон для пользователя ldap, например:
-
%s@kanboard.localбудет замененmy_user@kanboard.local -
KANBOARD\\%sбудет заменен наKANBOARD\my_user
Фильтр пользователей LDAP¶
Параметр конфигурации LDAP_USER_FILTER используется для поиска пользователей по директории LDAP.
Например:
-
(&(objectClass=user)(sAMAccountName=%s))будет заменено на(&(objectClass=user)(sAMAccountName=указанный_пользователь)) -
uid=%sis replaced byuid=указанный_пользователь
Другие примеры фильтров для Active Directory
Пример фильра доступа в Канборд:
(&(objectClass=user)(sAMAccountName=%s)(memberOf=CN=Kanboard Users,CN=Users,DC=kanboard,DC=local))
Этот пример разрешает подключатся к Канборду только пользователям участникам группы “Kanboard Users”
Пример для Microsoft Active Directory¶
Предположим, что мы имеем домен KANBOARD (kanboard.local) и контролер домена myserver.kanboard.local.
Первый пример для метода прокси (proxy):
<?php
// Enable LDAP authentication (false by default)
define('LDAP_AUTH', true);
define('LDAP_BIND_TYPE', 'proxy');
define('LDAP_USERNAME', 'administrator@kanboard.local');
define('LDAP_PASSWORD', 'my super secret password');
// LDAP server hostname
define('LDAP_SERVER', 'myserver.kanboard.local');
// LDAP properties
define('LDAP_USER_BASE_DN', 'CN=Users,DC=kanboard,DC=local');
define('LDAP_USER_FILTER', '(&(objectClass=user)(sAMAccountName=%s))');
Второй пример с пользовательским методом (user):
<?php
// Enable LDAP authentication (false by default)
define('LDAP_AUTH', true);
define('LDAP_BIND_TYPE', 'user');
define('LDAP_USERNAME', '%s@kanboard.local');
define('LDAP_PASSWORD', null);
// LDAP server hostname
define('LDAP_SERVER', 'myserver.kanboard.local');
// LDAP properties
define('LDAP_USER_BASE_DN', 'CN=Users,DC=kanboard,DC=local');
define('LDAP_USER_FILTER', '(&(objectClass=user)(sAMAccountName=%s))');
Пример для OpenLDAP¶
Наш сервер LDAP - myserver.example.com и все пользователи хранятся в ou=People,dc=example,dc=com.
Для этого примера мы использовали анонимное подключение.
<?php
// Enable LDAP authentication (false by default)
define('LDAP_AUTH', true);
// LDAP server hostname
define('LDAP_SERVER', 'myserver.example.com');
// LDAP properties
define('LDAP_USER_BASE_DN', 'ou=People,dc=example,dc=com');
define('LDAP_USER_FILTER', 'uid=%s');
Выключение автоматического создания учетных записей¶
По умолчанию, Канборд автоматически создает учетную запись пользователя, если такой пользователь не найден.
Вы можете выключить это поведение, если вы предпочитаете создавать учетные записи вручную.
Для этого установите значение LDAP_ACCOUNT_CREATION в false:
// Automatically create user account
define('LDAP_ACCOUNT_CREATION', false);
Устранение неисправностей¶
Если включен SELinux, вы должны разрешить Apache доступ к вашему серверу LDAP.
-
Вы должны переключить SELinux в разрешающий режим (permissive mode) или совсем выключить (не рекомендуется)
-
Вы должны разрешить все сетевые подключения, например
setsebool -P httpd_can_network_connect=1или назначить более ограничивающие правила
В любом случае, ознакомтесь с официальной документацией Redhat/Centos.
Если вам не удается настроить аутентификацию LDAP, то вы можете включить режим отладки и посмотреть файлы событий.