Настройка SSO (Single Sign On) авторизации на Apache в Active Directory (Debian 8 Jessie/Ubuntu Server 14.04)

SSO (Single Sing-on) – позволяет пользователям вошедшим в систему не вводить пароль при авторизации на доменных сетевых ресурсах. Этот же механизм можно запросто прикрепить к Apache, что бы позволить доменным пользователям проходить аутентификацию, например на внутреннем сайте компании, не вводя имя пользователя и пароль.

 

Исходные данные:

  • Контроллер домена (DC1) на Windows Server 2012 R2, домен JAKONDA.LOCAL
  • Веб-сервер (webserver) (Apache 2.4.10) на Debian 8 Jessie

 

Настройка системы (Debian 8 Jessie)

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле (/etc/hostname):

webserver.jakonda.local

 

Настраиваем синхронизацию времени с контроллером домена, выполняем установку NTP, выполняем синхронизацию времени с контроллером домена:

apt-get install ntp ntpdate

ntpdate dc1.jakonda.local
Более подробно о синхронизации времени на Debian 8 Jessie/Ubuntu Server 14.04 можно почитать в этой статье

 

Настройка Active Directory (Windows Server 2012 R2)

В DNS зону (JAKONDA.LOCAL), добавляем A-запись веб-сервера:

 

Создаем служебного пользователя (прим. apache), с бесконечным срок действия пароля.

 

Создаем KEYTAB-файл (необходим для аутентификации пользователей в Active Directory). В командной строке с правами администраторы выполняем команду (соблюдая регистр):

ktpass -princ HTTP/webserver.jakonda.local@JAKONDA.LOCAL -mapuser apache@JAKONDA.LOCAL -pass Aa1234567 -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -out C:\webserver.keytab

 

Полученный KEYTAB-файл, передаем любым удобным способом на Веб-сервер (расположение KEYTAB-файла на моем веб-сервере — /etc/webserver.keytab). Как передать файл посредством утилиты PuTTY можно прочитать тут

 

Настройка Kerberos (Debian 8 Jessie)

Установка пакетов для поддержки аутентификации Kerberos:

apt-get install krb5-user libapache2-mod-auth-kerb
В ходе установки может появится запрос указать область по-умолчанию для Kerberos, область необходимо его указать в заглавном виде (прим. JAKONDA.LOCAL)

 

Файл конфигурации 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/webserver.keytab
 dns_lookup_kdc = false
 dns_lookup_realm = false
 forwardable = true
 ticket_lifetime = 24h

[realms]
 JAKONDA.LOCAL = {
 kdc = dc1.jakonda.local
 default_domain = JAKONDA.LOCAL
 admin_server = dc1.jakonda.local
 }

[domain_realm]
 .jakonda.local = JAKONDA.LOCAL
 jakonda.local = JAKONDA.LOCAL

 

Проверка работы Kerberos, выполним авторизацию в Active Directory:

kinit -kV -p HTTP/webserver.jakonda.local

Using default cache: /tmp/krb5cc_0
Using principal: HTTP/webserver.jakonda.local@JAKONDA.LOCAL
Authenticated to Kerberos v5

Удаляем полученный билет:

kdestroy

 

Настройка Apache (Debian 8 Jessie)

Выставляем права на KEYTAB-файл для веб-сервера:

chown root:www-data /etc/webserver.keytab
chmod 640 /etc/webserver.keytab

 

В качестве примера Kerberos аутентификации в Apache, в конфигурацию веб-сервера по-умолчанию (000-default.conf), добавляем:

<VirtualHost *:80>
 # ... ServerName webserver.jakonda.local

  <Location /> 
    AuthType Kerberos 
    AuthName "Kerberos authenticated intranet" 
    KrbAuthRealms JAKONDA.LOCAL 
    KrbServiceName HTTP/webserver.jakonda.local 
    Krb5Keytab /etc/kerberos.keytab 
    KrbMethodNegotiate On 
    KrbMethodK5Passwd On 
    require valid-user 
  </Location> 
</VirtualHost>

 

Чтобы SSO аутентификации проходила корректно, необходимо добавить веб-сервер в зону местной интрасети:

 

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Оставить ответ

один × пять =