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

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


misc:spnego

Это старая версия документа!


Прозрачная авторизация доменного пользователя через NGINX

Инструкция написана для Ubuntu 24.04

Настройка времени

  1. Настройка временной зоны:
    timedatectl set-timezone Europe/Moscow

    Просмотреть список временных зон можно командой:

    timedatectl list-timezones
  2. Устанавливаем NTP-клиент Chrony
    apt install chrony
  3. Настраиваем список NTP-серверов для синхронизации времени в файле /etc/chrony/chrony.conf
    ...
    pool domain.local
    # pool
    ...

    В данном случае указываем либо список IP-адресов (доменных имен) NTP-серверов в каждой строчке, либо просто указываем имя домена

  4. Запускаем демон chrony
    systemctl enable chronyd --now

Сборка динамического модуля SPNEGO для NGINX

Скомпилировать модуль по инструкции можно на другом ПК скопировав потом файл ngx_http_auth_spnego_module.so
  1. Проверяем установленную версию NGINX:
    nginx -V
  2. Устанавливаем необходимые пакеты
    apt install git build-essential libpcre++-dev zlib1g-dev libkrb5-dev libssl-dev libxslt-dev libgd-dev
  3. Скачиваем и распаковываем исходники nginx согласно установленной версии
    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
  4. Скачиваем и компилируем динамический модуль SPNEGO
    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

    В папке objs должен появиться файл ngx_http_auth_spnego_module.so

Установка динамического модуля SPNEGO

  1. Скопировать скомпилированный модуль ngx_http_auth_spnego_module.so
    mkdir -p /usr/lib/nginx/modules
    cp path/to/ngx_http_auth_spnego_module.so /usr/lib/nginx/modules/
  2. Создать конфигурационный файл для модуля
    vi /etc/nginx/modules-available/spnego-http-auth-nginx-module.conf
  3. Прописать в файл загрузку модуля
    load_module "/usr/lib/nginx/modules/ngx_http_auth_spnego_module.so";
  4. Включить модуль для nginx
    cd /etc/nginx/modules-enabled
    ln -s ../modules-available/spnego-http-auth-nginx-module.conf
    systemctl reload nginx

Интеграция с Active Directory

Настройка приведена для Windows Server 2016 и выше

Windows

  1. Создать нового пользователя для SPNEGO
  2. Открыть свойства созданного пользователя
  3. Перейти во вкладку Учетная запись
  4. В разделе Параметры учетной записи поставить галки:
    • Запретить смену пароля пользователем
    • Срок действия пароля не ограничен
    • Данная учетная запись поддерживает 256-разрядное
  5. Открыть консоль cmd или Power Shell
  6. Выполнить команды
    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

    где foo.domain.local - адрес сайта, spnego_user - пользователь для SPNEGO

  7. Проверяем корректность SPN
    setspn -Q */foo.domain.local

    где foo.domain.local - адрес сайта

  8. Если всё верно, то должно вывести примерно следующее
    Checking domain DC=domain,DC=local
      CN=...,OU=...,DC=domain,DC=local
              HTTP/foo.domain.local
              host/foo.domain.local
misc/spnego.1781974196.txt.gz · Последнее изменение: nikolay