Настройка доменной авторизации в Zabbix


Настройка авторизации с использованием учетных данных Active Directory особой сложности не представляет и особо не отличается от других систем. Переходим "Administration -> Authentication"  и выбираем вкладку LDAP settings. На первой вкладке тип авторизации по умолчанию пока не меняем.

Как и в случае с другими рассмотренными нами приложениями, необходимо заполнить параметры подключения к LDAP-серверу:

Enable LDAP authentication

Разрешаем авторизацию с использованием учетных данных LDAP

LDAP host - ldaps://AD-1.internal.gita-dev.ru
Port - 636

Хост и порт где расположен LDAP-сервер

Base DN - OU=web-portal,DC=internal,DC=gita-dev,DC=ru

Верхний уровень от которого начинаем поиск пользователей

Search attribute - sAMAccountName

Атрибут по которому выполняем поиск пользователей (можно поменять на mail и использовать email пользователя для авторизации)

Bind DN - CN=ldap-manager,CN=Users,DC=internal,DC=gita-dev,DC=ru
Bind password - xxxPasswordxxx

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

Заполняем поля для проверки авторизации, обновляем параметры авторизации и проводим тест. Если все прошло успешно, то вы увидите сообщение LDAP login sucessful.

Возвращаемся к первой вкладке настроек авторизации и меняем предпочтительный тип авторизации на LDAP.

Самое главное на что необходимо обратить внимание! Вы должны создать пользователя в качестве локального и только после этого он сможет авторизоваться!

Пользователи автоматически не создаются!

Если вам потребуется аварийно переключиться на режим встроенной авторизации, то это можно сделать только прямым запросом к базе данных.

# update config set authentication_type=0;

В случае возникновения проблем с подключением к LDAP (в случае с Active Directory) создайте в корне каталога Zabbix Frontend PHP-файл следующего содержания:

<?php
$ldapurl="10.211.0.4";
$ldapuser="CN=ldap-manager,CN=Users,DC=internal,DC=gita-dev,DC=ru";
$ldappass="xxxPasswordxxx";

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);
$ldapconn = ldap_connect($ldapurl) or die ("Couldn't connect");
$ldapbind = ldap_bind($ldapconn, $ldapuser, $ldappass);
?>

Откройте его в браузере, или запустите в консоли. Но учтите, что при запуске из браузера чтобы увидеть сообщение о ошибке должно быть включено отображение ошибок. Запустите скрипт:

# php ./test.php

И если его выполнение приводит к ошибке:

PHP Warning:  ldap_bind(): Unable to bind to server: Strong(er) authentication required

То, немного модифицируем параметры полключения:

<?php
$ldapurl="ldaps://10.211.0.4:636";
...

Теперь, в случае ошибки обратите внимание на строки:

ldap_connect_to_host: Trying 10.211.0.4:636
ldap_pvt_connect: fd: 4 tm: -1 async: 0
attempting to connect:
connect success
TLS: peer cert untrusted or revoked (0x42)
TLS: can't connect: (unknown error code).

Сертификат нашего домена Active Directory не добавлен в доверенные и соответственно у нас есть два варианта как мы можем поступить. Первый вариант, это установить переменную окружения:

putenv('LDAPTLS_REQCERT=never');

Обычно конечно так и делают, но мы пойдем другим путем и импортируем сертификат LDAP-сервера в хранилище доверенных. Запрашиваем сертификат с сервера.

# apt-get install ca-certificates
# openssl s_client -showcerts -servername ad-1.internal.gita-dev.ru -connect ad-1.internal.gita-dev.ru:636 \
</dev/null 2> /dev/null | openssl x509 -text

Полученный сертификат записываем в хранилище доверенных сертификатов:

# mkdir /usr/local/share/ca-certificates/extra
# openssl s_client -showcerts -servername ad-1.internal.gita-dev.ru -connect ad-1.internal.gita-dev.ru:636 \
</dev/null 2>/dev/null | openssl x509 -text \
> /usr/local/share/ca-certificates/extra/ad-1.internal.gita-dev.ru.crt
# update-ca-certificates

Перепроверьте подключение при помощи нашего PHP-скрипта, но не забывайте использовать DNS-имя контроллера домена при подключении к серверу вместо его IP-адреса. В противном случае вы получите ошибку:

TLS: hostname (10.211.0.4) does not match common name in certificate (AD-1.internal.gita-dev.ru).