В Zabbix аутентификацию Kerberos можно использовать в веб-мониторинге и HTTP элементах данных.
На этой странице описывается пример настройки Kerberos для выполнения Zabbix сервером веб-мониторинга страницы www.example.com с использованием принципала Kerberos для процесса Zabbix в Debian/Ubuntu.
1. Установите KDC и клиентские утилиты:
Во время настройки пакетов ответьте на вопросы, например:
Default Kerberos version 5 realm: EXAMPLE.COM
Kerberos servers for your realm: localhost (или ваш FQDN)
Administrative server for your Kerberos realm: localhost (или ваш FQDN)2. Укажите удобное имя хоста (необязательно, для локального тестирования).
Если у вас нет DNS, отредактируйте /etc/hosts и добавьте записи для вашего контроллера домена и веб-сервера:
Пример строки, которую вы могли бы добавить:
3. Настройте клиента Kerberos и KDC realm:
Пример настроек:
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
rdns = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = dc01.example.com
admin_server = dc01.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COMЕсли вы планируете использовать .localdomain или другие непубличные имена, добавьте явное отображение домен→realm, чтобы работало отображение имя_хоста→realm. Несоответствия здесь приводят к ошибкам Server not found in Kerberos database («Сервер не найден в базе данных Kerberos»).
4. Инициализируйте базу данных Kerberos (одноразово, хост KDC). При появлении соответствующего запроса задайте надежный главный пароль (master password):
5. Создайте принципал HTTP/host.fqdn@REALM, используя точное имя хоста, которое будет использовать клиент; предпочтительно в нижнем регистре (например, HTTP/[email protected]). Несоответствие в регистре/имени приводит к ошибке Server not found in Kerberos database.
Внутри kadmin.local:
addprinc [email protected] # административный принципал
addprinc -randkey HTTP/[email protected]
ktadd -k /etc/apache2/http.keytab HTTP/[email protected]
quitПоместите keytab-файл на веб-хост (или оставьте локально, если он на той же машине) и задайте права доступа для использования сервером Apache:
chown www-data:www-data /etc/apache2/http.keytab
chmod 600 /etc/apache2/http.keytab
# проверка
sudo -u www-data -k /etc/apache2/http.keytab6. Установите и подключите модуль Apache GSSAPI:
sudo apt install libapache2-mod-auth-gssapi
sudo a2enmod auth_gssapi
sudo a2enmod headers
sudo systemctl restart apache2Не все версии mod_auth_gssapi поддерживают каждую директиву Gssapi*. Если Apache выдаёт ошибку Invalid command 'GssapiCredStore', удалите неподдерживаемую директиву или обновите модуль.
7. Настройте VirtualHost (измените DocumentRoot / путь к веб-интерфейсу вашего Zabbix):
Внутри zabbix.conf:
<VirtualHost *:80>
ServerName dc01.example.com
DocumentRoot /usr/share/zabbix/ui
<Directory /usr/share/zabbix/ui>
Options FollowSymLinks
AllowOverride None
Require all granted
AuthType GSSAPI
AuthName "Kerberos Login"
GssapiCredStore keytab:/etc/apache2/http.keytab
GssapiLocalName On
Require valid-user
</Directory>
RequestHeader set X-Remote-User %{REMOTE_USER}s env=REMOTE_USER
RequestHeader unset Authorization
</VirtualHost>Перезапустите Apache:
8. Активируйте/запустите службы KDC и проверьте прослушиваемые порты (хост KDC):
sudo systemctl enable --now krb5-kdc krb5-admin-server
ss -tnlp | grep :88 # или: sudo netstat -tnlp | grep :889. Получите TGT для тестирования (запустите от имени пользователя, который будет использовать этот мандат).
Ожидаем увидеть krbtgt/[email protected] в списке мандатов. Выполните kinit от имени того пользователя операционной системы, которому нужен мандат (например, zabbix для веб-проверок или www-data/Apache для проверок SSO интерактивного браузера). Мандаты, выданные другому пользователю операционной системы, не будут видны без модификации KRB5CCNAME и прав доступа.
kinit [email protected]
klist10. Протестируем обмен SPNEGO с помощью curl (от клиента с корректным TGT). Ответ 200 OK (либо перенаправление на приложение) означает успешное SPNEGO:
11. При желании, если веб-интерфейс Zabbix должен принимать входы с HTTP-аутентификацией, активируйте HTTP аутентификацию в веб-интерфейсе Zabbix (ui/conf/zabbix.conf.php):
В веб-интерфейсе перейдите к Пользователи → Аутентификация (Users → Authentication) и перейдите к вкладке Настройки HTTP (HTTP settings). Отметьте флажок Активация HTTP аутентификации (Enable HTTP authentication) и нажмите Ok во всплывающем окне. В выпадающем окне Диалог входа в систему по умолчанию (Default login form) выберите «HTTP диалог входа в систему (HTTP login form)». Решите, соответствует ли Регистрозависимый вход (Case-sensitive login) вашей политике каталога. Нажмите кнопку Обновить (Update) для завершения.
12. Настройки браузера (в качестве примера используется Firefox): установите network.negotiate-auth.trusted-uris в хост(ы), выполняющие Negotiate (dc01.example.com), так что браузер будет автоматически посылать токены Kerberos.
Внутри about:config:
Теперь при посещении http://dc01.example.com вы должны попасть прямо в Zabbix без формы логина.
13. Сохраняйте ключи/мандаты свежими. По умолчанию время жизни мандата Kerberos составляет около 10 часов. Добавьте таймер cron/systemd, чтобы избежать истечения срока действия:
#для веб-службы
kinit -kt /etc/apache2/http.keytab HTTP/[email protected]
#для пользователя мониторинга
kinit -kt /var/lib/zabbix/kerb.keytab [email protected]14. Санитарные проверки:
klist -k /etc/apache2/http.keytab — убедиться, что служебный принципал присутствует в keytab-файле.sudo tail -f /var/log/apache2/error.log — посмотреть на ошибки GSSAPI (gss_acquire_cred[_from]() failed to get server creds означает проблемы с keytab-файлом/доступами либо отсутствующий принципал).curl --negotiate, часто возвращающий 401/403, означает неверный принципал, отсутствие мандата, несовпадение заголовка хоста либо проблемы с правами доступа в файловой системе; проверьте файлы журналов и отображение доменов /etc/krb5.conf.Keytab-файлы должны быть доступны на чтение только той учётной записи, которой они нужны. Пример доступов: 0400 с владельцем zabbix:zabbix для keytab-файла пользователя zabbix, либо 0440 и root:www-data для keytab-файла для Apache.
Избегайте хранения долговременных паролей в открытом виде на хосте. По возможности используйте keytab-файлы или принципалы машин, подключённых к домену.
При запуске тестов или скриптов, устанавливающих KRB5CCNAME или копирующих keytab-файлы, дважды проверьте владельцев и права доступа после операции — веб-сервер, отклоняющий учётные данные, обычно является проблемой с правами доступа к файлу.