Счетчик

Поисковый анализ сайта
яндекс.ћетрика
Cервер и сайт запущен 2011.02.01 на Debian

Данная статья рассеивает мглу неизвестности в процессе установки и настройки связки "CentOS 5.x + OpenFire + Kerberos + SSO + Pidgin". Лично у меня ушла целая неделя на настройку. Основные ошибки были по банальной невнимательности и из-за некорректного перевода статей.



Сразу отмечу источники, которыми я пользовался при написании данной статьи:

1. Статья с официального ресурса разработчика OpenFire. "HOWTO: SSO Configuration for Windows (Server and Clients) and Mac Clients"
2. Еще статья с официального ресурса разработчика. "SSO: An easier way to join your CentOS 5 Openfire server to an AD Domain"
3. Перевод статьи под п.1: "Openfire - Часть 2. Openfire+Red5+Spark+SSO на Windows"

Ну что ж, пожалуй, начнем.

Для начала введем некоторые константы.
OpenFire установлен в папку /opt/openfire

mydomain.local - имя нашего домена
MYDOMAIN.LOCAL - realm нашего домена
dc1.mydomain.local - fqdn контроллер домена
dc2.mydomain.local - fqdn вторичного контроллера домена (если есть)
jabber.mydomain.local - fqdn имя сервера, где установлен openfire
192.168.1.1 - IP контроллера домена.
192.168.1.2 - IP резервного контроллера домена.
192.168.1.3 - IP сервера, где установлен openfire.

Первое что нужно сделать и этот шаг очень важен - это ввести нашу линукс-машину в windows домен. 

Очень подробно и хорошо этот процесс ,на мой взгляд, описан в [2]. Чтобы
не переходить со ссылке я опишу основные моменты.


1. Настройка разрешения имен

Здесь все просто - мы настраиваем резолвинг нашего jabber-сервера:

Добавляем в /etc/hosts

127.0.0.1     localhost.localdomain localhost
        192.168.1.3   jabber.mydomain.local jabber




и резолвинг других имен в домене. Для этого редактируем файл /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



И вставляем в /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



После успешного запуска нужно осуществить вход (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/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. xmpp-openfire




Note: xmpp-openfire - это та новая учетная запись, которую мы создавали в п.2. Имя выбрано произвольно, можете назвать ее как вам захочется.

4. Далее нам нужно смеппить (mapping) наш созданный SPN на нашу учетку.

Для этого есть утилита ktpass из состава того же SupportTools:

ktpass -princ xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -pass * -ptype KRB5_NT_PRINCIPAL



После выполнения будет запрос на ввод пароля, нужно ввести пароль учетной записи которую мы создали в п.2

5. Ну и наконец - формирование нашего заветного keytab.

В официальной документации есть два способа формирования: 1- через SupportTools, 2- через средства Java поставляемые вместе с openfire (кстати линукс-дистрибутив openfire не содержит данных средств)

Автор официальной документации очень расплывчато поясняет, зачем нужны два способа и каким именно keytab нужно пользоваться. Автор просто
написал - если у вас не получилось с одним keytab, попробуйте другой:)

Лично у меня получилось все с keytab, который я создал средствами SupportTools. Вот так:

Ниже команда, которая создает файл keytab (файл будет в текущей директории):

ktpass -princ xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. \ -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/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра."
debug=true
isInitiator=false;
};



debug=true - это режим отладки, он нужен только на период настройки, потом лучше его отключить. 

Остальные опции, думаю, понятны без комментариев.

Далее нам нужно включить SSO в openfire. Для этого редактируем файл /opt/openfire/conf/openfire.xml и вносим следующий текст (между тегами
<jive> </jive>)

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



В этой конфигурации мы говорим серверу, чтобы он использовал GSSAPI механизм авторизации (он же SSO), указываем наш realm, а так же то, что нужно включить отладочный режим и расположение файла конфигурации этого механизма.

После этого нам нужно добавить свойство (опцию) в конфигурацию сервера. Для этого заходим через веб интерфейс
(http://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 запись на имя вашего сервера. 

Офф статья

Перейдем на закладку Пользователи/Группы и убедимся что данные из AD считаны нормально:

Как видим "смешались в кучу кони, люди" - учетные компьютеров и пользователей добавились вперемешку, без какой либо разбивки по группам. Для упорядочивания списка пользователей с последующим добавлением в общий ростер сделайте следующее: в Active Directory создайте одну или несколько групп (например Openfire User) в которые добавьте необходимых пользователей. Затем перейдите на закладку Группы в админ-панели, найдите в списке групп созданную нами группу и включите ее в общий ростер, воспользовавшись блоком настроек Совместный список

Теперь можно установить клиента и попробовать подключиться к серверу. В качестве клиента мы использовали Pandion, данный клиент имеет приятный дизайн, хорошо вписывающийся в корпоративную среду и, что немаловажно, поставляется в виде msi-пакета, что позволяет быстро развернуть его средствами GPO

 

 

 

 

Выборка Важнейших команд

setspn -A xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. xmpp-openfire
ktpass -princ xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -pass * -ptype KRB5_NT_PRINCIPAL


ktpass -princ xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -mapuser Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. -pass * -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab

kinit -V -k -t /usr/share/openfire/resources/xmpp.keytab xmpp/Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.


sasl.gssapi.config
/etc/openfire/gss.conf
sasl.gssapi.debug
false
sasl.gssapi.useSubjectCredsOnly
false
sasl.mechs
GSSAPI
sasl.realm
DOMAIN.RU
xmpp.fqdn
chat.domain.ru

Добавить комментарий


Защитный код
Обновить