Установка и настройка связки CentOS 5.x + OpenFire + Kerberos + SSO + Pidgin
Invite pending
Данная статья рассеивает мглу неизвестности в процессе установки и настройки связки «CentOS 5.x + OpenFire + Kerberos + SSO + Pidgin». Лично у меня ушла целая неделя на настройку. Основные ошибки были по банальной невнимательности и из-за некорректного перевода статей.
Сразу отмечу источники, которыми я пользовался при написании данной статьи:
1. Статья с официального ресурса разработчика OpenFire.
HOWTO: SSO Configuration for Windows (Server and Clients) and Mac Clients
(http://www.igniterealtime.org/community/docs/DOC-1362)
2. Еще статья с официального ресурса разработчика.
SSO: An easier way to join your CentOS 5 Openfire server to an AD Domain
(http://www.igniterealtime.org/community/docs/DOC-1522)
3. Перевод статьи под п.1
1. Openfire — Часть 2. Openfire+Red5+Spark+SSO на Windows
(http://mihouny.blogspot.com/2009/02/openfire-3-openfirered5sparksso-windows.html)
Ну что ж, пожалуй, начнем.
Для начала введем некоторые константы.
mydomain.local — имя нашего домена
MYDOMAIN.LOCAL — realm нашего домена
dc1.mydomain.local — fqdn контроллер домена
dc2.mydomain.local — fqdn вторичного контроллера домена (если есть)
jabber.mydomain.local — fqdn имя сервера, где установлен openfire
OpenFire установлен в папку /opt/openfire
192.168.1.1 — IP контроллера домена.
192.168.1.2 — IP резервного контроллера домена.
192.168.1.3 — IP сервера, где установлен openfire.
Первое что нужно сделать и этот шаг очень важен — это ввести нашу линукс — машину в windows домен.
Очень подробно и хорошо этот процесс, на мой взгляд, описан в [2]. Чтобы не переходить со ссылке я опишу основные моменты.
Здесь все просто — мы настраиваем резолвинг нашего jabber-сервера:
# > nano /etc/hosts
и резолвинг других имен в домене. Для этого редактируем файл resolv.conf
# > nano /etc/resolv.conf
Для контроля попробуте резолвить какое-нибудь имя в домене с помощью утилиты nslookup.
Протокол Kerberos очень чувствителен к времени, поэтому необходимо синхронизировать часы. Данную функцию можно доверить демону ntpd. В Интернете есть много информации на этот счет. Не поленитесь и настройте его.
Для принудительной синхронизации часов с часам контроллера домена (а именно он является сервером времени для всего домена) воспользуемся командой ntpdate:
# > ntpdate 192.168.1.1
На выходе команды должно быть что-то в этом духе:
Устанавливаем пакеты указанные ниже.
сyrus-sasl-gssapi
samba
samba-common
После установки переходим к настройке samba. Бекапим на всякий случай оригинал файла настройки самбы:
# > cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
Далее редактируем файл smb.conf.
Очищаем его от всего лишнего, а точнее — все там удаляем (если, конечно, у вас новая установка):
#> cp /dev/null /etc/samba/smb.conf
И вставляем только строчки указанные ниже:
#> nano /etc/samba/smb.conf
После можно запустить samba:
# > service samba start
NOTE: Да, кстати, не забудьте включить автозапуск samba при старте системы
После успешного запуска нужно осуществить вход (join) в наш домен, т.е. сделать Jabber-сервер членом Windows-домена.
Но, прежде чем это сделать, нужно сконфигурить Kerberos- это делается через файл /etc/krb5.conf.
Ниже приведен листинг данного файла:
Теперь наш сервер готов вступить в домен. Для этого выполним команду:
# > net -UAdministrator ads join
где Administrator — это любая учетная запись с правами администратора в Windows — домене
Все, теперь наш сервер в Windows-домене!
Хочу еще раз отметить — этот шаг очень важен, я очень долго мучился из-за того, что мой Jabber-сервер по какой-то причине не был введен в домен и SSO отказывалась работать.
Установка очень хорошо описана на официальном ресурсе и, кроме того, установщик снабжен мастером с которым справится даже ребенок:)
Формирование ключевой пары может происходить на любом компьютере домена под пользователем, обладающим административными правами, и установленным пакетом Support Tools от Microsoft (он идет с каждым дистрибутивом Windows, находится в папке SUPPORT).
Теперь поэтапно будем формировать наш keytab.
1. Установить SupportTools.
2. Зайти в оснастку ActiveDirectory User and Computers и создать нового пользователя, который будет участвовать в SSO.
Пользователь должен быть только в одной группе Domain Users (Пользователи домена). Необходимо отметить опции:
3. Создаем Kerberos XMPP SPN. Если вкратце — эта штука будет указывать, где находится наш Jabber-сервер, то есть будет хранить его fqdn имя.
(SPN — Service Principal Name)
Для формирования этого самого spn используем утилиту из SupportTools: setspn
Наша команда будет выглядеть так:
Note: xmpp-openfire — это та новая учетная запись, которую мы создавали в п.2. Имя выбрано произвольно, можете назвать ее как вам захочется.
4. Далее нам нужно смеппить (mapping) наш созданный SPN на нашу учетку.
Для этого есть утилита ktpass из состава того же SupportTools:
После выполнения будет запрос на ввод пароля, нужно ввести пароль учетной записи которую мы создали в п.2
5. Ну и наконец — формирование нашего заветного
В официальной документации есть два способа формирования: 1- через SupportTools, 2- через средства Java поставляемые вместе с openfire (кстати линукс-дистрибутив openfire не содержит данных средств)
Автор официальной документации очень расплывчато поясняет, зачем нужны два способа и каким именно keytab нужно пользоваться. Автор просто написал — если у вас не получилось с одним keytab, попробуйте другой:)
Лично у меня получилось все с keytab, который я создал средствами SupportTools. Вот так:
Ниже команда, которая создает файл keytab (файл будет в текущей директории):
После ввода здесь так же нужно ввести пароль пользователя.
Далее нужно перенести файл xmpp.keytab в директорию: /opt/openfire/resources (например, программой для файлового взаимодействия через протокол SSH: WinSCP)
Самое интересное будет сейчас;)
Создаем файл: touch /opt/openfire/conf/gss.conf
в него вносим следующее:
debug=true — это режим отладки, он нужен только на период настройки, потом лучше его отключить.
Остальные опции, думаю, понятны без комментариев.
Далее нам нужно включить SSO в openfire. Для этого редактируем файл /opt/openfire/conf/openfire.xml и вносим следующий текст (между тегами )
— кавычки только уберите из тегов, теги XML просто не отображались нормально
В этой конфигурации мы говорим серверу, чтобы он использовал GSSAPI механизм авторизации (он же SSO), указываем наш realm, а так же то, что нужно включить отладочный режим и расположение файла конфигурации этого механизма.
После этого нам нужно добавить свойство (опцию) в конфигурацию сервера. Для этого заходим через веб интерфейс (jabber.mydomain.local:9090) в Server Manager, затем в Server Properties и в самом низу в Add new property:
Property Name: xmpp.fqdn
Property Value: jabber.mydomain.local
Жмем Save Property.
После всех изменений нужно перезапустить openfire.
# > service openfire restart.
Рекомендую смотреть в лог файл warn.log (он находится в /opt/openfire/logs), чтобы понять, что не нравится серверу. Также в этом лог файле будут отображаться сообщения об ошибках при подключении клиентов.
Финишная прямая. Теперь переходим к настройке клиента.
Я буду описывать настройку Windows клиента. Буду использовать Pidgin и Spark, т.к. они поддерживают SSO.
Я лично рекомендую Pidgin, просто потому, что он не использует Java, в отличие от Spark:)
Для работы SSO нам нужно настроить Kerberos. Для этого нужно установить пакет именуемый MIT for Windows.
В процессе установки он потребует указать расположение файла krb5.ini
Данный файл полная копия файла krb5.conf который мы создали — так что просто копируем его в C:\WINDOWS и указываем инсталятору MITа, где его брать.
Далее нужно подшлифовать реестр:
Для Windows 2000 SP4, Windows 2003 Server или Windows Vista:
Для всей линейки Windows XP :
Для применения данного параметра нужно перезагрузить компьютер (весьма досадное обстоятельство).
В настройке Pidgin нет ничего особенного:
— Выбираем протокол XMPP
— Вводим имя пользователя (текущий логин)
— Вводим имя сервера (jabber.mydomain.local)
— Поле пароля оставляем пустое.
Если все хорошо, то Pidgin запустится, если нет, то запускайте его в режиме отладки (опция -d при запуске) и читайте логи сервера.
Лично у меня была одна проблема — сервер, где запущен openfire, не был корректно введен в домен. Кстати, об этом свидетельствует строка в логе в режиме отладки Pidgin: Server not found in Kerberos database. Если вы видите данную ошибку, знайте — сервер нужно удалить из домена и сделать join снова.
Еще очень важный момент. Убедитесь, что в DNS — сервере нет больше A записей IP вашего сервера на другие имена. И чтобы обратная зона была настроена именно на ваше имя сервера, где расположен openfire.
Проверено, SSO не будет работать, если есть более одного имени на один IP. Если вам необходимо сделать несколько имени, то их все нужно прописать в SPN и в DNS сделать CNAME запись на имя вашего сервера.
Удачи!
Сразу отмечу источники, которыми я пользовался при написании данной статьи:
1. Статья с официального ресурса разработчика OpenFire.
HOWTO: SSO Configuration for Windows (Server and Clients) and Mac Clients
(http://www.igniterealtime.org/community/docs/DOC-1362)
2. Еще статья с официального ресурса разработчика.
SSO: An easier way to join your CentOS 5 Openfire server to an AD Domain
(http://www.igniterealtime.org/community/docs/DOC-1522)
3. Перевод статьи под п.1
1. Openfire — Часть 2. Openfire+Red5+Spark+SSO на Windows
(http://mihouny.blogspot.com/2009/02/openfire-3-openfirered5sparksso-windows.html)
Ну что ж, пожалуй, начнем.
Для начала введем некоторые константы.
mydomain.local — имя нашего домена
MYDOMAIN.LOCAL — realm нашего домена
dc1.mydomain.local — fqdn контроллер домена
dc2.mydomain.local — fqdn вторичного контроллера домена (если есть)
jabber.mydomain.local — fqdn имя сервера, где установлен openfire
OpenFire установлен в папку /opt/openfire
192.168.1.1 — IP контроллера домена.
192.168.1.2 — IP резервного контроллера домена.
192.168.1.3 — IP сервера, где установлен openfire.
Первое что нужно сделать и этот шаг очень важен — это ввести нашу линукс — машину в windows домен.
Очень подробно и хорошо этот процесс, на мой взгляд, описан в [2]. Чтобы не переходить со ссылке я опишу основные моменты.
1. Настройка разрешения имен
Здесь все просто — мы настраиваем резолвинг нашего jabber-сервера:
# > nano /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.3 jabber.mydomain.local jabber
и резолвинг других имен в домене. Для этого редактируем файл resolv.conf
# > nano /etc/resolv.conf
search mydomain.local
nameserver 192.168.1.1
nameserver 192.168.1.2
Для контроля попробуте резолвить какое-нибудь имя в домене с помощью утилиты nslookup.
2. Настройка времени.
Протокол Kerberos очень чувствителен к времени, поэтому необходимо синхронизировать часы. Данную функцию можно доверить демону ntpd. В Интернете есть много информации на этот счет. Не поленитесь и настройте его.
Для принудительной синхронизации часов с часам контроллера домена (а именно он является сервером времени для всего домена) воспользуемся командой ntpdate:
# > ntpdate 192.168.1.1
На выходе команды должно быть что-то в этом духе:
13 Feb 18:30:33 ntpdate[17161]: step time server 192.168.1.1 offset 11.730962 sec
3. Установка необходимых пакетов, настройка Samba, Kerberos.
Устанавливаем пакеты указанные ниже.
сyrus-sasl-gssapi
samba
samba-common
После установки переходим к настройке samba. Бекапим на всякий случай оригинал файла настройки самбы:
# > cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
Далее редактируем файл smb.conf.
Очищаем его от всего лишнего, а точнее — все там удаляем (если, конечно, у вас новая установка):
#> cp /dev/null /etc/samba/smb.conf
И вставляем только строчки указанные ниже:
#> nano /etc/samba/smb.conf
workgroup = MYDOMAIN
security = ads
realm = mydomain.local
use kerberos keytab = true
password server = dc1.mydomain.local dc2.mydomain.local
После можно запустить samba:
# > service samba start
NOTE: Да, кстати, не забудьте включить автозапуск samba при старте системы
После успешного запуска нужно осуществить вход (join) в наш домен, т.е. сделать Jabber-сервер членом Windows-домена.
Но, прежде чем это сделать, нужно сконфигурить Kerberos- это делается через файл /etc/krb5.conf.
Ниже приведен листинг данного файла:
[libdefaults]
default_realm = MYDOMAIN.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true
default_tkt_enctypes = des-cbc-crc des-cbc-md5
default_tgs_enctypes = des-cbc-crc des-cbc-md5
[realms]
MYDOMAIN.LOCAL = {
kdc = mydomain.local:88
default_domain = mydomain.local
}
[domain_realm]
mydomain.local = MYDOMAIN.LOCAL
.mydomain.local = MYDOMAIN.LOCAL
Теперь наш сервер готов вступить в домен. Для этого выполним команду:
# > net -UAdministrator ads join
где Administrator — это любая учетная запись с правами администратора в Windows — домене
Все, теперь наш сервер в Windows-домене!
Хочу еще раз отметить — этот шаг очень важен, я очень долго мучился из-за того, что мой Jabber-сервер по какой-то причине не был введен в домен и SSO отказывалась работать.
4. Установка openfire
Установка очень хорошо описана на официальном ресурсе и, кроме того, установщик снабжен мастером с которым справится даже ребенок:)
5. Формирование keytab, для SSO.
Формирование ключевой пары может происходить на любом компьютере домена под пользователем, обладающим административными правами, и установленным пакетом Support Tools от Microsoft (он идет с каждым дистрибутивом Windows, находится в папке SUPPORT).
Теперь поэтапно будем формировать наш keytab.
1. Установить SupportTools.
2. Зайти в оснастку ActiveDirectory User and Computers и создать нового пользователя, который будет участвовать в SSO.
Пользователь должен быть только в одной группе Domain Users (Пользователи домена). Необходимо отметить опции:
- Запретить смену пароля пользователем
- Срок действия пароля не ограничен
- Без предварительной проверки подлинности Kerberos.
3. Создаем Kerberos XMPP SPN. Если вкратце — эта штука будет указывать, где находится наш Jabber-сервер, то есть будет хранить его fqdn имя.
(SPN — Service Principal Name)
Для формирования этого самого spn используем утилиту из SupportTools: setspn
Наша команда будет выглядеть так:
setspn -A xmpp/jabber.mydomain.local@MYDOMAIN.LOCAL xmpp-openfire
Note: xmpp-openfire — это та новая учетная запись, которую мы создавали в п.2. Имя выбрано произвольно, можете назвать ее как вам захочется.
4. Далее нам нужно смеппить (mapping) наш созданный SPN на нашу учетку.
Для этого есть утилита ktpass из состава того же SupportTools:
ktpass -princ xmpp/jabber.mydomain.local@MYDOMAIN.LOCAL -mapuser xmpp-openfire@mydomain.local -pass * -ptype KRB5_NT_PRINCIPAL
После выполнения будет запрос на ввод пароля, нужно ввести пароль учетной записи которую мы создали в п.2
5. Ну и наконец — формирование нашего заветного
keytab
.В официальной документации есть два способа формирования: 1- через SupportTools, 2- через средства Java поставляемые вместе с openfire (кстати линукс-дистрибутив openfire не содержит данных средств)
Автор официальной документации очень расплывчато поясняет, зачем нужны два способа и каким именно keytab нужно пользоваться. Автор просто написал — если у вас не получилось с одним keytab, попробуйте другой:)
Лично у меня получилось все с keytab, который я создал средствами SupportTools. Вот так:
Ниже команда, которая создает файл keytab (файл будет в текущей директории):
ktpass -princ xmpp/jabber.mydomain.local@MYDOMAIN.LOCAL -mapuser xmpp-openfire@mydomain.local -pass * -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab
После ввода здесь так же нужно ввести пароль пользователя.
Далее нужно перенести файл xmpp.keytab в директорию: /opt/openfire/resources (например, программой для файлового взаимодействия через протокол SSH: WinSCP)
6. Настройка openfire на SSO.
Самое интересное будет сейчас;)
Создаем файл: touch /opt/openfire/conf/gss.conf
в него вносим следующее:
com.sun.security.jgss.accept {
com.sun.security.auth.module.Krb5LoginModule
required
storeKey=true
keyTab="/opt/openfire/resources/xmpp.keytab"
doNotPrompt=true
useKeyTab=true
realm="MYDOMAIN.LOCAL"
principal="xmpp/jabber.mydomain.local@MYDOMAIN.LOCAL"
debug=true
isInitiator=false;
};
debug=true — это режим отладки, он нужен только на период настройки, потом лучше его отключить.
Остальные опции, думаю, понятны без комментариев.
Далее нам нужно включить SSO в openfire. Для этого редактируем файл /opt/openfire/conf/openfire.xml и вносим следующий текст (между тегами )
<"sasl">
<"mechs">GSSAPI<"/mechs">
<"realm">MYDOMAIN.LOCAL<"/realm">
<"gssapi">
<"debug">true<"/debug">
<"config">/opt/openfire/conf/gss.conf<"/config">
<"useSubjectCredsOnly">false<"/useSubjectCredsOnly">
<"/gssapi">
<"/sasl">
<"authorization">
<"classList">org.jivesoftware.openfire.auth.DefaultAuthorizationPolicy<"/classList">
<"/authorization">
— кавычки только уберите из тегов, теги XML просто не отображались нормально
В этой конфигурации мы говорим серверу, чтобы он использовал GSSAPI механизм авторизации (он же SSO), указываем наш realm, а так же то, что нужно включить отладочный режим и расположение файла конфигурации этого механизма.
После этого нам нужно добавить свойство (опцию) в конфигурацию сервера. Для этого заходим через веб интерфейс (jabber.mydomain.local:9090) в Server Manager, затем в Server Properties и в самом низу в Add new property:
Property Name: xmpp.fqdn
Property Value: jabber.mydomain.local
Жмем Save Property.
После всех изменений нужно перезапустить openfire.
# > service openfire restart.
Рекомендую смотреть в лог файл warn.log (он находится в /opt/openfire/logs), чтобы понять, что не нравится серверу. Также в этом лог файле будут отображаться сообщения об ошибках при подключении клиентов.
7. Настройка клиента.
Финишная прямая. Теперь переходим к настройке клиента.
Я буду описывать настройку Windows клиента. Буду использовать Pidgin и Spark, т.к. они поддерживают SSO.
Я лично рекомендую Pidgin, просто потому, что он не использует Java, в отличие от Spark:)
Для работы SSO нам нужно настроить Kerberos. Для этого нужно установить пакет именуемый MIT for Windows.
В процессе установки он потребует указать расположение файла krb5.ini
Данный файл полная копия файла krb5.conf который мы создали — так что просто копируем его в C:\WINDOWS и указываем инсталятору MITа, где его брать.
Далее нужно подшлифовать реестр:
Для Windows 2000 SP4, Windows 2003 Server или Windows Vista:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1
Для всей линейки Windows XP :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos
Value Name: AllowTGTSessionKey
Value Type: REG_DWORD
Value: 1
Для применения данного параметра нужно перезагрузить компьютер (весьма досадное обстоятельство).
В настройке Pidgin нет ничего особенного:
— Выбираем протокол XMPP
— Вводим имя пользователя (текущий логин)
— Вводим имя сервера (jabber.mydomain.local)
— Поле пароля оставляем пустое.
Если все хорошо, то Pidgin запустится, если нет, то запускайте его в режиме отладки (опция -d при запуске) и читайте логи сервера.
Лично у меня была одна проблема — сервер, где запущен openfire, не был корректно введен в домен. Кстати, об этом свидетельствует строка в логе в режиме отладки Pidgin: Server not found in Kerberos database. Если вы видите данную ошибку, знайте — сервер нужно удалить из домена и сделать join снова.
Еще очень важный момент. Убедитесь, что в DNS — сервере нет больше A записей IP вашего сервера на другие имена. И чтобы обратная зона была настроена именно на ваше имя сервера, где расположен openfire.
Проверено, SSO не будет работать, если есть более одного имени на один IP. Если вам необходимо сделать несколько имени, то их все нужно прописать в SPN и в DNS сделать CNAME запись на имя вашего сервера.
Удачи!