Связанные статьи:

Включение LDAP аутентификации на портале (кнопка "Вход через Windows")

Синхронизация списка пользователей с LDAP-каталогом (AD)


Статья посвящена настройке интеграции системы, развернутой на сервере под управлением ОС Linux, с глобальным каталогом LDAP (Active Directory) с использованием  механизма Kerberos.

Для интеграции Linux с корпоративным LDAP (в данном примере, на основе Active Directory) требуется установить необходимые пакеты и настроить сам Kerberos, для этого необходимо:

  1. Установить необходимые пакеты
  2. Задать имя серверу
  3. Настроить синхронизацию времени
  4. Создание учетной записи в AD и файла keytab

  5. Создание keytab-файла

  6. Настройка kerberos на Linux сервере

  7. Настройка Веб-приложения Vitro для авторизации в каталоге LDAP/AD при помощи сервис принципала

Для работы на Linux необходим пакет libldap-2.5. Если в используемой ОС в OpenLDAP используется другая версия, то будут возникать ошибки.
Установить версию 2.5 можно следуя инструкции.

1. Установка пакетов

Установить необходимые пакеты из репозиториев. 

а) на Ubuntu/Debian:

apt install heimdal-clients

б) на Centos:

yum install krb5-workstation

Для РЕД ОС дополнительно необходимо установить актуальную версию openldap-compat:

yum install openldap-compat

2. Имя сервера

В процессе настройки аутентификации через LDAP необходимо задать в качестве принципала имя нашего сервера:

hostnamectl set-hostname vitroweb.domain.local

* Для примера настройки в качестве FQDN имени сервера будет использовано vitroweb.domain.local (домен domain.local).

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

Для работы с LDAP необходимо, чтобы время на контроллере совпадало с временем на нашем веб-сервере. Для этого необходимо настроить синхронизацию.

1. Для начала настраиваем временную зону:

timedatectl set-timezone Europe/Moscow

* в данном примере задается зона соответствующая московскому времени. Список все доступных зон можно посмотреть командой:

timedatectl list-timezones

2. Устанавливаем утилиту для синхронизации времени, настраиваем ее, разрешаем запуск демона и стартуем его. Набор команд будет зависеть от дистрибутива Linux.

а) если на системе Ubuntu / Debian:

apt install chrony
nano /etc/chrony/chrony.conf

б) если на системе CentOS / Red Hat:

yum install chrony
nano /etc/chrony.conf
chrony.conf
...
server dc1.domain.local iburst
# server ...
# server ...
# server ...
...

4. Создание учетной записи в AD и файла keytab

Для подключения к контроллеру домена нам необходимо подтверждать подлинность. Это выполняется с помощью учетной записи в LDAP и ее отпечатка в файле keytab.

На контроллере домена в оснастке "Пользователи и компьютеры" добавить нового пользователя со стандартными правами. От этой учетной записи будут выполняться запросы к AD DS.

В текущем примере создаем пользователя с именем входа vitro_krb5. 

Учетная запись должна быть размещена по пути, в котором присутствуют названия только на латинице. Подразделения и контейнеры не должны быть на русском. В противном случае, при выполнении команды ниже мы получим ошибку «Password set failed! 0x00000020».

5. Создание keytab-файла

Данный файл позволяет пройти идентификацию в Kerberos без запроса пароля. Он содержит пары имен субъектов Kerberos и зашифрованные ключи, полученные из пароля Kerberos.

Надо создать данный файл на контроллере домена и скопировать на сервер Веб-приложения Vitro. Для этого на контроллере домена и от имени администратора надо запустить Powershell или обычную командную строку. Ввести:

ktpass /princ HTTP/vitroweb.public.com@DOMAIN.LOCAL /mapuser vitro_krb5@DOMAIN.LOCAL /crypto ALL /ptype KRB5_NT_PRINCIPAL /out C:\temp\krb5.keytab /pass <пароль пользователя>
vitroweb.public.com — FQDN имя сервера Vitro. Указывается имя используемое конечными пользователями (публичное или внутрисетевое) для подключения к порталу, зарегистрированное в корпоративном DNS (запись типа A, или CNAME);
DOMAIN.LOCAL — домен предприятия (realm kerberos);
vitro_krb5@DOMAIN.LOCAL * — учетная запись в AD для выполнения запросов (создана на шаге выше);
* регистр важен.

В нашем примере, после выполнения команды на контроллере домена в директории C:\temp появится файл krb5.keytab. Его следует скопировать на Linux-сервер, например, при помощи WinSCP.


Важно!

Имя файла должно быть krb5.keytab.

На Linux-сервере файл необходимо разместить в каталоге /etc.

Необходимо выдать разрешения на файл krb5.keytab командой sudo chmod 777 /etc/krb5.keytab

6. Настройка kerberos на Linux сервере

1. Открыть на редактирование файл:

nano  /etc/krb5.conf

2. Привести файл к виду:

/etc/krb5.conf
[libdefaults]
default_realm = DOMAIN.LOCAL

# The following krb5.conf variables are only for MIT Kerberos.
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true

# The following libdefaults parameters are only for Heimdal Kerberos.
    fcc-mit-ticketflags = true

[realms]
    DOMAIN.LOCAL = {
        kdc = 10.0.0.1
        kdc = 10.0.0.5
        admin_server = domain.local
        default_domain = domain.local
    }

[domain_realm]
    .domain.local = DOMAIN.LOCAL
    domain.local = DOMAIN.LOCAL

DOMAIN.LOCAL — домен предприятия (realm kerberos);

kdc — перечень контроллеров домена;

admin_server — первичный контроллер (в данном примере будет использоваться случайный).


3. Перейти в каталог с файлом keytab и выполнить команду:

kinit -S HTTP/vitroweb.domain.local@DOMAIN.LOCAL vitro_krb5

При выполнении команды будет запрошен пароль пользователя vitro_krb5.  В результате выполнения команды будет создан токен авторизации и сохранен в системную БД.

4. Выполнить:

klist

Результат выполнения:

Credentials cache: FILE:/tmp/krb5cc_0
        Principal: vitro_krb5@DOMAIN.LOCAL

  Issued                Expires               Principal 
Jul 30 21:09:34 2024  Jul 31 07:09:34 2024  HTTP/vitroweb.domain.local@DOMAIN.LOCAL

7. Настройка Веб-приложения Vitro для авторизации в каталоге LDAP/AD при помощи сервис принципала

Отредактировать (а при отсутствии предварительно создать) файл /etc/Vitro/Server/Conf/auth.json*

auth.json
{
"DomainName": "dc1.domain.local",
"PortNumber": 389,
"Container": "DC=vitro,DC=intra",
"UserName": "vitro_krb5",
"Password": "@pwd4krb!",
"AuthType": "Basic",
"Ssl": false
}

*  путь "/etc/Vitro/Server/Conf" - это путь к директории с конфигурационными файлами Vitro. В случае размещения рабочей директории "Vitro.Server.Core.Web" по иному префикс-пути, отличного от "/usr/local" следует изменить значение пути на соответствующее  собственное.


Описание параметров

"DomainName" - FQDN имя контроллера домена

"PortNumber" -  Номер порта для подключения к LDAP каталогу. Для подключения к LDAPS используется порт с номером 636 или 3269. Значение по умолчанию: 389.

"Container" - объект структуры каталога LDAP/AD в котором осуществляется поиск пользователей 

"UserName" - имя пользователя, от имени которого осуществляется подключение к каталогу LDAP/AD

"Password" - пароль пользователя, от имени которого осуществляется подключение к каталогу LDAP/AD

"AuthType" - тип аутентификации (оставить "Basic")

"Ssl" -  Подключаться по SSL протоколу. Используется совместно с параметром PortNumber (порт 636 или 3269).  Значение по умолчанию: false.



  • No labels