Настройка Kerberos Single Sign-On (SSO) с GSSAPI на Debian 11 Bullseye.
Рассмотрим как настроить Kerberos Single Sign-On (SSO) с GSSAPI в Apache веб-сервере на Debian 11 Bullseye.
Исходные данные:
- Windows домен — jakonda.local
- Доменная служебная учетная запись — svc.web
- Linux машина — Debian 11
Сперва необходимо создать сервисную учетную запись (в моем случае это будет svc.web) и сгенерировать для нее KEYTAB-файл на домен контроллере Windows.
Делается все это командой ниже, не забываем подставить свои данные вместо моих.
ktpass -princ HTTP/web.jakonda.ru@JAKONDA.LOCAL -mapuser svc.web@JAKONDA.LOCAL -pass 3T2XgYCz2IFcBUo0altu -crypto ALL -ptype KRB5_NT_PRINCIPAL -out C:\Keytabs\svc.web.keytab
[stextbox id=’info’]ИНФОМАЦИЯ. где web.jakonda.ru — это имя веб-сервера на котором должна работать Kerberos SSO аутентификация, а JAKONDA.LOCAL это имя домена. Важно соблюдать регистр написания имени домена.[/stextbox]
Передаем сгенерированный KEYTAB-файл на Debian любым удобным способом и размещаем его в каталоге /etc, либо в любом другом безопасном месте месте.
Назначим права и уровень доступа к файлу:
chown root:www-data /etc/svc.web.keytab chmod 640 /etc/svc.web.keytab
Устанавливаем пакеты веб-сервера apache, модуль аутентификации gssapi для него и kerberos.
apt-get install apache2 apache2-utils libapache2-mod-auth-gssapi krb5-user
Выполняем настройку kerberos. Файл конфигурации /etc/krb5.conf приводим к виду ниже, с учетом подстановки своих значений.
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = JAKONDA.LOCAL default_keytab_name = /etc/svc.web.keytab dns_lookup_kdc = false dns_lookup_realm = false forwardable = true ticket_lifetime = 24h [realms] NORDRIM.LOCAL = { kdc = dc01.jakonda.local default_domain = JAKONDA.LOCAL admin_server = dc01.jakonda.local } [domain_realm] .jakonda.local = JAKONDA.LOCAL jakonda.local = JAKONDA.LOCAL
[stextbox id=’info’]ИНФОРМАЦИЯ. Важно соблюдать регистр написания имени домена как в приведенном примере выше. [/stextbox]
Для проверки что все настроено правильно и KEYTAB-файл валидный, можно выполнив команду:
kinit -V -k -t /etc/svc.web.keytab HTTP/web.jakonda.ru@JAKONDA.LOCAL Using default cache: /tmp/krb5cc_0 Using principal: HTTP/web.jakonda.ru@JAKONDA.LOCAL Using keytab: /etc/svc.web.keytab Authenticated to Kerberos v5
Если после выполнения команды, вывод такой же как и у меня, то значит все в порядке, можно приступать к конфигурации веб сервера.
Для теста работы Kerberos SSO аутентификации создадим файл /var/www/html/index.php со следующим содержанием:
<?php echo "<h2>Kerberos Auth</h2>"; echo "Auth type: " . $_SERVER['AUTH_TYPE'] . "<br />"; echo "Remote user: " . $_SERVER['REMOTE_USER'] . "<br />"; ?>
Создаем конфигурацию виртуального хоста /etc/apache2/sites-available/001-web.conf со следующим содержанием:
<VirtualHost *:80> ServerName web.jakonda.ru DocumentRoot /var/www/html DirectoryIndex index.php <Location /> AuthType GSSAPI AuthName "Kerberos Login" GssapiCredStore keytab:/etc/svc.web.keytab GssapiAcceptorName HTTP GssapiBasicAuth On GssapiLocalName On GssapiUseSessions On GssapiNegotiateOnce On Require valid-user </Location> </VirtualHost>
Включаем виртуальный хост и перезапускаем службу apache:
a2ensite 001-web.conf && /etc/init.d/apache2 restart
При входе на станицу web.jakonda.ru (в моем случае я авторизовался на Windows машине входящую в домен jakonda.local под доменным пользователем Jakonda) мой вывод будет следующим:
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Не совсем понятно на какой странице у вас запрашивает логин и пароль, keytab вы правильно сгенерировали ? Билет получаете ? Тестовый виртуальный хост делали, определяется ли remote user ?
Вроде правильно, ибо после выполнения команды на проверку валидности все также как в статье.
Запрашивает пароль как раз при попытке перейти на веб-страницу хоста, при вводе не авторизуется, не говоря уже о прозрачной авторизации. Соответственно, значение remote user даже не вижу.
Сделал все по Вашей инструкции, но при входе на страницу все равно просит ввести логин и пароль =(