2.9.20.2.14.10 Скоро здесь будет новая статья
Входные данные
Создание учетной записи и SPN
Создание keytab-файла
Настройка HTTPD и проверка результата
Окружение
- Версия ОС: 7.3
- Конфигурация ОС: Рабочая станция, Сервер графический
- Редакция ОС: Стандартная
- Архитектура: x86_64
Kerberos — это сетевой протокол, обеспечивающий безопасную взаимную аутентификацию клиента и сервера в физически незащищенных сетях. Kerberos гарантирует целостность и конфиденциальность данных в условиях, допускающих перехват, анализ и модификацию сетевого трафика.
Service Principal Name (SPN) — это уникальный идентификатор сетевой службы в среде Kerberos, который используется при аутентификации службы для обеспечения связи между конкретной службой и учётной записью, от имени которой эта служба запущена. В среде Active Directory SPN может быть привязан только к одной учётной записи, но учётная запись может быть привязана к нескольким SPN.
Keytab — это специальный файл, содержащий principal (идентификатор сущности в Kerberos — SPN/UPN) и соответствующих им хешированных ключей. Он используется для аутентификации служб или пользователей в Kerberos-среде без необходимости ввода пароля.
В рамках текущей статьи будет рассмотрено создание и применение SPN и keytab-файла на примере организации SSO-доступа к ресурсу функционирующему на веб-сервере Apache в средах Active Directory и FreeIPA.
Входные данные
В примере будут использоваться следующие данные:
-
для Active Directory:
-
домен —
redos.smb; -
служебная учётная запись — wwwsvc.
-
для FreeIPA:
-
домен —
ipa.red; -
доменное имя хоста —
webserver.ipa.red.
Создание учетной записи и SPN
На контроллере домена SAMBA
1. Создайте учётную запись (wwwsvc) службы со случайным паролем и неограниченным сроком действия:
samba-tool user add wwwsvc --random-password samba-tool user setexpiry wwwsvc --noexpiry
2. Создайте SPN с привязкой к учётной записи службы.
Формат команды создания имеет вид SPN:
samba-tool spn add <СЕРВИС>/<FQDN_хоста>[@REALM] <учетная_запись_службы>
Например:
samba-tool spn add HTTP/webserver.redos.smb wwwsvc
3. Отредактируйте атрибут userPrincipalName учётной записи службы (в примере используется редактор nano):
samba-tool user edit wwwsvc --editor nano
В редакторе значение атрибута userPrincipalName необходимо заменить на значение атрибута servicePrincipalName с добавлением realm (в примере — @REDOS.SMB):
userPrincipalName: HTTP/webserver.redos.smb@REDOS.SMB
Сохраните изменения (Ctrl + S) и закройте редактор (Ctrl + X).
4. Установите поддерживаемые типы шифрования для учётной записи:
net ads enctypes set wwwsvc -U administrator
где вместо administrator необходимо использовать имя учётной записи администратора вашего домена.
На контроллере домена MSAD
1. Создайте учётную запись службы (wwwsvc):
2. Создайте постоянный пароль:
3. Создайте SPN с привязкой к учётной записи службы из командной строки:
setspn -S HTTP/webserver.redos.smb wwwsvc
На контроллере домена или хосте FreeIPA
В рамках текущего подраздела предполагается, что хост (webserver.ipa.red) введён в домен и для него создана A-запись (или AAAA-запись) в службе DNS.
1. В веб-интерфейсе управления FreeIPA запись службы может быть создана согласно следующему алгоритму действий:
-
перейдите в раздел «Идентификация» — «Службы»;
-
нажмите кнопку «Добавить» в правом верхнем углу списка;
-
заполните поля формы «Служба» и «Имя узла»;
-
нажмите «Добавить» для подтверждения действия.
2. Из командной строки запись службы может быть создана согласно следующему алгоритму действий на контроллере домена или на целевом хосте:
- получите kerberos-билета администратора домена или пользователя с привилегией «Service Administrators» (в примере — admin) или целевого хоста (в примере — webserver.ipa.red):
Для получения билета администратора выполните:
sudo kinit admin
Для получения билета хоста (от имени администратора на целевом хосте) выполните:
sudo kinit -k -t /etc/krb5.keytab host/webserver.ipa.red
- создайте службу HTTP под управлением целевого хоста:
sudo ipa service-add HTTP/webserver.ipa.red
Создание keytab-файла
На контроллере домена SAMBA
1. Выгрузите ключи SPN в keytab-файл:
samba-tool domain exportkeytab /root/http_webserver.keytab --principal HTTP/webserver.redos.smb
Все доступные ключи SPN «HTTP/webserver.redos.smb» будут выгружены в файл /root/http_webserver.keytab.
2. Проверьте наличие ключей в сформированном keytab-файле:
klist -etk /root/http_webserver.keytab
Корректный результат выполнения команды:
Keytab name: FILE:wwwsvc.keytab KVNO Timestamp Principal ------------------------------------------------------ 2 20.02.2025 14:40:25 HTTP/webserver.redos.smb@REDOS.SMB (aes256-cts-hmac-sha1-96) 2 20.02.2025 14:40:25 HTTP/webserver.redos.smb@REDOS.SMB (aes128-cts-hmac-sha1-96) 2 20.02.2025 14:40:25 HTTP/webserver.redos.smb@REDOS.SMB (DEPRECATED:arcfour-hmac)
Если файл не был создан, необходимо проверить корректность параметров заданной команды и наличия требуемого SPN:
samba-tool spn list wwwsvc
3. Проверьте работу ключей в сформированном keytab-файле:
kinit -V -t /root/http_webserver.keytab HTTP/webserver.redos.smb klist
Корректный вывод команды klist:
Ticket cache: KEYRING:persistent:0:krb_ccache_LK6rCDi
Default principal: HTTP/webserver.redos.smb@REDOS.SMB
Valid starting Expires Service principal
20.02.2025 15:35:21 21.02.2025 01:35:21 krbtgt/REDOS.SMB@REDOS.SMB
renew until 27.02.2025 15:35:21
На контроллере домена MSAD
Создайте keytab-файл с привязкой к аккаунту службы и заданием случайного пароля:
ktpass -princ HTTP/webserver.redos.smb -mapuser wwwsvc -crypto all +rndPass -ptype KRB5_NT_PRINCIPAL -out C:\restricted\http_webserver.keytab
Если настройка выполнена верно, результат выполнения команды будет следующим:
-
будет создан SPN HTTP/webserver.redos.smb, привязанный к учётной записи wwwsvc;
-
учётной записи wwwsvc будет задан случайный пароль;
-
ключи SPN будут выгружены в файл C:\http_webserver.keytab (можно указать другой каталог для размещения);
-
в терминал будет выведено содержимое сформированного keytab-файла.
На клиенте домена FreeIPA
Получать результирующий keytab-файл рекомендуется непосредственно на том хосте, на котором будет использоваться служба. Такой подход обеспечит непосредственную безопасную передачу ключей службы в конечную точку.
1. Получить (создать) keytab-файл службы можно при наличии kerberos-билета администратора домена или пользователя с привилегией «Service Administrators» (в примере — admin) или целевого хоста:
Для получения билета администратора выполните:
sudo kinit admin
Для получения билета хоста (от имени администратора на целевом хосте) выполните:
sudo kinit -k -t /etc/krb5.keytab host/webserver.ipa.red
2. Получите keytab-файл службы HTTP для хоста:
ipa-getkeytab -p HTTP/webserver.ipa.red -k /etc/httpd/http_webserver.keytab
Настройка HTTPD и проверка результата
Далее будет рассмотрена минимальная настройка на базе стандартной конфигурации HTTPD.
Для успешного выполнения действий текущего раздела статьи должны быть выполнены условия:
-
установлен сервер httpd и пакет mod_auth_gssapi:
sudo dnf install httpd mod_auth_gssapi
-
в службе DNS зарегистрирована A-запись HTTP-сервера с именем, совпадающим с FQDN из созданного ранее SPN:
webserver.redos.smb; -
клиент, с которого будет производиться проверка, введён в домен;
-
браузер клиента настроен согласно инструкции «Сквозная аутентификация в браузерах».
Настройка HTTPD
1. Скопируйте сформированный keytab-файл безопасным методом в каталог, доступный сервису httpd (пользователю apache). В примере файл расположен по пути /etc/httpd/http_webserver.keytab.
2. Предоставьте необходимые права пользователю, от имени которого запускается служба:
chown apache: /etc/httpd/http_webserver.keytab chmod 0600 /etc/httpd/http_webserver.keytab
3. Отредактируйте настройки аутентификации внутри директивы <Directory> (или <VirtualHost>) файла конфигурации httpd (в примере — /etc/httpd/conf/httpd.conf):
<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None AuthType GSSAPI AuthName "SSO auth" GssapiCredStore keytab:/etc/httpd/http_webserver.keytab Require valid-user </Directory>
В примере зелёным цветом обозначены добавленные или изменённые значения.
4. Перезапустите службу httpd:
systemctl restart httpd
Проверка работы SSO на клиенте
Проверку работы SSO можно осуществить открытием ресурса в браузере, используя для сервера FQDN-имя из созданного SPN (http://webserver.redos.smb/). Для этого браузер должен быть настроен согласно инструкции «Сквозная аутентификация в браузерах».
Перед переходом к ресурсу проверьте наличие билета у текущего пользователя командой klist. Пример вывода:
klist Ticket cache: FILE:/tmp/krb5cc_955801104 Default principal: redos1@REDOS.SMB Valid starting Expires Service principal 21.02.2025 12:56:56 21.02.2025 22:56:56 krbtgt/REDOS.SMB@REDOS.SMB renew until 28.02.2025 12:56:53
Также проверка возможна и без настройки и использования браузера посредством утилиты curl:
curl --negotiate -o /dev/null -u : -s -w "ВОЗВРАТ: %{http_code}\n" http://webserver.redos.smb/
Пример ожидаемых успешных результатов:
ВОЗВРАТ: 200 ВОЗВРАТ: 403
Код возврата 401 укажет на неуспешную авторизацию и необходимость проверки результатов каждого действия данной статьи. Диагностику следует начать с журналов службы httpd (/var/log/httpd/).
Дата последнего изменения: 15.04.2026
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.