Создание учетной записи и SPN Создание keytab-файла Настройка HTTPD и проверка результата
Окружение
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.
1. Создание учётной записи (wwwsvc) службы со случайным паролем и неограниченным сроком действия:
samba-tool user add wwwsvc --random-password samba-tool user setexpiry wwwsvc --noexpiry
2. Создание SPN с привязкой к учётной записи службы:
samba-tool spn add HTTP/webserver.redos.smb wwwsvc
Формат команды создания SPN:
samba-tool spn add <СЕРВИС>/<FQDN_хоста>[@REALM] <учетная_запись_службы>
4. Редактирование атрибута userPrincipalName учётной записи службы в редакторе nano:
samba-tool user edit wwwsvc --editor nano
В открывшемся редакторе значение атрибута userPrincipalName необходимо заменить на значение атрибута servicePrincipalName с добавлением realm (в примере — @REDOS.SMB) :
userPrincipalName: HTTP/webserver.redos.smb@REDOS.SMB
Для сохранения изменений и закрытия редактора необходимо нажать Ctrl+O > Enter > Ctrl+X.
Ctrl+O
Enter
Ctrl+X
5. Установка поддерживаемых типов шифрования для учётной записи:
net ads enctypes set wwwsvc -U administrator
Вместо administrator необходимо использовать имя учётной записи администратора вашего домена.
1. Создание учётной записи службы (wwwsvc):
2. Создание постоянного пароля:
3. Создание SPN с привязкой к учётной записи службы из командной строки:
setspn -S HTTP/webserver.redos.smb wwwsvc
В примерах данного подраздела предполагается, что хост (webserver.ipa.red) введён в домен и для него создана A-запись (или AAAA-запись) в службе DNS.
1. В web-интерфейсе управления FreeIPA запись службы создаётся следующими шагами:
перейти в раздел "Идентификация" — "Службы";
нажать кнопку "Добавить" в правом верхнем углу списка;
заполнить поля формы "Служба" и "Имя узла";
нажать "Добавить" для подтверждения действия.
2. Из командной строки запись службы создаётся следующими шагами на контроллере домена или на целевом хосте:
Получение билета администратора:
sudo kinit admin
Получение билета хоста (от имени root на целевом хосте):
sudo kinit -k -t /etc/krb5.keytab host/webserver.ipa.red
ipa service-add HTTP/webserver.ipa.red
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.smbklist
Корректный вывод команды 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
Создание 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-файла.
Получение результирующего keytab-файла быстрее и безопаснее произвести непосредственно на том хосте, где будет использоваться служба. Это обеспечит непосредственную безопасную передачу ключей службы в конечную точку.
1. Получение (создание) keytab-файла службы доступно при наличии kerberos-билета администратора домена или пользователя с привилегией "Service Administrators" (в примере — admin), или целевого хоста:
2. Получение keytab-файла службы HTTP для хоста:
ipa-getkeytab -p HTTP/webserver.ipa.red -k /etc/httpd/http_webserver.keytab
Здесь будет рассмотрена минимальная настройка на базе стандартной конфигурации HTTPD.
Для успешного выполнения действий данного раздела статьи должны быть выполнены условия:
установлен сервер httpd и пакет mod_auth_gssapi:
sudo dnf install httpd mod_auth_gssapi
в службе DNS зарегистрирована A-запись HTTP-сервера с именем, совпадающим с FQDN из созданного ранее SPN: webserver.redos.smb
клиент, с которого будет производиться проверка, введён в домен
браузер клиента настроен по статье "Сквозная аутентификация в браузерах"
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 можно осуществить открытием ресурса в браузере, используя для сервера FQDN-имя из созданного SPN (http://webserver.redos.smb/). Для этого браузер должен быть настроен по статье "Сквозная аутентификация в браузерах" .
http://webserver.redos.smb/
Перед переходом к ресурсу проверьте наличие билета у текущего пользователя командой klist. Пример вывода:
klistTicket 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/).
Дата последнего изменения: 12.03.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.
Нажимая «Отправить запрос», вы соглашаетесь с условиями обработки персональных данных.
Вы будете получать только актуальную информацию по обновлению безопасности
Подписываясь на уведомления, вы соглашаетесь с условиями обработки персональных данных.
На ваш почтовый адрес отправлено письмо с подтверждением подписки.