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

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


misc:spnego

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
misc:spnego [20.06.2026 19:33] nikolaymisc:spnego [22.06.2026 12:00] (текущий) – [Linux] nikolay
Строка 9: Строка 9:
 timedatectl list-timezones timedatectl list-timezones
 </code> </code>
-  - Устанавливаем NTP-клиент Chrony<code bash>+  - Установить NTP-клиент Chrony<code bash>
 apt install chrony apt install chrony
 </code> </code>
-  - Настраиваем список NTP-серверов для синхронизации времени в файле **/etc/chrony/chrony.conf**<code>+  - Настроить список NTP-серверов для синхронизации времени в файле **/etc/chrony/chrony.conf**<code>
 ... ...
 pool domain.local pool domain.local
Строка 18: Строка 18:
 ... ...
 </code>В данном случае указываем либо список IP-адресов (доменных имен) NTP-серверов в каждой строчке, либо просто указываем имя домена </code>В данном случае указываем либо список IP-адресов (доменных имен) NTP-серверов в каждой строчке, либо просто указываем имя домена
-  - Запускаем демон chrony<code bash> +  - Запустить демон chrony<code bash> 
-systemctl enable chronyd --now+systemctl enable chrony --now
 </code> </code>
  
Строка 26: Строка 26:
 <note important>Скомпилировать модуль по инструкции можно на другом ПК скопировав потом файл **ngx_http_auth_spnego_module.so**</note> <note important>Скомпилировать модуль по инструкции можно на другом ПК скопировав потом файл **ngx_http_auth_spnego_module.so**</note>
  
-  - Проверяем установленную версию NGINX:<code bash>+  - Проверить установленную версию NGINX:<code bash>
 nginx -V nginx -V
 </code> </code>
-  - Устанавливаем необходимые пакеты<code bash>+  - Установить необходимые пакеты<code bash>
 apt install git build-essential libpcre++-dev zlib1g-dev libkrb5-dev libssl-dev libxslt-dev libgd-dev apt install git build-essential libpcre++-dev zlib1g-dev libkrb5-dev libssl-dev libxslt-dev libgd-dev
 </code> </code>
-  - Скачиваем и распаковываем исходники nginx согласно установленной версии<code bash>+  - Скачать и распаковать исходники nginx согласно установленной версии<code bash>
 cd ~ cd ~
 mkdir nginx-dev mkdir nginx-dev
Строка 39: Строка 39:
 tar -xzvf nginx-1.xx.x.tar.gz tar -xzvf nginx-1.xx.x.tar.gz
 </code> </code>
-  - Скачиваем и компилируем динамический модуль SPNEGO<code bash>+  - Скачать и скомпилировать динамический модуль SPNEGO<code bash>
 cd ~/nginx-dev cd ~/nginx-dev
 git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git
Строка 68: Строка 68:
  
 <note important>Настройка приведена для Windows Server 2016 и выше</note> <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.1781973184.txt.gz · Последнее изменение: nikolay