Создание SPN и Keytab файла: различия между версиями

Материал из ALT Linux Wiki
Строка 89: Строка 89:
Processing principals to add...</pre>
Processing principals to add...</pre>
Далее можно поменять права на keytab и отредактировать его утилитой kutil.
Далее можно поменять права на 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)
проверка:
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 Client ====
Для этого способа необходимо ввести машину в домен FreeIPA [[https://www.altlinux.org/FreeIPA#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_FreeIPA_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.B0_.D0.B8_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BA_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D1.83]]<br>
Для этого способа необходимо ввести машину в домен FreeIPA [[https://www.altlinux.org/FreeIPA#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_FreeIPA_.D0.BA.D0.BB.D0.B8.D0.B5.D0.BD.D1.82.D0.B0_.D0.B8_.D0.BF.D0.BE.D0.B4.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BA_.D1.81.D0.B5.D1.80.D0.B2.D0.B5.D1.80.D1.83]]<br>

Версия от 22:18, 1 августа 2017

Введение

SPN (Service Principal Name) - уникальный идентификатор экземпляра сервиса. SPN используется аутентификацией Kerberos для сопоставления экземпляра сервиса с учетной записью сервиса (service logon account). Это позволяет клиентским приложением аутентифицироваться в роли сервиса даже не зная имени пользователя.
До того как аутентификация Kerberos сможет использовать SPN для аутентификации сервиса, SPN должен быть привязан к учетной записи, которая будет использоваться для входа. SPN может быть привязан только к одной учетной записи. Если учетная запись, привязанная к SPN, изменяется, то необходимо заново выполнить привязку.
Когда клиент хочет воспользоваться сервисом, он находит экземпляр сервиса и составляет SPN для этого экземпляра, далее использует этот SPN для аутентификации.

Keytab-файл - это файл содержащий пары Kerberos принципалов и их ключей (полученных с использованием Kerberos пароля). Эти файлы используются для аутентификации в системах, использующих Kerberos, без ввода пароля. Если пароль принципала изменится, то keytab-файл необходимо будет сгенерировать заново.

Внимание! Каждый кто имеет разрешения на чтения keytab-файла может воспользоваться любыми ключами в нем. Чтобы предотвратить нежелательное использование, ограничивайте права доступа при создании keytab-файла

Создание SPN

DC Windows

Для начала необходимо создать на контроллере домена (DC) пользователя к которому впоследствии мы привяжем SPN.
Например создадим пользователя squid:
Win user create.jpg
Далее необходимо запретить пользователю смену пароля и не ограничивать срок действия пароля. Последнее важно, так как иначе при истечении срока действия пароля придется не только менять пароль, но и заново генерировать keytab-файлы привязанные к этому пользователю:
Win user options.jpg
В целях безопасности рекомендуется исключить сервисного пользователя из доменных групп.
Создадим SPN для прокси-сервера squid HTTP/sqserver.domg.testg и привяжем его к пользователю squid.
Для этого в командной строке на контроллере домена выполним следующую команду:

C:\>setspn -A HTTP/sqserver.domg.testg squid
Регистрация ServicePrincipalNames для CN=squid,CN=Users,DC=domg,DC=testg
        HTTP/sqserver.domg.testg
Обновленный объект

Проверить привязанные SPN у пользователя можно командой:

C:\>setspn -L squid
Зарегистрирован ServicePrincipalNames для CN=squid3,CN=Users,DC=domg,DC=testg:
        HTTP/sqserver.domg.testg

DC FreeIPA

Для добавления SPN зайдите в web-интерфейс сервера FreeIPA->Identity->Services->Add:
Add SPN FreeIPA 01.jpg
В открывшемся окне необходимо выбрать имя сервиса и имя хоста, к которому будет привязан сервис:
Add SPN FreeIPA 02.jpg Чтобы добавить SPN с коротким именем хоста (например это необходимо для samba), выполните команду:

# ipa service-add cifs/samba --force

Генерирование keytab-файла

Создать keytab-файл можно разными способами.
Рассмотрим некоторые из них.

На контроллере домена Windows 2008 R2

Необходимо выполнить следующую команду:

C:\>ktpass -princ HTTP/sqserver.domg.testg@DOMG.TESTG -mapuser squid -pass Pa$$word -ptype KRB5_NT_PRINCIPAL -out C:\squid.keytab
Targeting domain controller: dcd.domg.testg
Using legacy password setting method
Successfully mapped HTTP/sqserver.domg.testg to squid.
Key created.
Output keytab to C:\squid.keytab:
Keytab version: 0x502
keysize 70 HTTP/sqserver.domg.testg@DOMG.TESTG 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 - путь и имя генерируемого файла

На машине с 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)

проверка:

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 /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