Страница 1 из 1

Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-21 13:37:57
citman
Здравствуйте, уважаемые форумчане!
Обращаюсь за помощью и советом.

Задача: настроить почтовый сервер (freebsd+postfix+dovecot+AD) c прозрачной авторизацией KERBEROS в Active Directory, чтобы пользователям, которые авторизовались в AD, не приходилось забивать пароль в почтового клиента (Microsoft Outlook), т.к. пароль в домене периодически подлежит замене.

Контроллер домена: kd.dom.lan (Windows server 2008).
Почтовый сервер: mail.dom.lan (freebsd 9.2-RELEASE).
DNS работает на контроллере домена.
Запись для почтового сервера есть и в прямой и в обратной зоне.
На почтовом сервере установлена samba, является членом домена dom.lan

На данном этапе не могу добиться получения почтовым сервером билета kerberos с контроллера
домена с помощью файла-keytab. Файл keytab создаю для службы imap, которая работает на почтовом сервере (dovecot).

В ответ на команду:

Код: Выделить всё

kinit -k IMAP/mail.dom.lan
получаю ошибку:

Код: Выделить всё

kinit: krb5_get_init_creds: Client (IMAP/mail.dom.lan@DOM.LAN) unknown
Если попытаться получить билет для реального пользователя AD командой:

Код: Выделить всё

  kinit domainuser
то после ввода правильного пароля пользователя domainuser билет получен. Это видно в выводе команды klist.

Обращаюсь за помощью, т.к. больше нет идей для преодоления этой ошибки. Не могу понять, почему
"Клиент неизвестен". Все делалось после прочтения и изучения многочисленных статей и обсуждений.
Многие смогли увидеть эту долгожданную надпись: "Authenticated to Kerberos v5", у меня пока не выходит.

Файл keytab генерировал двумя способами:

1. С помощью утилиты ktpass, генерировал файл как для фиктивного пользователя AD,
так и для учетной записи компьютера - почтового сервера.

------------------------------------------------------------------------------------

- в домене (OU=Users) был создан пользователь imap c неустаревающим и неменяющимся паролем 1234.

- сгенерирован keytab командой:
ktpass -princ IMAP/mail.dom.lan@DOM.LAN -mapuser imap@DOM.LAN -crypto RC4-HMAC-NT -pass 1234 -ptype KRB5_NT_PRINCIPAL -out c:\imap.keytab

- файл imap.keytab скопирован на почтовый сервер в папку /tmp

- на почтовом сервере imap.keytab добавлен в /etc/krb5.keytab командой:

Код: Выделить всё

ktutil copy /tmp/imap.keytab /etc/krb5.keytab
- проверка добавления командой:

Код: Выделить всё

ktutil list
- проверка создания SPN на контроллере домена:

Код: Выделить всё

     setspn -Q IMAP/mail.dom.lan
      CN=imap,CN=Users,DC=dom,DC=lan
      IMAP/mail.dom.lan

------------------------------------------------------------------------------------

Keytab для учетной записи компьютера.

- проверка отсутствия записей SPN для службы imap на контроллере домена командой setspn.exe

- для учетной записи компьютера почтового сервера сгенерировал файл keytab командой:

Код: Выделить всё

ktpass -princ IMAP/mail.dom.lan@DOM.LAN -mapuser mail$@DOM.LAN -crypto RC4-HMAC-NT -pass 1234 -ptype KRB5_NT_PRINCIPAL -out c:\imap.keytab

- дальше все как для генерации keytab для фиктивного пользователя AD.

------------------------------------------------------------------------------------

Результат этих действий одинаковый:

Код: Выделить всё

kinit: krb5_get_init_creds: Client (IMAP/mail.dom.lan@DOM.LAN) unknown
-------------------------------------------------------------------------------------

2. с помощью samba 3.6.18 (установлена на почтовом сервере, который введен в домен dom.lan).
Т.к. у меня на почтовом сервере настроена samba (кстати, предоставляет прозрачный доступ к
своим ресурсам авторизованным в AD пользователям), вычитал более простой способ генерации
файла keytab с одновременным занесением записей в /etc/krb5.keytab

- сначала на конроллере домена с помощью setspn.exe удалил все SPN записи, созданные в п.1

- затем на почтовом сервере выполняю команду:

Код: Выделить всё

net ads keytab add IMAP -U Administrator
- результат генерации виден командой:

Код: Выделить всё

net ads keytab list
- на контроллере домена добавленная SPN запись видна командой:

Код: Выделить всё

setspn -Q IMAP/mail.dom.lan
---------------------------------------------------------------------------------------

В итоге опять эта же ошибка при выполнении kinit -k IMAP/mail.dom.lan :

Код: Выделить всё

kinit: krb5_get_init_creds: Client (IMAP/mail.dom.lan@DOM.LAN) unknown
Такое впечатление, что все мои манипуляции по генерации keytab не влияют на итоговый
результат и ошибка у меня в чем то другом.

/etc/krb5.conf имеет следующий вид:

Код: Выделить всё

[libdefaults]
default_realm = DOM.LAN
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
DOM.LAN = {
kdc = kd.dom.lan
admin_server = kd.dom.lan
default_domain = dom.lan

[domain_realm]
dom.lan = DOM.LAN
.dom.lan = DOM.LAN
Хотя в системе установлен пакет krb5-1.12.2, однако kinit --version говорит:

Код: Выделить всё

kinit (Heimdal 1.1.0)
Покороче сформулировать не получилось, и так многое осталось "за кадром".
Буду рад, если знающие люди укажут направление для решения задачи. Спасибо!

Re: Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-21 17:06:15
Alex Keda
А чем не устраивает системная, через самба?

Re: Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-21 18:33:31
citman
Не думал об этом. Как это настроить в dovecot?

Re: Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-22 19:19:53
Alex Keda

Re: Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-29 12:29:42
citman
Добрый день!

Действительно, т.к. у меня на почтовом сервере настроена samba, то было бы логично использовать ее для прозрачной авторизации клиентов сервера IMAP. Команды wbinfo -t, wbinfo -p, wbinfo -u, wbinfo -g, id real_domain_user, getent group, getent passwd отрабатывают правильно, выводя информацию о пользователях и группах домена.

После того, как пользователь авторизуется в домене, то он получает доступ к ресурсам, которые ему разрешены в samba, без повторного ввода пароля. То же самое мне нужно реализовать для почтового клиента (Microsoft Outlook).

Однако, и этот вариант настроить пока не получается. Делал так:

Создал файл /etc/pam.d/dovecot следующего содержания:

Код: Выделить всё

#auth
auth    required    /usr/local/lib/pam_winbind.so   try_first_pass
В файле 10-auth.conf пишу:

Код: Выделить всё

disable_plaintext_auth = no
auth_username_format = %u
auth_mechanism = plain
!include auth-static.conf.ext
Файл auth-static.conf.ext

Код: Выделить всё

passdb {
   driver = pam
   args = dovecot
}

userdb {
  driver = static
  args = uid=vmail gid=vmail home=/usr/home/vmail/%d/%u allow_all_users=yes
}
Файл 10-ssl.conf

Код: Выделить всё

ssl = no
В настройках Microsoft Outlook в поле ПОЛЬЗОВАТЕЛЬ пишу (user - имя пользователя в домене, user@dom.lan - это значение поля UserPrincipalName в AD):

Код: Выделить всё

user@dom.lan
Поле пароль не заполняю (это и есть цель!).
В итоге, после попытки получить почту, в maillog вижу следующее:

Код: Выделить всё

Oct 29 11:19:18 mail dovecot: auth-worker(4558): pam(user@dom.lan,<ip клиента>): pam_authenticate() failed: authentication error (password mismatch?) (given password: )
Я так понимаю, что аутентификация не случилась, пароль предоставлен не был.
Что с этим делать пока не осознал, прошу помощи.
Спасибо!

Re: Настройка авторизации kerberos в AD для службы imap

Добавлено: 2014-10-29 14:51:21
citman
Не знаю после чего, но сейчас ошибка в логе изменилась:

Код: Выделить всё

Oct 29 14:46:56 mail dovecot: auth-worker(4558): pam(user@dom.lan,<ip клиента>): pam_authenticate() failed: authentication information is unavailable