Для работы прозрачной доменной аутентификации (SSO) в Nginx необходимо установить пакеты
nginx и
nginx-spnego:
# apt-get install nginx nginx-spnego
Модуль SPNEGO для Nginx — это программный компонент для возможности прохождения аутентификации (Single Sign-On или SSO) через сервер LDAP.
Включить модуль http_auth_spnego:
# ln -s /etc/nginx/modules-available.d/http_auth_spnego.conf /etc/nginx/modules-enabled.d/
Перенести полученный на контроллере домене файл keytab на веб-сервер в каталог
/etc/nginx
. Установить права на файл keytab:
# chmod 644 /etc/nginx/nginx.keytab
Nginx должен иметь права на чтение keytab-файла, но не на его изменение.
Настроить аутентификацию в секции
server
файла конфигурации сайта:
server {
…
location /
{
root /var/www/html;
auth_gss on;
auth_gss_realm TEST.ALT; #имя Kerberos области
auth_gss_keytab /etc/nginx/nginx.keytab; #путь к keytab-файлу
auth_gss_service_name HTTP/web.test.alt; #имя используемого SPN
auth_gss_allow_basic_fallback off;
}
}
Описание опций:
auth_gss
— включение/отключение аутентификации;
auth_gss_keytab
— абсолютный путь к файлу keytab, содержащему учётные данные службы;
auth_gss_realm
— имя области Kerberos;
auth_gss_service_name
— имя субъекта-службы, используемое при получении учетных данных;
auth_gss_allow_basic_fallback
— включить/отключить базовую аутентификацию. При включённой базовой аутентификации (по умолчанию), если SSO не проходит (машина не в домене) разрешает обычный ввод логина и пароля. Если используется SPNEGO без SSL, рекомендуется отключить базовую аутентификацию, так как в этом случае пароль будет отправлен в виде открытого текста.
Перезапустить nginx:
# systemctl restart nginx
Если нужно авторизовать только определенный набор пользователей, можно использовать параметр
auth_gss_authorized_principal
. Можно указывать несколько записей, по одной на строку:
auth_gss_authorized_principal <username>@<realm>
auth_gss_authorized_principal <username2>@<realm>
Список пользователей также можно указать с помощью шаблона регулярного выражения в параметре
auth_gss_authorized_principal_regex
. Этот параметр можно использовать вместе с параметром
auth_gss_authorized_principal
:
auth_gss_authorized_principal <username>@<realm>
auth_gss_authorized_principal_regex ^(<username>)/(<group>)@<realm>$