[comment]: # ({9b3e99c3-64e71448})
# 2 LDAP

[comment]: # ({/9b3e99c3-64e71448})

[comment]: # ({d8164d18-28a1e9c5})
#### Обзор

Внешний LDAP сервис [authentication](/manual/web_interface/frontend_sections/users/authentication) Может быть использован для проверки логинов и паролей пользователей

Аутентификация LDAP в Zabbix работает как минимум с Microsoft Active Directory и OpenLDAP.

Если настроен только вход через LDAP, пользователь также должен существовать в Zabbix, однако его пароль из Zabbix использоваться не будет. Если аутентификация проходит успешно, Zabbix сопоставляет локальное имя пользователя с атрибутом имени пользователя, возвращаемым LDAP.

[comment]: # ({/d8164d18-28a1e9c5})

[comment]: # ({0ce2f718-3654e16b})
#### Подготовка пользователей

Можно настроить JIT (just-in-time) **подготовку пользователей** для пользователей LDAP.
В этом случае не требуется, чтобы пользователь уже существовал в Zabbix.
Учетная запись пользователя может быть создана при первом входе пользователя в Zabbix.

Когда пользователь LDAP вводит свой логин и пароль LDAP, Zabbix проверяет *default* LDAP-сервер, существует ли такой пользователь.
Если пользователь существует и еще не имеет учетной записи в Zabbix, в Zabbix создается новый пользователь, и он может войти в систему.

Пользователь, созданный с помощью JIT-подготовки, связан с LDAP-сервером (каталогом), который был установлен как default на момент создания.
Изменение default LDAP-сервера позже не изменяет и не обновляет LDAP-сервер, связанный с пользователями, которые уже были подготовлены.

:::noteimportant
Если JIT-подготовка включена, в вкладке *Authentication* необходимо указать группу пользователей для неподготовленных пользователей.
:::

JIT-подготовка также позволяет обновлять подготовленные учетные записи пользователей на основе изменений в LDAP.
Например, если пользователь перемещен из одной LDAP-группы в другую, в Zabbix он также будет перемещен из одной группы в другую; если пользователь удален из LDAP-группы, он также будет удален из группы в Zabbix и, если не принадлежит ни к какой другой группе, добавлен в группу пользователей для неподготовленных пользователей.
Подготовленные учетные записи пользователей обновляются на основе настроенного [периода подготовки](#configuration) или при входе пользователя в Zabbix.

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

LDAP поддерживает три способа привязки к каталогу для аутентификации и поиска:

-   Анонимная привязка — не указан *Bind DN* / *Bind password*, и LDAP-сервер разрешает анонимные запросы.
-   Выделенный пользователь привязки (служебная учетная запись) — в *Bind DN* / *Bind password* указан конкретный LDAP-аккаунт, который используется Zabbix для поиска и подготовки.
Это рекомендуемый и наиболее гибкий вариант, поскольку Zabbix может выполнять поиск и фоновую подготовку без учетных данных конечного пользователя.
-   Прямая привязка пользователя — Zabbix выполняет привязку, используя учетные данные, которые пользователь вводит при входе в систему (не настроены *Bind DN* / *Bind password*); это настраивается путем включения заполнителя, например `uid=%{user}`, в Base DN.
В этом режиме Zabbix имеет доступ только к паролю пользователя во время интерактивного входа.
В результате действия подготовки, требующие аутентификации в LDAP вне сеанса входа пользователя (например, использование кнопки [*Provision now*](/manual/web_interface/frontend_sections/users/user_list#mass-editing-options) или запуск фоновой подготовки, когда пользователь не вошел в систему), не могут пройти аутентификацию и, следовательно, не будут работать.
Подготовка и обновления при прямой привязке пользователя выполняются только в момент входа пользователя в систему.

[comment]: # ({/0ce2f718-3654e16b})

[comment]: # ({df61670c-c7234b3e})
#### Несколько серверов

При необходимости можно определить несколько LDAP-серверов.
Например, для аутентификации разных групп пользователей можно использовать разные серверы.
После настройки LDAP-серверов в конфигурации [группы пользователей](/manual/config/users_and_usergroups/usergroup#configuration) становится возможным выбрать нужный LDAP-сервер для соответствующей группы пользователей.

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

[comment]: # ({/df61670c-c7234b3e})

[comment]: # ({7e373a5b-e085db50})
#### Конфигурация

![](../../../../../../assets/en/manual/web_interface/frontend_sections/users/auth_ldap.png)

Параметры конфигурации:

|Parameter|Description|
|--|--------|
|*Enable LDAP authentication*|Установите флажок, чтобы включить аутентификацию LDAP.|
|*Enable JIT provisioning*|Установите флажок, чтобы включить JIT provisioning.|
|*Servers*|Нажмите *Add*, чтобы настроить LDAP server (см. [Конфигурация LDAP server](#ldap-server-configuration) ниже).|
|*Case-sensitive login*|Снимите флажок, чтобы отключить чувствительность имени пользователя к регистру (по умолчанию включено).<br>Отключение чувствительности имени пользователя к регистру позволяет, например, войти как "admin", даже если пользователь Zabbix — "Admin" или "ADMIN".<br>Обратите внимание: если чувствительность имени пользователя к регистру отключена и существует несколько пользователей Zabbix с похожими именами (например, Admin и admin), вход для таких пользователей всегда будет запрещен со следующим сообщением об ошибке: "Authentication failed: supplied credentials are not unique."|
|*Provisioning period*|Укажите период provisioning, то есть как часто вошедший в систему пользователь будет проходить provisioning при работе с веб-интерфейсом.|

[comment]: # ({/7e373a5b-e085db50})

[comment]: # ({250025f6-9c2f07ee})
#### Конфигурация LDAP-сервера

![](../../../../../../assets/en/manual/web_interface/frontend_sections/users/auth_ldap_server.png)

Параметры конфигурации LDAP-сервера:

|Parameter|Description|
|--|--------|
|*Name*|Имя LDAP-сервера в конфигурации Zabbix.|
|*Host*|Имя хоста, IP-адрес или URI LDAP-сервера. Примеры: ldap.example.com, 127.0.0.1, ldap://ldap.example.com<br>Для защищенного LDAP-сервера используйте протокол *ldaps* и имя хоста. Пример: ldaps://ldap.example.com<br>В OpenLDAP 2.x.x и более поздних версиях можно использовать полный LDAP URI вида ldap://hostname:port или ldaps://hostname:port.|
|*Port*|Порт LDAP-сервера. По умолчанию 389.<br>Для защищенного LDAP-соединения номер порта обычно 636.<br>Не используется при применении полных LDAP URI.|
|*Base DN*|Базовый путь к учетным записям пользователей на LDAP-сервере:<br>ou=Users,ou=system (для OpenLDAP),<br>DC=company,DC=com (для Microsoft Active Directory)<br> uid=%{user},dc=example,dc=com (для прямой привязки пользователя, см. примечание ниже)|
|*Search attribute*|Атрибут учетной записи LDAP, используемый для поиска:<br>uid (для OpenLDAP),<br>sAMAccountName (для Microsoft Active Directory)|
|*Bind DN*|Учетная запись LDAP для привязки и поиска на LDAP-сервере, примеры:<br>uid=ldap\_search,ou=system (для OpenLDAP),<br>CN=ldap\_search,OU=user\_group,DC=company,DC=com (для Microsoft Active Directory)<br>Также поддерживается анонимная привязка. Обратите внимание, что анонимная привязка потенциально открывает конфигурацию домена для неавторизованных пользователей (информация о пользователях, компьютерах, серверах, группах, службах и т. д.). В целях безопасности отключите анонимные привязки на LDAP-хостах и используйте вместо этого аутентифицированный доступ.|
|*Bind password*|Пароль LDAP-учетной записи для привязки и поиска на LDAP-сервере.|
|*Description*|Описание LDAP-сервера.|
|*Configure JIT provisioning*|Отметьте этот флажок, чтобы показать параметры, связанные с JIT provisioning.|
|*Group configuration*|Выберите метод настройки групп:<br>**memberOf** - путем поиска пользователей и их атрибута членства в группе<br>**groupOfNames** - путем поиска групп через атрибут member<br>Обратите внимание, что memberOf предпочтительнее, так как он работает быстрее; используйте groupOfNames, если ваш LDAP-сервер не поддерживает `memberOf` или требуется фильтрация групп.|
|*Group name attribute*|Укажите атрибут, из которого будет получено имя группы для всех объектов в атрибуте `memberOf` (см. поле *User group membership attribute*)<br>Имя группы необходимо для сопоставления групп пользователей.|
|*User group membership attribute*|Укажите атрибут, содержащий информацию о группах, к которым принадлежит пользователь (например, `memberOf`).<br>Например, атрибут memberOf может содержать такую информацию: `memberOf=cn=zabbix-admin,ou=Groups,dc=example,dc=com`<br>Это поле доступно только для метода memberOf.|
|*User name attribute*|Укажите атрибут, содержащий имя пользователя.|
|*User last name attribute*|Укажите атрибут, содержащий фамилию пользователя.|
|*User group mapping*|Сопоставьте шаблон группы пользователей LDAP с группой пользователей и ролью пользователя Zabbix.<br>Это необходимо для определения того, какую группу пользователей/роль получит созданный пользователь в Zabbix.<br>Нажмите *Add*, чтобы добавить сопоставление.<br>Поле *LDAP group pattern* поддерживает подстановочные знаки. Имя группы должно соответствовать существующей группе.<br>Если пользователь LDAP соответствует нескольким группам пользователей Zabbix, он становится участником всех этих групп.<br>Если пользователь соответствует нескольким ролям пользователей Zabbix, он получит ту, у которой самый высокий уровень прав.|
|*Media type mapping*|Сопоставьте атрибуты LDAP [media](/manual/config/notifications/media) пользователя (например, email) с пользовательскими media Zabbix для отправки уведомлений (значение атрибута используется как поле media [*Send to*](/manual/config/notifications/media#user-media)).|
|*Advanced configuration*|Нажмите заголовок *Advanced configuration*, чтобы отобразить дополнительные параметры конфигурации (см. ниже).|
|*StartTLS*|Отметьте флажок, чтобы использовать операцию StartTLS при подключении к LDAP-серверу. Соединение будет разорвано, если сервер не поддерживает StartTLS.<br>StartTLS нельзя использовать с серверами, которые используют протокол *ldaps*.|
|*Search filter*|Определите пользовательскую строку при аутентификации пользователя в LDAP. Поддерживаются следующие заполнители:<br>`%{attr}` - имя атрибута поиска (uid, sAMAccountName)<br>`%{user}` - значение имени пользователя для аутентификации<br>Например, чтобы выполнить поиск с учетом регистра в среде LDAP или Microsoft Active Directory, где поиск обычно не чувствителен к регистру, строку можно определить следующим образом:<br>`(%{attr}:caseExactMatch:=%{user})`.<br>Если фильтр не настроен, LDAP будет использовать значение по умолчанию: `(%{attr}=%{user})`.|

::: noteclassic
Чтобы настроить LDAP-сервер для **прямой привязки пользователя**, добавьте атрибут uid=%{user} к параметру *Base DN* (например, *uid=%{user},dc=example,dc=com*) и оставьте параметры *BindDN* и *Bind password* пустыми.
При аутентификации заполнитель %{user} будет заменен именем пользователя, введенным при входе в систему.<br>
При прямой привязке пользователя Zabbix имеет доступ только к учетным данным пользователя во время интерактивного входа в систему.
Поэтому задачи provisioning, которые выполняются без интерактивного входа в систему (например, кнопка *Provision now* или метод API [`user.provision`](/manual/api/reference/user/provision)), будут игнорировать пользователей, аутентифицирующихся с помощью прямой привязки пользователя, поскольку Zabbix не может выполнить привязку от их имени.
Используйте анонимную привязку или отдельного пользователя для привязки (служебную учетную запись), если вам нужно, чтобы provisioning и LDAP-поиск работали из веб-интерфейса без необходимости входа конечного пользователя в систему.
:::

Следующие поля относятся только к "groupOfNames" как методу *Group configuration*:

![](../../../../../../assets/en/manual/web_interface/frontend_sections/users/auth_ldap_server2.png)

|Parameter|Description|
|--|--------|
|*Group base DN*|Базовый путь к группам на LDAP-сервере.|
|*Group name attribute*|Укажите атрибут, из которого будет получено имя группы в указанном базовом пути к группам.<br>Имя группы необходимо для сопоставления групп пользователей.|
|*Group member attribute*|Укажите атрибут, содержащий информацию об участниках группы в LDAP (например, `member`).|
|*Reference attribute*|Укажите ссылочный атрибут для фильтра группы (см. поле *Group filter*).<br>Затем используйте `%{ref}` в фильтре группы, чтобы получить значения для указанного здесь атрибута.|
|*Group filter*|Укажите фильтр для получения группы, участником которой является пользователь.<br>Например, `(member=uid=%{ref},ou=Users,dc=example,dc=com)` будет соответствовать "User1", если атрибут member группы равен `uid=User1,ou=Users,dc=example,dc=com`, и вернет группу, участником которой является "User1".|

::: notewarning
В случае проблем с сертификатами, чтобы защищенное LDAP-соединение (ldaps) заработало, может потребоваться добавить строку `TLS_REQCERT allow` в файл конфигурации /etc/openldap/ldap.conf.
Это может снизить безопасность соединения с LDAP-каталогом.
:::

::: notetip
Рекомендуется создать отдельную LDAP-учетную запись (*Bind DN*) для выполнения привязки и поиска на LDAP-сервере с минимальными привилегиями в LDAP вместо использования реальных учетных записей пользователей (используемых для входа в веб-интерфейс Zabbix).<br>
Такой подход обеспечивает более высокий уровень безопасности и не требует изменения *Bind password*, когда пользователь меняет свой пароль на LDAP-сервере.<br>
В таблице выше это учетная запись *ldap\_search*.
:::

[comment]: # ({/250025f6-9c2f07ee})

[comment]: # ({6b688a6e-5c3e92b7})
##### Проверка доступа

Кнопка *Test* позволяет проверить доступ пользователя:

|Parameter|Description|
|--|--------|
|*Login*|Имя пользователя LDAP для проверки (предварительно заполнено текущим именем пользователя из веб-интерфейса Zabbix). Это имя пользователя должно существовать на сервере LDAP.<br>Zabbix не активирует аутентификацию LDAP, если не сможет выполнить проверку подлинности тестового пользователя.|
|*User password*|Пароль пользователя LDAP для проверки.|

[comment]: # ({/6b688a6e-5c3e92b7})
