Kerberos: немножко про ключи

Решил я сделать прозрачную аутентификацию почтовых клиентов под Windows на сервере dovecot под Linux Ubuntu. При настройке я столкнулся с некоторыми вопросами, которые и решил осветить в данной статье.

Пусть наш почтовый сервер носит гордое имя mail, контроллер домена - dc, а домен - test.local.

Для аутентификации через gssapi/kerberos на сервере я дополнительно установил пакет dovecot-gssapi, и пакет krb5-user. Необходимо проверить, чтобы время почтового сервера совпадало с временем контроллера домена (при расхождении времени более, чем на 5 минут, механизм не будет работать) для этого на почтовом сервере желательно поднять службу ntp-сервера и настроить синхронизацию времени. Так же нужно правильно настроить dns, чтобы dns-cсервера для mail совпадали с dns-серверами домена, вывод команды hostname -f на почтовом сервере был mail.test.local и на dns-серверах домена были A- и PTR- записи о mail.

Если предыдущие подготовительные шаги выполнены, то можно переходить к получению ключей. Наш почтовый сервер будет предоставлять 3 сервиса с аутентификацией kerberos: imap, pop, smtp. По-этому нам необходимо будет у контроллера домена получить 3 ключа для аутентификации доменных пользователей: по одному для каждого сервиса. Ключ создаётся на Windows-сервере с помощью утилиты ktpass.exe. Данная утилита либо уже должна быть установлена на сервере, либо устанавливается в пакете Microsoft Server SupportTools. Опишу этот процесс создания файла ключа на примере imap.

1) Создадим учетную запись в домене (я создавал учетную запись пользователя, но пишут, что и запись компьютера подойдет). Пусть пользователя зовут krb_imap.

2) На контроллере домена выполним команду:

ktpass -princ imap/[email protected] -mapuser [email protected] -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL -pass * -out c:\imap.mail.keytab

В процессе создания ключа, необходимо будет придумать и ввести пароль. Если все прошло удачно, то мы получим файл с ключом.

3) Полученный файл скопировать на почтовый сервер.

После того, как ключи получены и для остальных сервисов, надо их собрать в единый keytab-файл.

Сделаем это на нашем почтовом сервере с помошью утилиты ktutil:

ktutil
ktutil:  rkt ./imap.mail.keytab
ktutil:  rkt ./pop.mail.keytab
ktutil:  rkt ./smtp.mail.keytab
ktutil:  l
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
   1    3     imap/[email protected]
   2    3      pop/[email protected]
   3    3     smtp/[email protected]
ktutil:  wkt ./mail.keytab
ktutil:  q

Подразумевается, что ktutil запускается из директории, где лежат keytab-файлы. Сначала читаем ключи из файлов (rkt), затем проверяем, что все считалось корректно (l) и записываем все в файл (wkt).

Проверим, что ключи в файл нормально записались:

klist -ket ./mail.keytab
Keytab name: FILE:./mail.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   3 25.08.2014 10:22:47 imap/[email protected] (arcfour-hmac)
   3 25.08.2014 10:22:47 pop/[email protected] (arcfour-hmac)
   3 25.08.2014 10:22:47 smtp/[email protected] (arcfour-hmac)

Объединенному файлу даем права 600 и устанавливаем владельцем пользователя, от которого запускается сервис (dovecot).

В конфиге dovecot-а укажем путь к файлу ключей в переменной auth_krb5_keytab, так же укажем auth_gssapi_hostname = mail.test.local

В файле /etc/krb5.conf пропишем:

[libdefaults]

default_realm = TEST.LOCAL

[realms]

TEST.LOCAL = {
kdc = dc.test.local
admin_server = dc.test.local
default_domain = test.local
}

[login]

krb4_convert = false
krb4_get_tickets = false

[domain_realm]

test.local = TEST.LOCAL
.test.local = TEST.LOCAL

Хочу обратить внимание на заглавные и прописные буквы в конфигах и ключах. Регистр букв очень важен, иначе работать не будет.

Вот и все. После этого можно перезапустить dovecot и проверить аутентификацию. С помощью kerberos можно только аутентифицировать пользователей (passdb), авторизацию же (userdb) надо осуществлять с помощью других механизмов, например ldap, но это тема для другой статьи.

P.S. С удивлением обнаружил, что Outlook из пакета MS Office 2007 не поддерживает данный вид аутентификации, зато в Thunderbird все прохродит "на ура".