Переменные идентификации и аутентификации по LDAP-протоколу

Возможны два режима LDAP-аутентификации:

  1. без предварительного поиска;

  2. с предварительным поиском.

Для успешной аутентификации парольная аутентификация по LDAP-протоколу через LDAP-сервер требуется наличие пользователя в БД ЛИНТЕР и в БД LDAP-сервера, при этом имя пользователя БД ЛИНТЕР должно соответствовать одному из атрибутов пользователя в БД LDAP-сервера (для аутентификации без предварительного поиска данный атрибут должен входить в состав уникального имени пользователя в БД LDAP-сервера). Кроме того, чтобы для режима LDAP-аутентификации с предварительным поиском не требовалось задавать DN и пароль пользователя с правами поиска, необходимо разрешение на анонимный поиск в LDAP-базе.

В режиме без предварительного поиска сначала идет подключение к серверу LDAP_SERVER и попытка выполнить соединение с уникальным именем, сформированным как LDAP_PREFIX< имя >LDAP_SUFFIX, где < имя > и пароль определяются соответствующими параметрами команды OPEN (см. документ «СУБД ЛИНТЕР. Интерфейс нижнего уровня», пункт «Открыть канал (соединение)»). Удачное соединение означает удачную идентификацию и аутентификацию.

В режиме с предварительным поиском сначала идет подключение к серверу LDAP_SERVER и попытка выполнить соединение со специальными именем LDAP_SEARCHDN и паролем, который может быть задан одним из способов:

  • напрямую через переменную LDAP_SEARCHPW;

  • с помощью ключа LDAPSRCHPW;

  • через файл, полный путь к которому передается в параметре LDAP_SEARCHPW_FILE;

  • анонимно, если эти учетные данные не заданы.

После этого производится поиск пользователя в БД LDAP-сервера в каталоге LDAP_BASEDN с фильтром LDAP_FILTER. Найденное в результате поиска уникальное имя (если единственное) используется для попытки соединения с введенным пользователем паролем. Удачное соединение означает удачную идентификацию и аутентификацию.

Для настройки LDAP-аутентификации ядра СУБД ЛИНТЕР используются следующие переменные окружения:

  • LDAP_PREFIX определяет строку, добавляемую в качестве префикса к имени пользователя БД ЛИНТЕР для формирования уникального имени (DN) для LDAP-аутентификации. Переменная служит для указания имени атрибута, соответствующего выбранной схеме, отличной от значения по умолчанию. Если переменная LDAP_PREFIX не задана, по умолчанию используется строка "cn=". Например, для пользователя SYSTEM БД ЛИНТЕР будет использован атрибут со значением cn=SYSTEM (если LDAP_PREFIX ="cn=", т.е. стандартное имя пользователя). Если LDAP_PREFIX ="sn=", то имя пользователя ЛИНТЕР будет соответствовать атрибуту Surname LDAP-схемы.

    Переменная игнорируется в режиме LDAP-аутентификации с предварительным поиском.

    Значение переменной может задаваться с помощью ключа /LDAPPREFIX.

  • LDAP_SUFFIX определяет строку, добавляемую в качестве суффикса к имени пользователя БД ЛИНТЕР для формирования уникального имени (DN) для LDAP-аутентификации. LDAP_SUFFIX выбирается при настройке LDAP-сервера и обычно соответствует доменному имени организации. Значение строки должно состоять из предопределенных имен атрибутов схемы LDAP-сервера (ou – организационная единица, c – страна, dc – домен и т.п.) и их значений. Указание переменной LDAP_SUFFIX является обязательным для режима LDAP-аутентификации без предварительного поиска. Если эта переменная не задана, то любой запрос на аутентификацию пользователей с включенной LDAP-аутентификацией будет отвергнут.

    Например,

    LDAP_SUFFIX="ou=Users, dc=company, dc=com"

    DN строка формируется как конкатенация строк LDAP_PREFIX, имени пользователя СУБД ЛИНТЕР, символа ',' и LDAP_SUFFIX.

    Переменная игнорируется в режиме LDAP-аутентификации с предварительным поиском.

    Значение переменной может задаваться с помощью ключа /LDAPSUFFIX.

  • LDAP_SERVER задает адрес LDAP-сервера в виде доменного имени. Если переменная не задана, по умолчанию предполагается работа с локальным LDAP-сервером (localhost). В переменной LDAP_SERVER может быть указан номер порта, отделяемый от доменного имени двоеточием. Можно задавать несколько серверов через пробел, в этом случае попытка соединиться с очередным LDAP-сервером будет предприниматься после неудачного соединения с предшествующим LDAP-сервером.

    Например,

    LDAP_SERVER="ldap.server.domain.org"
    LDAP_SERVER="ldap.server.domain.org:636"
    LDAP_SERVER="ldap.server.relex.org"
    LDAP_SERVER="ldap1.server.domain.org ldap2.server.domain.org:636
    ldap3.server.domain.org"

    Значение переменной может задаваться с помощью ключа /LDAPSRV.

  • LDAP_TIMEOUT задает интервал в секундах, в течение которого ожидается ответ от LDAP-сервера. Если в течение указанного интервала ответ не поступил, возвращается код завершения «Тайм-аут LDAP-сервера». По умолчанию интервал тайм-аута принимается в 10 секунд.

    Ожидание ответа от LDAP-сервера выполняется в чередующихся фазах активного и пассивного тайм-аута:

    Фаза активного тайм-аута

    Фаза пассивного тайм-аута

    Фаза активного тайм-аута

    Фаза пассивного тайм-аута

    В фазе активного тайм-аута ЛИНТЕР-сервер ожидает ответ от LDAP-сервера в течение указанного в LDAP_TIMEOUT интервала времени. Если ответ не поступил, генерируется код завершения «Тайм-аут LDAP-сервера».

    Если пользователь продолжает попытки соединиться с ЛИНТЕР-сервером, то в течение следующей фазы пассивного тайм-аута (также равного значению LDAP_TIMEOUT) все попытки соединения с LDAP-сервером немедленно отвергаются с выдачей кода завершения «Тайм-аут LDAP-сервера» (хотя к этому моменту соединение с LDAP-сервером, возможно, уже восстановлено).

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

    Пример

    LDAP_TIMEOUT=15

    Значение переменной может задаваться с помощью ключа /LDAPTOUT.

  • LDAP_BASEDN задает режим LDAP-аутентификации с предварительным поиском уникального имени пользователя в БД LDAP-сервера. Значением переменной является корень поиска, производимого через заданный фильтр.

    Задание переменной обязательно для LDAP-аутентификации с предварительным поиском.

    Значение переменной может задаваться с помощью ключа /LDAPBASEDN.

  • LDAP_FILTER задает фильтр, используемый для поиска пользователя в БД LDAP-сервера. Строка фильтра может содержать служебное слово '%username%', которое при поиске заменяется на введенное при установлении соединения с СУБД ЛИНТЕР имя пользователя БД ЛИНТЕР. В найденной записи извлекается уникальное имя пользователя (DN), которое используется совместно с введенным пользователем паролем для попытки аутентификации. Если фильтр находит несколько записей (либо не находится ни одной), то аутентификация считается не пройденной.

    Переменная игнорируется в режиме LDAP-аутентификации без предварительным поиска.

    Значение по умолчанию "(uid=%username%)".

    Значение переменной может задаваться с помощью ключа /LDAPFLTR.

  • LDAP_SEARCHDN задает уникальное имя (DN), с помощью которого будет производиться поиск в БД LDAP-сервера.

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

    Значение переменной может задаваться с помощью ключа /LDAPSRCHDN.

  • LDAP_SEARCHPW задает пароль для имени, от которого будет производиться поиск в БД LDAP-сервера.

    Переменная игнорируется в режиме LDAP-аутентификации без предварительным поиска или в случае анонимного поиска.

    Значение переменной может задаваться с помощью ключа /LDAPSRCHPW.

  • LDAP_SEARCHPW_FILE задает путь к файлу, содержащему пароль LDAP_SEARCHPW. Переменная имеет более высокий приоритет, чем переменная LDAP_SEARCHPW и ключ /LDAPSRCHPW.

    Значение переменной может задаваться с помощью ключа /LDAPSRCHPWFILE.