Создание SPN и Keytab файла: различия между версиями
Строка 49: | Строка 49: | ||
Создать keytab-файл можно разными способами.<br> | Создать keytab-файл можно разными способами.<br> | ||
Рассмотрим некоторые из них.<br> | Рассмотрим некоторые из них.<br> | ||
=== На контроллере домена Windows | === На контроллере домена Windows === | ||
Чтобы создать keytab-файл необходимо выполнить следующую команду: | |||
< | <syntaxhighlight lang="bash">C:\>ktpass -princ HTTP/web.wim.alt@WIN.ALT -mapuser webauth -pass Pa$$word -ptype KRB5_NT_PRINCIPAL -out C:\web.keytab | ||
Targeting domain controller: | Targeting domain controller: dc1.win.alt | ||
Using legacy password setting method | Using legacy password setting method | ||
Successfully mapped HTTP/ | Successfully mapped HTTP/web.wim.alt to webauth. | ||
Key created. | Key created. | ||
Output keytab to C:\ | Output keytab to C:\web.keytab: | ||
Keytab version: 0x502 | Keytab version: 0x502 | ||
keysize | keysize 59 HTTP/web.wim.alt@WIN.ALT ptype 1 (KRB5_NT_PRINCIPAL) vno 6 | ||
etype 0x17 (RC4-HMAC) keylength 16 (0x1a4b1757588cab6298e29e91c06df58d)</ | etype 0x17 (RC4-HMAC) keylength 16 (0x1a4b1757588cab6298e29e91c06df58d)</syntaxhighlight> | ||
Где: | |||
*'''-princ''' | *'''-princ''' — имя принципала содержащее SPN и Kerberos-область (realm); | ||
*'''-mapuser''' | *'''-mapuser''' — пользователь к которому привязывается SPN; | ||
*'''-pass''' | *'''-pass''' — пароль пользователя; | ||
*'''-ptype''' | *'''-ptype''' — указывает тип принципала (рекомендуется KRB5_NT_PRINCIPAL); | ||
*'''-out''' | *'''-out''' — путь и имя генерируемого файла. | ||
В результате выполнения данной команды будет создан keytab файл {{path|C:\web.keytab}} для SPN записи сервиса HTTP/web.win.alt. При этом SPN запись привязывается к учетной записи webauth с указанным паролем. | |||
После привязки SPN к учетной записи, «Имя входа пользователя» («User logon name») в свойствах пользователя станет равен SPN: | |||
[[Файл:Win_user_logon.png|DC Windows. Свойства пользователя]] | |||
В одном keytab-файле могут хранится ключи нескольких SPN. Дополнительные имена SPN и ключи добавляются в файл keytab с помощью отдельных параметров утилиты {{cmd|ktpass}} (-in, -setupn, -setpass). | |||
=== На машине с ALT === | === На машине с ALT === |
Версия от 15:25, 2 мая 2023
Введение
SPN (Service Principal Name) - уникальный идентификатор экземпляра сервиса. SPN используется аутентификацией Kerberos для сопоставления экземпляра сервиса с учетной записью сервиса (service logon account). Это позволяет клиентским приложением аутентифицироваться в роли сервиса даже не зная имени пользователя.
До того как аутентификация Kerberos сможет использовать SPN для аутентификации сервиса, SPN должен быть привязан к учетной записи, которая будет использоваться для входа. SPN может быть привязан только к одной учетной записи. Если учетная запись, привязанная к SPN, изменяется, то необходимо заново выполнить привязку.
Когда клиент хочет воспользоваться сервисом, он находит экземпляр сервиса и составляет SPN для этого экземпляра, далее использует этот SPN для аутентификации.
Keytab-файл - это файл содержащий пары Kerberos принципалов и их ключей (полученных с использованием Kerberos пароля). Эти файлы используются для аутентификации в системах, использующих Kerberos, без ввода пароля. Если пароль принципала изменится, то keytab-файл необходимо будет сгенерировать заново.
Создание SPN
DC Windows
Для начала необходимо создать на контроллере домена (DC) пользователя к которому впоследствии будет привязан SPN.
Например, создадим пользователя webauth:
Далее необходимо запретить пользователю смену пароля и не ограничивать срок действия пароля. Последнее важно, так как иначе при истечении срока действия пароля придется не только менять пароль, но и заново генерировать keytab-файлы привязанные к этому пользователю:
В целях безопасности рекомендуется исключить сервисного пользователя из доменных групп.
Создать SPN для веб-сервера HTTP/web.win.alt и привязать его к пользователю webauth (этот шаг делать отдельно не обязательно, т.к. его автоматически выполняет утилита ktpass при создании keytab-файла).
Для этого в командной строке на контроллере домена выполнить следующую команду:
C:\>setspn -A HTTP/web.win.alt webauth
Checking domain DC=win,DC=alt
Registered ServicePrincipalNames for CN=webauth,CN=Users,DC=win,DC=alt
HTTP/web.win.alt
Updated object
Вывести список SPN записей, привязанных к пользователю:
C:\>setspn -L webauth
Registered ServicePrincipalNames for CN=webauth,CN=Users,DC=win,DC=alt:
HTTP/web.win.alt
DC FreeIPA
Для добавления SPN необходимо в веб-интерфейсе сервера FreeIPA выбрать «Идентификация»→«Службы» и нажать кнопку «Добавить» «Identity»→«Services»→«Add»:
В открывшемся окне необходимо выбрать имя сервиса и имя узла, к которому будет привязан сервис:
Чтобы добавить SPN с коротким именем узла (например, это необходимо для samba), следует выполнить команду:
# ipa service-add cifs/samba --force
Генерирование keytab-файла
Создать keytab-файл можно разными способами.
Рассмотрим некоторые из них.
На контроллере домена Windows
Чтобы создать keytab-файл необходимо выполнить следующую команду:
C:\>ktpass -princ HTTP/web.wim.alt@WIN.ALT -mapuser webauth -pass Pa$$word -ptype KRB5_NT_PRINCIPAL -out C:\web.keytab
Targeting domain controller: dc1.win.alt
Using legacy password setting method
Successfully mapped HTTP/web.wim.alt to webauth.
Key created.
Output keytab to C:\web.keytab:
Keytab version: 0x502
keysize 59 HTTP/web.wim.alt@WIN.ALT ptype 1 (KRB5_NT_PRINCIPAL) vno 6
etype 0x17 (RC4-HMAC) keylength 16 (0x1a4b1757588cab6298e29e91c06df58d)
Где:
- -princ — имя принципала содержащее SPN и Kerberos-область (realm);
- -mapuser — пользователь к которому привязывается SPN;
- -pass — пароль пользователя;
- -ptype — указывает тип принципала (рекомендуется KRB5_NT_PRINCIPAL);
- -out — путь и имя генерируемого файла.
В результате выполнения данной команды будет создан keytab файл C:\web.keytab для SPN записи сервиса HTTP/web.win.alt. При этом SPN запись привязывается к учетной записи webauth с указанным паролем.
После привязки SPN к учетной записи, «Имя входа пользователя» («User logon name») в свойствах пользователя станет равен SPN:
В одном keytab-файле могут хранится ключи нескольких SPN. Дополнительные имена SPN и ключи добавляются в файл keytab с помощью отдельных параметров утилиты ktpass (-in, -setupn, -setpass).
На машине с ALT
С помощью ktutil
Этот способ работает если SPN предварительно были созданы и привязаны.
Установим необходимый пакет:
# apt-get install krb5-kadmin
Запустим ktutil и создадим keytab-файл:
# ktutil ktutil: addent -password -p HTTP/sqserver.domg.testg@DOMG.TESTG -k 6 -e RC4-HMAC Password for HTTP/sqserver.domg.testg@DOMG.TESTG: ktutil: wkt squid.keytab ktutil: q
С помощью Samba
Для создания keytab-файла с помощью samba, необходима работающая kerberos-аутентификация.
При использовании этого метода нет необходимости генерировать и привязывать SPN на контроллере домена.
Приведите файл настроек /etc/samba/smb.conf к следующему виду:
realm = DOMG.TESTG workgroup = DOMG server string = Samba server on %h (v. %v) security = ads dedicated keytab file = /etc/krb5.keytab kerberos method = dedicated keytab
Введите машину в домен:
# net -v ads join DOMG.TESTG -UAdministrator Using short domain name -- DOMG Joined 'DOSERVER' to dns domain 'domg.testg'
Проверить ввод в домен можно командой:
# net ads testjoin Join is OK
После этого в домене будет создан аккаунт компьютера к которому можно будет привязать SPN.
Создадим keytab-файл для компьютера:
# net ads keytab create -UAdministrator
Добавим в keytab-файл принципала сервиса "HTTP":
# net ads keytab add HTTP -U Administrator Processing principals to add...
Далее можно поменять права на keytab и отредактировать его утилитой kutil.
С помощью Samba DC
При использовании этого метода kerberos ни при чём, а все действия выполняются на машине с домен-контроллером.
Создадим пользователя, с которым будем связывать создаваемые SPN:
samba-tool user create <someuser> samba-tool user setexpiry <someuser> --noexpiry
Привяжем к нему SPN:
samba-tool spn add <service-name>/test.example.com <someuser>
(возможно несколько раз для разных сервисов)
создадим keytab:
samba-tool domain exportkeytab /tmp/keytab --principal=<service-name>/test.example.com
(выполняем несколько раз для всех spn, которые хотим поместить в keytab)
проверка (sudo klist -ke, работает):
klist -ke /tmp/keytab Keytab name: FILE:/etc/http.keytab KVNO Principal ---- -------------------------------------------------------------------------- 1 host/test.address.com@INTRANET.COM (des-cbc-crc) 1 host/test.address.com@INTRANET.COM (des-cbc-md5) 1 host/test.address.com@INTRANET.COM (arcfour-hmac) 1 HTTP/test.address.com@INTRANET.COM (des-cbc-crc) 1 HTTP/test.address.com@INTRANET.COM (des-cbc-md5) 1 HTTP/test.address.com@INTRANET.COM (arcfour-hmac)
https://wiki.samba.org/index.php/Generating_Keytabs
С помощью FreeIPA Client
Для этого способа необходимо ввести машину в домен FreeIPA [[1]]
Для генерации keytab-файла используется команда:
# ipa-getkeytab -s dc.ipa.server.ru -p HTTP/httpserver.ipa.server.ru -k /etc/http.keytab
Где:
- dc.ipa.server.ru - FreeIPA сервер
- HTTP/httpserver.ipa.server.ru - SPN
- /etc/http.keytab - куда запишется keytab
Проверка keytab-файла
Для проверки keytab-файла необходима настроенная Kerberos-аутентификация.
Это можно проверить командой:
# kinit Administrator@DOMG.TESTG
Она должна запрашивать пароль и получать билет:
# klist Ticket cache: KEYRING:persistent:0:0 Default principal: Administrator@DOMG.TESTG Valid starting Expires Service principal 14.03.2017 16:45:58 15.03.2017 02:45:58 krbtgt/DOMG.TESTG@DOMG.TESTG renew until 21.03.2017 16:44:36
Попробуем зарегистрироваться с помощью keytab-файла:
# kinit -V -k HTTP/sqserver.domg.testg -t /home/test/squid.keytab Using existing cache: persistent:0:krb_ccache_95Lkl2t Using principal: HTTP/sqserver.domg.testg@DOMG.TESTG Using keytab: /home/test/squid.keytab Authenticated to Kerberos v5
Проверить версию ключей на сервере можно, предварительно получив билет, с помощью команды:
# kvno HTTP/sqserver.domg.testg HTTP/sqserver.domg.testg@DOMG.TESTG: kvno = 6
Проверить версию kvno и список ключей в keytab-файле можно с помощью команды:
# klist -ket
или
# klist -ket /home/test/squid.keytab Keytab name: FILE:/home/test/squid.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 6 01.01.1970 03:00:00 HTTP/sqserver.domg.testg@DOMG.TESTG (arcfour-hmac)
После всех проверок желательно удалить полученные билеты командой:
# kdestroy