Kerberos-аутентификация в STAL

Общие сведения

STAL поддерживает Kerberos-аутентификацию в домене MS AD при доступе пользователя к РМ.

Kerberos-аутентификация возможна, если:

  • для доступа к STAL используется домен аутентификации Termidesk VDI, поддерживающий функционал Kerberos и настроенный на его использование;

  • узел STAL был введен в домен с использованием утилиты sssd (при использовании службы каталогов MS AD утилита winbind не должна использоваться);

  • в компоненте «Сессионный агент» используется параметр USE_USER_PRINCIPAL_NAME со значениями Auto или True;

  • в «Портале администратора» Termidesk VDI заданы политики:

    • «Автоматический вход в систему при подключении к РМ (RDP, SPICE, TERA)» в значение «Включен»;

    • «Аутентификация на уровне сети (RDP)» в значение «NLA» или «Автосогласование»;

  • в «Портале администратора» Termidesk VDI поставщик ресурсов «Сервер терминалов» добавлен по FQDN;

  • выполнена настройка узла STAL, как приведено ниже.

Настройка узла STAL состоит из:

  • подготовки узла с настройкой службы SSSD;

  • получении keytab;

  • настройки конфигурации stal-config.json.

Подготовка узла

Требования к имени узла (hostname):

  • имя узла не должно превышать 15 символов;

  • имя узла должно совпадать с ComputerName в службе каталогов Active Directory с точностью до регистра символов.

Пример: если ComputerName = OS-STAL, то и hostname должен быть OS-STAL (регистр не учитывается разрешением имен, но для keytab это критично).

Требования к DNS-записям:

  • в DNS-зоне домена должны присутствовать корректные A (или AAAA) и PTR-записи для данного узла.

Если узел не прописан в DNS, при создании keytab не будут сгенерированы записи для FQDN, что приведет к ошибкам аутентификации.

Для настройки службы SSSD нужно:

  • отредактировать файл /etc/sssd/sssd.conf, присвоив параметру use_fully_qualified_names значение True;

  • перезапустить службу sssd:

sudo systemctl restart sssd

Получение keytab

Для получения keytab нужно:

  • получить билет администратора домена. Имя администратора домена и имя домена необходимо уточнить у администраторов инфраструктуры:

sudo kinit <Администратор_домена>@<ИМЯ_ДОМЕНА>

Пример:

sudo kinit administrator@LAN.LOC
  • установить утилиту msktutil, доступную в репозитории Termidesk VDI:

sudo apt install msktutil
  • создать учетную запись узла и создать keytab:

    • выполнить предварительное создание:

      msktutil --server <КОНТРОЛЛЕР_ДОМЕНА> \
               --precreate \
               --host <ИМЯ_УЗЛА> \
               --computer-name <ИМЯ_КОМПЬЮТЕРА_В_ВЕРХНЕМ_РЕГИСТРЕ> \
               -b cn=computers \
               --service TERMSRV \
               --enctypes 24 \
               -N
    • выполнить обновление и выгрузку keytab. В результате выполнения команды будет создан файл temp.keytab:

      msktutil --server <КОНТРОЛЛЕР_ДОМЕНА> \
               --auto-update \
               --computer-name <ИМЯ_КОМПЬЮТЕРА_В_ВЕРХНЕМ_РЕГИСТРЕ> \
               --keytab temp.keytab \
               --host <ИМЯ_УЗЛА> \
               -N
  • заменить существующий файл /etc/krb5.keytab новым и установить корректные права доступа:

mv temp.keytab /etc/krb5.keytab
chown root:stal-proxy /etc/krb5.keytab
chmod 640 /etc/krb5.keytab

Для проверки корректности keytab нужно:

  • просмотреть содержимое keytab:

sudo klist -kt /etc/krb5.keytab
  • убедиться, что в выводе команды присутствуют следующие обязательные типы записей:

    • запись имени узла с символом $ (в верхнем регистре). Пример: OS-STAL$@LAN.LOC;

    • запись службы TERMSRV. Примеры: TERMSRV/os-stal@LAN.LOC, TERMSRV/os-stal.lan.loc@LAN.LOC;

    • записи host и RestrictedKrbHost для обоих вариантов имени (короткого и FQDN);

  • убедиться, что в выводе команды отсутствует запись имени узла в нижнем регистре с символом $ в конце:

    • неправильно: os-stal$@LAN.LOC;

    • правильно: OS-STAL$@LAN.LOC.

Настройка конфигурации stal-config.json

В конфигурационном файле /etc/stal/stal-config.json необходимо добавить (или раскомментировать) следующие параметры, отвечающие за Kerberos-аутентификацию:

// ...
        "kerberos": {
            "realm": "TST.LOC",
            "keytab": "/etc/krb5.keytab",
            "check:domain": true
        },
// ...

Где LAN.LOC - имя домена.