Перейти к основному содержимому

Active Directory

Active Directory (AD) от Microsoft предоставляет различные службы каталогов сети, включая функциональность, аналогичную протоколу LDAP (Lightweight Directory Access Protocol). Эта технология входит в состав Windows 2000 Server и более поздних версий операционной системы. На данной странице основное внимание будет уделено функциям Аутентификации через LDAP.

Устранение неполадок AD/LDAP-аутентификации​


Предупреждение: Модуль PHP LDAP, похоже, не установлен. Убедитесь, что он установлен и активирован.​

Такая ошибка обычно возникает при отсутствии либо основной ldap-библиотеки, либо одной из зависимых DLL. В первую очередь следует проверить основную библиотеку. Для этого откройте в браузере страницу http://(moodleserver)/admin/phpinfo.php и в поле "Configuration File (php.ini) Path" определите, какой именно php.ini-файл используется системой. Откройте этот файл в текстовом редакторе и найдите строку 'extension=php_ldap.dll'. Если в начале строки стоит точка с запятой - удалите её, так как этот символ полностью отключает загрузку модуля.

Продолжая работу с этим файлом, найдите параметр 'extension_dir' и запомните указанный в нём каталог. Перейдите в этот каталог и проверьте наличие файла php_ldap.dll. Если файл отсутствует - скопируйте его туда вручную.

Если после этих действий проблема не устранена, вероятно, отсутствуют какие-то из зависимых DLL-библиотек, хотя система явно не указывает, каких именно. Для выявления недостающих библиотек откройте командную строку, перейдите в каталог PHP и выполните команду 'php -m'. В выводе команды появятся сообщения об ошибках, которые укажут на конкретные отсутствующие DLL-файлы. Скопируйте все указанные в ошибках библиотеки в каталог PHP.

После выполнения всех этих действий может потребоваться перезапуск службы apache/httpd. Выполните команду 'php -m' повторно для проверки - если все необходимые библиотеки на месте, ошибки исчезнут, а соответствующее сообщение в YooLearn больше не будет появляться.

Ошибка подключения LDAP-модуля​

LDAP-модуль не может установить соединение с серверами LDAP:
Сервер: 'ldap://my.ldap.server/'
Соединения: 'Идентификатор ресурса #26' Результат привязки: ''

Данная ошибка возникает при попытке входа в систему и указывает на одну из двух возможных причин: неверные учетные данные пользователя для привязки (Bind) либо недостаточные права учетной записи в Active Directory.

Для диагностики и устранения проблемы рекомендуется использовать утилиту ldp.exe. После установки программы необходимо подключиться к контроллеру домена Active Directory, указав имя сервера. В меню "Соединение" следует выбрать операцию "Привязать" (Bind) и ввести предполагаемые корректные учетные данные.

Если операция завершается ошибкой, потребуется проверить и скорректировать права доступа учетной записи либо попробовать использовать другую учетную запись. Успешная аутентификация будет подтверждена сообщением "Аутентифицирован как" (Authenticated as).

После успешной привязки важно убедиться в правильности Distinguished Name (DN) пользователя. В дереве каталогов нужно найти соответствующую учетную запись, скопировать ее DN через контекстное меню и вставить это значение в поле ldap_bind_dn на странице аутентификации пользователей в YooLearn, дополнительно указав пароль. Это гарантирует корректную работу механизма привязки.

Получение корректных имен контекстов (CN) для контекстов и создателей​

Для неподготовленных пользователей AD этот процесс может показаться запутанным, а даже опытные специалисты иногда испытывают сложности. В этом вам поможет утилита ldp.exe (ниже приведены инструкции по её установке). Запустите программу, раскройте дерево каталогов слева, найдите нужную группу или пользователя, кликните правой кнопкой и выберите "Copy DN". Затем вернитесь на страницу аутентификации пользователей YooLearn и вставьте скопированное значение в поле ldap_contexts или ldap_creators.

Получение правильного user_attribute​

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

В утилите ldp.exe найдите нужную учетную запись пользователя в древовидной структуре (рекомендуется выбрать собственную учетную запись). Двойной щелчок по записи загрузит все атрибуты учетной записи в правую панель. Среди отображаемых параметров найдите свой логин и определите соответствующий ему атрибут. В большинстве случаев (включая мой) этим атрибутом будет sAMAccountName. Скопируйте название данного атрибута и вставьте его в поле ldap_user_attribute на странице аутентификации пользователей YooLearn. Инструкции по установке утилиты ldp.exe приведены ниже.

Установка серверного инструмента ldp.exe​

Инструмент ldp.exe входит в стандартный набор серверных средств (Server Tools) для большинства версий Windows Server. Для его установки необходимо использовать установочный диск Windows Server, где в папке Support/Tools находится установочный файл SupTools.msi. Запуск этого файла инициирует процесс установки серверных инструментов.

После успешной установки в системной папке Program Files будет создан каталог Support Tools, содержащий исполняемый файл ldp.exe.

Пример конфигурации Active Directory​

Ниже представлен пример настройки для Active Directory. Как упоминалось ранее, значения могут отличаться в зависимости от вашей локальной конфигурации Active Directory, но этот пример служит хорошей отправной точкой для большинства случаев.

ldap_host_url = ldap://ads.example.com
ldap_version = 3
ldap_preventpassindb = yes
ldap_bind_dn = bind-user@example.com
ldap_bind_pw = bind-password
ldap_user_type = MS ActiveDirectory
ldap_contexts = ou=moodleusers,dc=example,dc=com
ldap_user_attribute = sAMAccountName

Примечание: Значение ldap_bind_dn может быть указано как в формате CN=bin-user,CN=Users,DC=example,DC=com (как показано в основных инструкциях), так и в формате bind-user@example.com (как в данном примере).

Глобальные каталоги​


В текущей версии YooLearn реализована лишь ограниченная поддержка нескольких контроллеров доменов. В частности, система предполагает, что все указанные LDAP-серверы содержат идентичные наборы данных. Это создаёт проблему при работе с пользователями из разных доменов.

При использовании Microsoft Active Directory одним из решений является задействование Глобального каталога (Global Catalog). Глобальный каталог представляет собой предназначенное для поиска частичное (read-only) представление всей леса MS-AD, используемое в случаях, когда домен требуемого объекта неизвестен.

Включение глобального каталога​

Глобальный каталог поддерживается серверами Active Directory в Windows 2000 и Windows 2003. Чтобы его включить, откройте оснастку "Active Directory — сайты и службы" в консоли управления MMC (Microsoft Management Console). Разверните раздел "Сайты", затем выберите сайт с нужным лесом Active Directory. Найдите сервер, на котором требуется активировать глобальный каталог, раскройте его параметры, щелкните правой кнопкой мыши на "Параметры NTDS" и перейдите на вкладку "Свойства". Для включения отметьте галочкой пункт "Глобальный каталог".

В Windows 2000 после этого потребуется перезагрузка сервера (хотя система не запросит ее явно), тогда как в Windows 2003 перезагрузка не нужна. В любом случае глобальный каталог начнет отображать полные данные леса Active Directory только после завершения репликации. Изменения в Active Directory также будут применяться с небольшой задержкой из-за времени, необходимого для репликации.

Если ваши серверы Active Directory защищены брандмауэром, для работы глобального каталога потребуется открыть порт 3268. В организациях, использующих Microsoft Exchange, скорее всего, хотя бы один контроллер домена уже имеет включенный глобальный каталог, поскольку Exchange 2000 и 2003 используют его для получения адресной информации. Пользователи также обращаются к глобальному каталогу при работе с глобальным списком адресов (GAL).

Дочерние домены​

Если ваша организация использует основной домен example.org, то сотрудники и студенты размещаются в двух дочерних доменах: staff.example.org и students.example.org. Все три домена (example.org, staff.example.org и students.example.org) имеют свои контроллеры домена (соответственно dc01, dc02 и dc03). Каждый контроллер домена содержит полную редактируемую копию только тех объектов, которые принадлежат его домену. Однако при включенном глобальном каталоге (см. ниже) на одном из контроллеров домена (например, dc01) запрос к глобальному каталогу будет возвращать соответствующие объекты из всех трех доменов. Глобальный каталог автоматически поддерживается через репликацию в пределах леса Active Directory и может быть включен на нескольких серверах (например, для обеспечения избыточности или балансировки нагрузки).

Настройка в YooLearn для авторизации из нескольких доменов​

Для использования этой возможности в YooLearn (чтобы разрешить вход пользователей из нескольких доменов) достаточно простой настройки. Глобальный каталог использует порт 3268, в отличие от стандартного LDAP-порта 389. Таким образом, если глобальный каталог работает на dc01, параметр 'ldap_host_url' должен иметь вид: ldap://dc01.example.org:3268. Остальные настройки идентичны другим конфигурациям аутентификации MS-AD.

Настройка контекстов LDAP​

В параметре 'ldap_contexts' следует указать расположение пользователей, которым нужно разрешить доступ. Продолжая наш пример:

  • В домене example.org все пользователи находятся в подразделении (OU) 'Users'
  • В домене staff.example.org пользователи распределены по двум корневым подразделениям: 'Support Staff' и 'Teaching Staff'
  • В домене students.example.org студенты размещаются в подразделениях, соответствующих году поступления, которые входят в OU 'Students'

Таким образом, параметр 'ldap_contexts' может выглядеть примерно так: 'OU=Users,DC=example,DC=org; OU=Support Staff,DC=staff,DC=example,DC=org; OU=Teaching Staff,DC=staff,DC=example,DC=org; OU=Students,DC=students,DC=example,DC=org'

Параметр 'ldap_search_sub' следует установить в значение 'Yes', чтобы YooLearn мог выполнять поиск во вложенных подразделениях.

Особенности глобального каталога​

Важно отметить, что глобальный каталог содержит только часть атрибутов каждого объекта, как определено в наборе частичных атрибутов Microsoft. Однако общие сведения, которые могут потребоваться YooLearn (имя, фамилия, email, sAMAccountName и т.д.), включены в этот набор. При необходимости схему можно изменить, добавив или удалив атрибуты (подробнее см. статью Microsoft KB248717).

В большинстве случаев глобальный каталог доступен только для чтения. Запросы на обновление должны выполняться через стандартные LDAP-порты к контроллеру домена, которому принадлежит объект. В нашем примере для обновления данных студента потребуется LDAP-запрос к контроллеру домена students.example.org (dc03), так как обновление через глобальный каталог невозможно. Исключение составляют среды с единственным доменом в лесу Active Directory - в этом случае глобальный каталог содержит полный набор редактируемых атрибутов для всех объектов домена. Однако для авторизации в YooLearn в такой ситуации использование глобального каталога не требуется.

Настройка MaxPageSize​

Изменение количества объектов Active Directory для поиска: По умолчанию Active Directory разрешает возвращать при поиске только ограниченное количество объектов за один запрос. Поскольку в PHP 5.2.x отсутствует поддержка постраничного управления (page control), позволяющего выполнять поиск меньшими порциями, вам может потребоваться изменить параметр MaxPageSize, чтобы обеспечить возврат достаточного количества объектов пользователей через LDAP-клиент для поддержки аутентификации всех пользователей.

Важно: Начиная с версии PHP 5.4 появилась поддержка постраничного управления. В новых версиях настроек LDAP появился параметр размера страницы (page size), который следует установить меньшим, чем значение MaxPageSize в Active Directory.

Если ваш скрипт некорректно обрабатывает всех пользователей (при использовании MS Active Directory с более чем 1000 пользователей), выполните следующие инструкции, чтобы установить значение MaxPageSize больше общего количества пользователей (с учетом будущего роста). Это глобальная настройка уровня леса (forest-wide setting).

MS Active Directory + SSL​

Если центр сертификации (Certificate Authority) не установлен, сначала выполните его установку следующим образом:

  • Нажмите Пуск → Панель управления → Установка и удаление программ.
  • Выберите Установка компонентов Windows и отметьте Службы сертификатов.
  • Следуйте инструкциям для установки центра сертификации. Рекомендуется выбрать уровень Enterprise.

Для проверки активации SSL на сервере:

  • Установите suptools.msi с диска Windows (папка /Support/tools)
  • После установки поддержки:
    • Выберите Пуск → Выполнить, введите ldp
    • В окне LDP: Connection → Connect
    • Укажите корректное имя хоста и порт 636
    • Активируйте флажок SSL

При успешном подключении отобразится информация о соединении.

Настройка LDAPS на стороне клиента (сервер YooLearn) описана в соответствующем разделе документации.


Оригинал: https://docs.moodle.org/502/en/Active_Directory