Для того, что бы службы на FreeBSD могли получать TGS (Ticket Granting Service - тикет на доступ к службе)
от Active Directory Key Distribution Center необходимо что бы в системе FreeBSD был TGT (Ticket Granting Ticket - тикет на получение тикетов).
В стандартном варианте настройке родного Kerberos (Heimdal 0.x_чего_то_там) на FreeBSD (вплоть до версии 7.1.) используется файл
/etc/krb5.conf [man krb5.conf]
в этом файле указывается REALM (область, за которую отвечает KDC) и серверы, с которых можно спрашивать TGT и TGS.
Первоначальный TGT получается обычно с использованием команды:
Код: Выделить всё
#kinit DomainAdministrator
Enter DomainAdministrator's password: ***********
kinit: NOTICE: ticket renewable lifetime is 1 week
другие службы (pam_krb5, ldap, samba) могут обращаться к службам AD.
Для автоматизации получения ключа используются разные методы. Все они используют cron, для периодического получения/обновления ключа.
1.) Самый простой это
Код: Выделить всё
echo MyPassword | kinit DomainAdministrator
2.) Второй способ описан в статье Microsoft "Step-by-Step Guide to Kerberos 5 (krb5 1.0) Interoperability"
Заключается метод в следующем: создается пользовательский аккаунт, через который будет авторизоваться сервер.
С использованием команды из пакета Windows Resource Kit или Windows Support Tools
Код: Выделить всё
C:>Ktpass.exe -princ HOST/my_bsd_hostname@NT-DNS-REALM-NAME -mapuser user_account_for_bsd -pass account_password_for_bsd -out unixmachine.keytab
используя команду на FreeBSD
Код: Выделить всё
kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
по-умолчанию. Подробности в статье [http://technet.microsoft.com/en-us/libr ... 42433.aspx,
Путь TechNet->TechNet Library->Windows->Windows Server->Windows Server 2000->How To... ->Step-by-Step Guide to Kerberos 5]
3.) Наиболее элегантный.
Для получения ключей используется Samba 3.xx, которая чаще всего используется в связке с Active Directory.
Метод также подразумевает получение ключей в /etc/krb5.keytab и авторизацию через
Код: Выделить всё
kinit -k
Код: Выделить всё
net -U DomainAdministrator net ads keytab ADD HOST
Код: Выделить всё
Vno Type Principal
5 des-cbc-crc HOST/my_bsd_hostname@NT-DNS-REALM-NAME
5 des-cbc-md5 HOST/my_bsd_hostname@NT-DNS-REALM-NAME
5 arcfour-hmac-md5 HOST/my_bsd_hostname@NT-DNS-REALM-NAME
DomainAdministrator должен быть в одной единственной группе (Domain Admins) и по возможности в самом верхнем OU.
Иначе будут ошибки
Код: Выделить всё
response too big for UDP, use TCP instead
В моем случае был Microsoft Windows Server 2008 Enterprise SP1, по традиции при его выпуске была допущена ошика
в реализации kerberos из-за чего при использовании
Код: Выделить всё
kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
интерпретации косой черты ("/") в имени принципала.
Лечится это частным патчем от Microsoft [KB951191], который Microsoft почему то высылает только по запросу
на электронный адрес, да еще в придачу защифрованным паролем. (актуально на 15.05.2009)
Далее для авторизации через kinit к сожалению не используется аттрибут serivcePrincipalName объекта
типа Computer, который создается при подключении Samba к домену и чьи ключи Samba помещает в /etc/krb5.keytab.
Для того, что бы этот аккаунт использовался для авторизации необходимо сделать два вещи
а.) установить аттрибут userPrincipalName в HOST/my_bsd_hostname@NT-DNS-REALM-NAME (по умолчанию он пуст для объекта Computer)
б.) установить отметку "Без предварительной проверки Kerberos". Это легче сказать чем сделать, т.к. диалоговое окно для таких
манипуляций доступно только для объектов типа User. Отметка это лишь бит в целом числе, поэтому...
Я использовал ADSI Edit (входит в поставку Windows Server 2008) для правки аттрибута userAccountControl объекта типа Computer, представляющего
FreeBSD в домене:
Код: Выделить всё
userAccountControl = 0x411000 (4263936 decimal) [ WORKSTATION_TRUST_ACCOUNT | DONT EXPIRE PASSWD | DONT REQUIRE PREAUTH ]
Код: Выделить всё
0 * * * * /usr/bin/kinit --renew
* 2 * * * /usr/bin/kinit -k HOST/my_bsd_hostname@NT-DNS-REALM-NAME
Код: Выделить всё
# klist -vf
Credentials cache: FILE:/tmp/krb5cc_0
Principal: HOST/my_bsd_hostname@NT-DNS-REALM-NAME
Cache version: 4
Server: krbtgt/NT-DNS-REALM-NAME@NT-DNS-REALM-NAME
Ticket etype: arcfour-hmac-md5, kvno 2
Auth time: May 19 11:10:22 2009
End time: May 19 21:10:22 2009
Renew till: May 26 11:10:22 2009
Ticket flags: forwardable, renewable, initial