Инструменты пользователя

Инструменты сайта


misc:spnego

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
misc:spnego [20.06.2026 18:43] – создано nikolaymisc:spnego [22.06.2026 12:00] (текущий) – [Linux] nikolay
Строка 1: Строка 1:
-====== Прозрачная авторизация доменного пользователя через nginx  ======+====== Прозрачная авторизация доменного пользователя через NGINX  ====== 
 + 
 +<note important>Инструкция написана для Ubuntu 24.04</note> 
 + 
 +===== Настройка времени ===== 
 +  - Настройка временной зоны: <code bash> 
 +timedatectl set-timezone Europe/Moscow 
 +</code>Просмотреть список временных зон можно командой:<code bash> 
 +timedatectl list-timezones 
 +</code> 
 +  - Установить NTP-клиент Chrony<code bash> 
 +apt install chrony 
 +</code> 
 +  - Настроить список NTP-серверов для синхронизации времени в файле **/etc/chrony/chrony.conf**<code> 
 +... 
 +pool domain.local 
 +# pool 
 +... 
 +</code>В данном случае указываем либо список IP-адресов (доменных имен) NTP-серверов в каждой строчке, либо просто указываем имя домена 
 +  - Запустить демон chrony<code bash> 
 +systemctl enable chrony --now 
 +</code> 
 + 
 +===== Сборка динамического модуля SPNEGO для NGINX ===== 
 + 
 +<note important>Скомпилировать модуль по инструкции можно на другом ПК скопировав потом файл **ngx_http_auth_spnego_module.so**</note> 
 + 
 +  - Проверить установленную версию NGINX:<code bash> 
 +nginx -V 
 +</code> 
 +  - Установить необходимые пакеты<code bash> 
 +apt install git build-essential libpcre++-dev zlib1g-dev libkrb5-dev libssl-dev libxslt-dev libgd-dev 
 +</code> 
 +  - Скачать и распаковать исходники nginx согласно установленной версии<code bash> 
 +cd ~ 
 +mkdir nginx-dev 
 +cd nginx-dev 
 +wget https://nginx.org/download/nginx-1.xx.x.tar.gz 
 +tar -xzvf nginx-1.xx.x.tar.gz 
 +</code> 
 +  - Скачать и скомпилировать динамический модуль SPNEGO<code bash> 
 +cd ~/nginx-dev 
 +git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git 
 +cd nginx-1.xx.x 
 +./configure --with-compat --add-dynamic-module=../spnego-http-auth-nginx-module 
 +make modules 
 +</code>В папке **objs** должен появиться файл **ngx_http_auth_spnego_module.so** 
 + 
 +===== Установка динамического модуля SPNEGO ===== 
 + 
 +  - Скопировать скомпилированный модуль **ngx_http_auth_spnego_module.so**<code bash> 
 +mkdir -p /usr/lib/nginx/modules 
 +cp path/to/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules/ 
 +</code> 
 +  - Создать конфигурационный файл для модуля<code bash> 
 +vi /etc/nginx/modules-available/spnego-http-auth-nginx-module.conf 
 +</code> 
 +  - Прописать в файл загрузку модуля<code> 
 +load_module "/usr/lib/nginx/modules/ngx_http_auth_spnego_module.so"; 
 +</code> 
 +  - Включить модуль для nginx<code bash> 
 +cd /etc/nginx/modules-enabled 
 +ln -s ../modules-available/spnego-http-auth-nginx-module.conf 
 +systemctl reload nginx 
 +</code> 
 + 
 +===== Интеграция с Active Directory ===== 
 + 
 +<note important>Настройка приведена для Windows Server 2016 и выше</note> 
 + 
 +==== Windows ==== 
 +  - Создать нового пользователя для SPNEGO 
 +  - Открыть свойства созданного пользователя 
 +  - Перейти во вкладку **Учетная запись** 
 +  - В разделе **Параметры учетной записи** поставить галки: 
 +    * Запретить смену пароля пользователем 
 +    * Срок действия пароля не ограничен 
 +    * Данная учетная запись поддерживает 256-разрядное 
 +  - Открыть консоль cmd или Power Shell 
 +  - Выполнить команды<code powershell> 
 +ktpass -princ host/foo.domain.local@DOMAIN.LOCAL -mapuser spnego_user@DOMAIN.LOCAL -pass * -out host.keytab -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 
 +ktpass -princ HTTP/foo.domain.local@DOMAIN.LOCAL -mapuser spnego_user@DOMAIN.LOCAL -pass * -out http.keytab -ptype KRB5_NT_PRINCIPAL -crypto AES256-SHA1 
 +</code>где **foo.domain.local** - адрес сайта, **spnego_user** - пользователь для SPNEGO 
 +  - Проверяем корректность SPN<code powershell> 
 +setspn -Q */foo.domain.local 
 +</code>где **foo.domain.local** - адрес сайта 
 +  - Если всё верно, то должно вывести примерно следующее<code> 
 +Checking domain DC=domain,DC=local 
 +  CN=...,OU=...,DC=domain,DC=local 
 +          HTTP/foo.domain.local 
 +          host/foo.domain.local 
 +</code> 
 + 
 +==== Linux ==== 
 +  - Установить пакеты<code bash> 
 +apt install krb5-user krb5-multidev libkrb5-dev 
 +</code> 
 +  - Изменить настройки **/etc/krb5.conf**, указав корректные данные<code ini> 
 +[libdefaults] 
 +        default_realm = DOMAIN.LOCAL 
 +        default_tgs_enctypes = aes256-cts-hmac-sha1-96 
 +        default_tkt_enctypes = aes256-cts-hmac-sha1-96 
 +        kdc_timesync = 1 
 +        ccache_type = 4 
 +        forwardable = false 
 +        proxiable = false 
 +        ticket_lifetime = 24h 
 +        default_keytab_name  = FILE:/etc/krb5.keytab 
 + 
 +... 
 +[realms] 
 +... 
 +  DOMAIN.LOCAL = { 
 +        kdc            = dc.domain.local 
 +        admin_server   = dc.domain.local 
 +        default_domain = domain.local 
 +    } 
 +... 
 +[domain_realm] 
 +... 
 +        .domain.local = DOMAIN.LOCAL 
 +        domain.local = DOMAIN.LOCAL 
 +</code> 
 +  - Скопировать полученные файлы **host.keytab** и **http.keytab** 
 +  - Объединить файлы в единый файл **krb5.keytab** при помощи **ktutil**<code> 
 +# ktutil 
 +ktutil: rkt host.keytab 
 +ktutil: rkt http.keytab 
 +ktutil: wkt /etc/krb5.keytab 
 +ktutil: quit 
 +</code> 
 +  - Проверить корректность созданного keytab-файла<code bash> 
 +klist -kt /etc/krb5.keytab 
 +</code>Должно вывести примерно следующее<code> 
 +Keytab name: FILE:/etc/krb5.keytab 
 +  KVNO Timestamp         Principal 
 +  ---- ----------------- -------------------------------------------------------- 
 +  1 02/19/13 04:02:48 host/foo.domain.local@DOMAIN.LOCAL 
 +  2 02/19/13 04:02:48 HTTP/foo.domain.local@DOMAIN.LOCAL 
 +</code> 
 +  - Проверить возможность авторизации при помощи keytab-файла без пароля<code bash> 
 +kinit -5 -V -k -t /etc/krb5.keytab HTTP/foo.domain.local 
 +</code>При успешной авторизации должно вывести<code> 
 +Authenticated to Kerberos v5 
 +</code> 
 +  - Установим правильные права для **/etc/ktb5.keytab**<code bash> 
 +chmod 440 /etc/krb5.keytab 
 +chown root:www-data /etc/krb5.keytab 
 +</code> 
 + 
 +===== Настройка аутентификации на NGINX ===== 
 +  - Создать конфигурационный файл для сайта в **/etc/nginx/sites-avaliable/site-name**<code nginx> 
 +server { 
 +  ... 
 +  server_name foo.domain.local; 
 +  ... 
 +  auth_gss                on; 
 +  auth_gss_realm          DOMAIN.LOCAL; 
 +  auth_gss_keytab         /etc/krb5.keytab; 
 +  auth_gss_service_name   HTTP/foo.domain.local; 
 + 
 +  auth_gss_allow_basic_fallback off; 
 +
 +</code> 
 +  - Включить сайт<code bash> 
 +cd /etc/nginx/sites-enabled 
 +ln -s ../sites-available/site-name 
 +systemctl reload nginx</code> 
 + 
 +===== Настройка клиентских ПК ===== 
 + 
 +==== Firefox ==== 
 +  - Ввести ''about:config'' в строку адреса 
 +  - Добавить/изменить адрес сайта в параметр ''network.negotiate-auth.trusted-uris''  
 +  - Убедиться, что параметр ''network.negotiate-auth.using-native-gsslib'' выставлен в ''true'' 
 + 
 +==== Прочие браузеры ==== 
 +  - Перейти в **Панель управления** и выбрать **Свойства браузера** 
 +  - В открывшемся окне выбрать вкладку **Безопасность** 
 +  - Выбрать зону безопасности **Местная интрасеть** и нажать на кнопку **Сайты** 
 +  - В новом окне нажать кнопку **Дополнительно** 
 +  - Добавить адрес сайта 
  
misc/spnego.1781970181.txt.gz · Последнее изменение: nikolay