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

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


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

Linux

  1. Установить пакеты
    apt install krb5-user krb5-multidev libkrb5-dev
  2. Скопировать полученные файлы host.keytab и http.keytab
  3. Объединить файлы в единый файл krb5.keytab при помощи ktutil
    # ktutil
    ktutil: rkt host.keytab
    ktutil: rkt http.keytab
    ktutil: wkt /etc/krb.keytab
    ktutil: quit
  4. Проверить корректность созданного keytab-файла
    klist -kt /etc/krb5.keytab

    Должно вывести примерно следующее

    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
  5. Проверить возможность авторизации при помощи keytab-файла без пароля
    kinit -5 -V -k -t /etc/krb5.keytab HTTP/foo.domain.local

    При успешной авторизации должно вывести

    Authenticated to Kerberos v5
  6. Установим правильные права для /etc/ktb5.keytab
    chmod 440 /etc/krb5.keytab
    chown root:www-data /etc/krb5.keytab
misc/spnego.1782024557.txt.gz · Последнее изменение: nikolay