LDAP

Навигатор по разделу:

1. Общие сведения

LDAP (Lightweight Directory Access Protocol) — протокол для доступа к службам каталогов, который используется для хранения и управления учетными записями пользователей, группами и так далее. В данном разделе рассмотрены основные параметры настройки коннектора, а также приведены примеры конфигураций.

2. Строка подключения

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

userName=admin;password=Avanp0st;resourceid=freeipaigor;file=../ldapconnector.config.json

Параметры строки подключения:

Таблица — Параметры строки подключения

ПараметрОписание
userName

Маска для формирования имени учетной записи, от которой будет работать коннектор

Пример значения: admin

password

Пароль к учетной записи

Пример значения: Avanp0st

resourceid

Идентификатор ресурса

Пример значения: freeipaigor

file

Расположение файла конфигурации

Пример значения: ../ldapconnector.config.json

3. Файл конфигурации

Файл конфигурации содержит все необходимые настройки для работы LDAP-коннектора.

3.1. Основные параметры

Основные параметры определяют базовую конфигурацию коннектора.

Таблица — Основные параметры

Параметр Описание
resourceId

Идентификатор ресурса в системе

Пример значения: freeipa

userName

Маска для формирования имени учетной записи, от которой будет работать коннектор

Пример значения: uid={0},cn=users,cn=accounts,dc=fedora

baseDn

Корневой элемент, по которому осуществляется поиск

Пример значения: dc=fedora

provider

Тип LDAP-провайдера (например, FreeIPA или OpenLDAP).

Пример значения: FreeIPA

3.2. Настройки подключения (sessionOptions)

Настройки подключения определяют параметры для установления соединения с LDAP-сервером. 

Таблица — Настройки подключения

Параметр Описание
server

Адрес LDAP-сервера

Пример значения: 10.10.180.97

port

Порт сервера. По умолчанию 389

Пример значения: 389

useSsl

Флаг использования SSL/TLS для безопасного подключения

Пример значения: true (включено шифрованное соединение через SSL/TLS), false (отключено шифрованное соединение через SSL/TLS)

3.3. Настройки групп (groups)

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

Таблица — Настройки групп

Параметр Описание
objectClass

Классы групп, по которым осуществляется поиск

Пример значения: ipausergroup

objectKey

Атрибут, из которого будет извлекается идентификатор группы

Пример значения: ipaUniqueID

searchKey

Атрибут, по которому будет происходить поиск по имени

Пример значения: cn

memberAttribute

Атрибут, в котором хранятся члены группы

Пример значения: member

3.4. Настройки пользователей (users)

Настройки пользователей определяют, как коннектор будет находить, создавать и обновлять данные о пользователях

Таблица — Настройки пользователей

Параметр Описание
distinguishedName

 Маска для формирования DN пользователя

Пример значения:  uid={0},ou=ZAGS,dc=wsso,dc=local

objectClass

Классы пользователя, передаваемые при создании

Пример значения:  "ipaobject", "person", "top", "ipasshuser", "inetorgperson", "organizationalperson", "krbticketpolicyaux", "krbprincipalaux", "inetuser", "posixaccount", "ipaSshGroupOfPubKeys", "mepOriginEntry"

searchClass

Классы, по которым будет происходить поиск пользователя

Пример значения:  person

objectKey

Атрибут, из которого будет извлекаться идентификатор пользователя

Пример значения: uid

objectGroupKey

Атрибут пользователя, использующийся при поиске его групп в атрибутах группы

Пример значения: entryDn

searchUserGroups

Режим поиска групп пользователя

Пример значения: MemberOf (поиск групп в атрибуте пользователя), Member (поиск в атрибутах группы)

memberOfAttribute

Атрибут, в котором будут записываться группы пользователя.

Пример значения: memberUid

customSearchAllUsersLdapFilter

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

Пример значения: (&(cn=*)(uid=usr*))

3.5. Настройки блокировки/разблокировки пользователей (lockAttributes)

Параметры блокировки/разблокировки пользователя определяют, как коннектор будет управлять статусом учетных записей  активна или заблокирована. Настройки содержатся в массиве объектов lockAttributes, который является частью объекта users.

Таблица — Настройки блокировки/разблокировки пользователей 

ПараметрОписание
attributeKey

Имя атрибута, в котором хранится значение блокировки

Пример значения: nsaccountlock

lockValue

Значение, которое устанавливается при блокировке учетной записи. Поддерживает вычисляемые значения

Пример значения: true (указывает, что учетная запись заблокирована), false (указывает, что учетная запись не заблокирована (активна), вычисляемое значение (указывает дату, до которой учетная запись будет заблокирована)

Значения lockValue и unlockValue должны быть обратными друг другу.
Если lockValuetrue, то unlockValue должно быть false.
Если lockValuefalse, то unlockValue должно быть true.

unlockValue

Значение, которое устанавливается при разблокировке учетной записи. Поддерживает вычисляемые значения

Пример значения: true (указывает, что учетная запись разблокирована), false (указывает, что учетная запись заблокирована), вычисляемое значение (указывает дату, когда учетная запись будет разблокирована)

Значения lockValue и unlockValue должны быть обратными друг другу.
Если lockValuetrue, то unlockValue должно быть false.
Если lockValuefalse, то unlockValue должно быть true

enable

Включение или отключение использования атрибута 

Пример значения: true (атрибут используется для управления блокировкой или разблокировкой учетной записи), false (атрибут игнорируется, операции блокировки или разблокировки для данного атрибута не выполняются)

description

Опциональное описание атрибута 

Пример значения:

В настоящее время поддерживается следующих набор вычисляемых значений. Поддерживаемые символы: " ,:-/'a-zA-Z".

Таблица — Вычисляемые значения

Формат

Описание

d

Короткий формат даты

Пример формата: 15.06.2023

D

Длинный формат даты

Пример формата: четверг, 15 июня 2023 г.

f

Полный формат даты и короткое время

Пример формата: четверг, 15 июня 2023 г. 14:30

F

Полный формат даты и длинное время

Пример формата: четверг, 15 июня 2023 г. 14:30:45

g

Общий формат даты и короткое время

Пример формата: 15.06.2023 14:30

G

Общий формат даты и длинное время

Пример формата: 15.06.2023 14:30:45

o

Формат для точного сохранения данных о дате и времени (ISO 8601)

Пример формата: 2023-06-15T14:30:45.0000000+03:00

r

Формат RFC1123 (время UTC)

Пример формата: Thu, 15 Jun 2023 11:30:45 GMT

s

Формат сортируемой даты и времени (ISO 8601)

Пример формата: 2023-06-15T14:30:45

t

Короткий формат времени

Пример формата14:30

T

Длинный формат времени

Пример формата: 14:30:45

u

Универсальный сортируемый формат даты и времени (время UTC)

Пример формата: 2023-06-15 11:30:45Z

U

Универсальный полный формат даты и времени (время UTC)

Пример формата: четверг, 15 июня 2023 г. 11:30:45

y

Формат года и месяца

Пример формата: июнь 2023

3.6. Атрибуты пользователей (attributes)

Объект attributes в объекте users содержит массив объектов, из которых описывает отдельный атрибут пользователя.

Таблица — Настройка атрибутов пользователей

ПараметрОписание
name

Имя атрибута

Пример значения: userPassword

description

Описание атрибута

Пример значения: Пароль

required

Указывает, является ли атрибут обязательным для создания или обновления пользователя

Пример значения :true (атрибут является обязательным), false(атрибут не является обязательным)

format

Определяет формат значения атрибута пользователя

Пример значения: {userId}@fedora.ru

isPassword

Указывает, является ли данный атрибут паролем пользователя.

Пример значения: true (атрибут является паролем), false(атрибут не является паролем)

Если параметр isPassword не указан, то по умолчанию он принимает значение false

4. Пример файла конфигурации

```
[
  {
    "resourceId": "freeipa",
    "userName": "uid={0},cn=users,cn=accounts,dc=fedora",
    "baseDn": "dc=fedora",
    "provider": "FreeIPA",
    "sessionOptions": {
      "server": "10.10.180.97"
    },
    "groups": {
      "objectKey": "ipaUniqueID",
      "searchKey": "cn",
      "memberAttribute": "member",
      "objectClass": [ "ipausergroup" ]
    },
    "users": {
      "distinguishedName": "uid={0},cn=users,cn=accounts,dc=fedora",
      "lockAttributes": [
          {
            "attributeKey": "nsaccountlock",
            "lockValue": "TRUE",
            "unlockValue": "FALSE"
          }
      ],
      "memberOfAttribute": "memberOf",
      "searchUserGroups": "MemberOf",
      "objectKey": "uid",
      "objectGroupKey": "entryDn",
      "objectClass": [ "ipaobject", "person", "top", "ipasshuser", "inetorgperson", "organizationalperson", "krbticketpolicyaux", "krbprincipalaux", "inetuser", "posixaccount",         "ipaSshGroupOfPubKeys", "mepOriginEntry" ],
      "searchClass": [ "person" ],
      "customSearchAllUsersLdapFilter": "(&(cn=*)(uid=*))",
      "attributes": [
        {
          "name": "userPassword",
          "description": "Пароль",
          "required": true,
          "isPassword": true
        },
        {
          "name": "sn",
          "description": "Фамилия сотрудника",
          "required": false
        },
        {
          "name": "givenName",
          "description": "Имя сотрудника",
          "required": true
        },
        {
          "name": "cn",
          "required": true,
          "description": "Полное имя"
        },
        {
          "name": "displayName",
          "required": false,
          "description": "Отображаемое имя"
        },
        {
          "name": "krbPrincipalName",
          "required": true,
          "description": "Имя учетной записи Kerberos",
          "format": "{0}@FEDORA"
        },
        {
          "name": "initials",
          "required": false,
          "description": "Инициалы сотрудника"
        },
        {
          "name": "mail",
          "required": false,
          "description": "Адрес электронной почты",
          "format": "{userId}@fedora.ru"
        },
        {
          "name": "telephoneNumber",
          "required": false,
          "description": "Номер телефона"
        },
        {
          "name": "mobile",
          "required": false,
          "description": "Номер мобильного телефона"
        },
        {
          "name": "title",
          "required": false,
          "description": "Должность"
        },
        {
          "name": "ou",
          "required": false,
          "description": "Подразделение"
        },
        {
          "name": "employeeNumber",
          "required": false,
          "description": "Табельный номер сотрудника"
        },
        {
          "name": "manager",
          "required": false,
          "description": "Руководитель"
        },
        {
          "name": "homeDirectory",
          "required": true,
          "description": "Домашний каталог пользователя",
          "format": "/home/{0}"
        },
        {
          "name": "loginShell",
          "required": true,
          "description": "Оболочка входа"
        },
        {
          "name": "street",
          "required": false,
          "description": "Адрес: улица"
        },
        {
          "name": "l",
          "required": false,
          "description": "Адрес: город"
        },
        {
          "name": "st",
          "required": false,
          "description": "Адрес: область"
        },
        {
          "name": "gecos",
          "required": false,
          "description": "Дополнительная информация"
        }
      ]
    }
  },
  {
    "resourceId": "freeipaigor",
    "userName": "uid={0},cn=users,cn=accounts,dc=avanpost,dc=local",
    "baseDn": "dc=avanpost,dc=local",
    "provider": "FreeIPA",
    "sessionOptions": {
      "server": "10.10.180.105"
    },
    "groups": {
      "objectKey": "ipaUniqueID",
      "searchKey": "cn",
      "memberAttribute": "member",
      "objectClass": [ "ipausergroup" ]
    },
    "users": {
      "distinguishedName": "uid={0},cn=users,cn=accounts,dc=avanpost,dc=local",
       "lockAttributes": [
          {
            "attributeKey": "nsaccountlock",
            "lockValue": "TRUE",
            "unlockValue": "FALSE"
          }
      ],
      "memberOfAttribute": "memberOf",
      "searchUserGroups": "MemberOf",
      "objectKey": "uid",
      "objectGroupKey": "entryDn",
      "objectClass": [ "ipaobject", "person", "top", "ipasshuser", "inetorgperson", "organizationalperson", "krbticketpolicyaux", "krbprincipalaux", "inetuser", "posixaccount", "ipaSshGroupOfPubKeys", "mepOriginEntry" ],
      "searchClass": [ "person" ],
      "customSearchAllUsersLdapFilter": "(&(cn=*)(uid=*))",
      "attributes": [
        {
          "name": "userPassword",
          "description": "Пароль",
          "required": true,
          "isPassword": true
        },
        {
          "name": "sn",
          "description": "Фамилия сотрудника",
          "required": false
        },
        {
          "name": "givenName",
          "description": "Имя сотрудника",
          "required": true
        },
        {
          "name": "cn",
          "required": true,
          "description": "Полное имя"
        },
        {
          "name": "displayName",
          "required": false,
          "description": "Отображаемое имя"
        },
        {
          "name": "krbPrincipalName",
          "required": true,
          "description": "Имя учетной записи Kerberos",
          "format": "{0}@AVANPOST.LOCAL"
        },
        {
          "name": "initials",
          "required": false,
          "description": "Инициалы сотрудника"
        },
        {
          "name": "mail",
          "required": false,
          "description": "Адрес электронной почты",
          "format": "{userId}@avanpost.local.ru"
        },
        {
          "name": "telephoneNumber",
          "required": false,
          "description": "Номер телефона"
        },
        {
          "name": "mobile",
          "required": false,
          "description": "Номер мобильного телефона"
        },
        {
          "name": "title",
          "required": false,
          "description": "Должность"
        },
        {
          "name": "ou",
          "required": false,
          "description": "Подразделение"
        },
        {
          "name": "employeeNumber",
          "required": false,
          "description": "Табельный номер сотрудника"
        },
        {
          "name": "manager",
          "required": false,
          "description": "Руководитель"
        },
        {
          "name": "homeDirectory",
          "required": true,
          "description": "Домашний каталог пользователя",
          "format": "/home/{0}"
        },
        {
          "name": "loginShell",
          "required": true,
          "description": "Оболочка входа"
        },
        {
          "name": "street",
          "required": false,
          "description": "Адрес: улица"
        },
        {
          "name": "l",
          "required": false,
          "description": "Адрес: город"
        },
        {
          "name": "st",
          "required": false,
          "description": "Адрес: область"
        },
        {
          "name": "gecos",
          "required": false,
          "description": "Дополнительная информация"
        }
      ]
    }
  },
  {
    "username": "cn={0},dc=wsso,dc=local",
    "resourceId": "openldap",
    "provider": "OpenLdap",
    "baseDn": "dc=wsso,dc=local",
    "sessionOptions": {
      "server": "10.10.180.108"
    },
    "groups": {
      "objectKey": "cn",
      "searchKey": "cn",
      "memberAttribute": "memberUid",
      "objectClass": [ "posixGroup", "top" ]
    },
    "users": {
      "distinguishedName": "uid={0},ou=ZAGS,dc=wsso,dc=local",
       "lockAttributes": [
          {
            "attributeKey": "nsaccountlock",
            "lockValue": "TRUE",
            "unlockValue": "FALSE"
          }
      ],
      "memberOfAttribute": "memberUid",
      "searchUserGroups": "Member",
      "objectKey": "uid",
      "objectGroupKey": "entryDn",
      "objectClass": [ "top", "inetOrgPerson", "person", "posixAccount" ],
      "searchClass": [ "person" ],
      "customSearchAllUsersLdapFilter": "(&(cn=*)(uid=usr*))",
      "attributes": [
        {
          "name": "userPassword",
          "description": "Пароль",
          "required": true,
          "isPassword": true
        },
        {
          "name": "sn",
          "description": "Фамилия сотрудника",
          "required": true
        },
        {
          "name": "givenName",
          "description": "Имя сотрудника",
          "required": true
        },
        {
          "name": "cn",
          "required": true,
          "description": "Полное имя"
        },
        {
          "name": "homeDirectory",
          "description": "Домашний каталог",
          "required": true
        },
        {
          "name": "mail",
          "required": false,
          "description": "E-mail"
        },
        {
          "name": "loginShell",
          "required": true,
          "description": "Оболочка входа"
        },
        {
          "name": "gidNumber",
          "required": false,
          "description": "gidNumber"
        },
        {
          "name": "uidNumber",
          "required": false,
          "description": "uidNumber"
        }
      ]
    }
  }
]
```

Обсуждение