Здравствуйте!
Хочу поделиться опытом установки сервера Openfire на Debian в домене AD Windows Server 2008 с использованием SSO клиентом Spark.
Сама установка проста и занимает немного времени, основные сложности для меня возникли при настройке kerberos-авторизации всей связки ПО.
Инфраструктура:
Openfire 3.8.2 устанавливаем на Debian 7.0 «Wheezy» x64 с использованием СУБД MySQL.
Имя Debian-сервера: openfireserver.
Служба Active Directory развернута на Windows 2008 Server Standard (Kerberos использует шифрование RC4-HMAC-NT по умолчанию).
Домен realm.local.
Рабочие станции Windows XP Pro и Windows 7 Pro x32/x64 с установленным клиентом Spark 2.6.3.
Инсталляция по шагам (на Debian уже предустановлены MySQL, Samba, Sun/Oracle Java):
1) Логинимся под root-ом.
2) Проверяем предустановленный софт:
Debian GNU/Linux 7.0 \n \l
Version 3.6.6
mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (x86_64) using readline 6.2
java version «1.7.0_21»
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
3) Создаем базу данных «openfire» и пользователя MySQL «openfire»:
Enter password: [набираем пароль пользователя root в MySQL]
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 49
Server version: 5.5.31-0+wheezy1 (Debian)
Copyright 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Bye
4) Загружаем и устанавливаем Openfire сервер.
100%[==================================>] 12 838 026 2,92M/s за 7,6s
2013-05-28 12:58:04 (1,62 MB/s) — «downloadServlet?filename=openfire%2Fopenfire_3.8.2_all.deb» saved [12838026/12838026]
Warning: /var/lib/openfire
Starting openfire: openfire
Stopping openfire: openfire.
Меняем владельца:
Starting openfire: openfire.
5) Переходим в браузере по адресу (я использую Mozilla Firefox):
http://openfireserver:9090
Выбираем язык (русский перевод кривой, я оставил English)
Набираем Domain name: openfireserver.realm.local
Далее выбираем «Standard Database Conncection»
Выбираем Preset MySQL
Исправляем [hostname] на localhost и [database-name] на openfire
Набираем Username: openfire
Набираем Password: PasswordGoldFish
Нажимаем «Continue»
Настройка Profile, Step 1:
Выбираем «Directory Server (LDAP)»
Выбираем Server Type: Active Directory
Набираем Host: realm.local
Набираем Base DN: ou=Jabber,ou=Company_Users,dc=realm,dc=local
Набираем Administrator DN: cn=LDAP,cn=Users,dc=realm,dc=local
Набираем Password: Password_LDAP
Для этого шага я предварительно создал пользователя в AD с именем LDAP и вечным паролем: Password_LDAP
Сохраняем и продолжаем.
Шаги 2 и 3 сохраняем без изменений.
Добавляем администраторов Openfire, это могут быть любые пользователи из Base DN.
Просто набираем их логины и нажимаем «Add».
Если пользователи успешно добавились, жмем «Continue».
На этом установка Openfire закончена, можно зайти в консоль администратора.
Если зайти в раздел Users можно увидеть, что все пользователи из Base DN уже есть.
Все уже работает и пользователь могут авторизовываться обычным способом, но моя цель SSO (главная проблема — блокировка учетных записей в AD после смены пароля).
Для этого идем дальше…
6) Настраиваем Samba:
7) Настраиваем Kerberos:
8) Перезапускаем Samba
9) Присоединяем Debian сервер к AD:
или
10) Проверяем как присоединилось:
Join is OK
Join to 'REALM' is OK
11) Проверка DNS:
Server: 192.168.1.1
Address: 192.168.1.1#53
Name: openfireserver.realm.local
Address: 192.168.1.22
Server: 192.168.1.1
Address: 192.168.1.1#53
22.1.168.192.in-addr.arpa name = openfireserver.realm.local.
Следующие пять шагов выполняем на контроллере домена Windows Server 2008:
12) Создаем в AD пользователя xmpp-openfire с вечным паролем и включенной опцией «Do not require Kerberos preauthentication» (Без предварительной проверки подлинности Kerberos).
13) Создаем SPN и связываем ее с пользователем xmpp-openfire:
Запускаем командную строку с привилегиями Администратора.
Вводим пароль пользователя xmpp-openfire.
14) Если для генерации keytab-файла будем использовать JRE, тогда создаем файл C:\Windows\krb5.ini с содержимым:
15) Создаем keytab-файл (должно быть установлено Sun/Oracle JRE6):
Вводим пароль пользователя xmpp-openfire.
Или можно воспользоваться другим способом, без JRE
Вводим пароль пользователя xmpp-openfire.
16) Проверяем созданный keytab-файл (нужно JRE):
17) Переносим проверенный файл xmpp.keytab на Debian сервер в /usr/share/openfire/resources
Меняем владельца:
18) Проверяем файл xmpp.keytab на Debian сервере:
19) Создаем на Debian сервере файл \etc\openfire\gss.conf с содержимым:
20) Заходим браузером в консоль администратора Openfire и в разделе System properties добавляем параметры:
sasl.gssapi.config = /etc/openfire/gss.conf
sasl.gssapi.debug = false
sasl.gssapi.useSubjectCredsOnly = false
sasl.mechs = GSSAPI
sasl.realm = REALM.LOCAL
xmpp.fqdn = openfireserver.realm.local
21) Перезапуск Openfire
22) Устанавливаем на рабочие станции Jabber-клиента Spark 2.6.3 with JRE.
23) Правим реестр:
В раздел
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
(For XP: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos)
добавляем параметр типа DWORD
AllowTGTSessionKey со значением 1.
24) Создаем в C:\Windows файл kbd5.ini с содержимым:
25) Перезагружаем рабочую станцию.
26) В Spark выбираем опцию «Use Single Sign-On (SSO) via GSSAPI», набираем openfireserver в поле «Сервер» и подключаемся.
В Windows XP нет проблем, но в Windows 7 SSO в Spark работает из коробки только с непривилегированными пользователями.
Если вы работаете под учетной записью администратора — запускайте Spark от имени Администратора или отключите UAC.
Удачи!
По мере освоения продукта следует продолжение…
Хочу поделиться опытом установки сервера Openfire на Debian в домене AD Windows Server 2008 с использованием SSO клиентом Spark.
Сама установка проста и занимает немного времени, основные сложности для меня возникли при настройке kerberos-авторизации всей связки ПО.
Инфраструктура:
Openfire 3.8.2 устанавливаем на Debian 7.0 «Wheezy» x64 с использованием СУБД MySQL.
Имя Debian-сервера: openfireserver.
Служба Active Directory развернута на Windows 2008 Server Standard (Kerberos использует шифрование RC4-HMAC-NT по умолчанию).
Домен realm.local.
Рабочие станции Windows XP Pro и Windows 7 Pro x32/x64 с установленным клиентом Spark 2.6.3.
Инсталляция по шагам (на Debian уже предустановлены MySQL, Samba, Sun/Oracle Java):
1) Логинимся под root-ом.
2) Проверяем предустановленный софт:
# cat /etc/issue
Debian GNU/Linux 7.0 \n \l
# smbd -V
Version 3.6.6
# mysql -V
mysql Ver 14.14 Distrib 5.5.31, for debian-linux-gnu (x86_64) using readline 6.2
# java -version
java version «1.7.0_21»
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)
3) Создаем базу данных «openfire» и пользователя MySQL «openfire»:
# mysql -p
Enter password: [набираем пароль пользователя root в MySQL]
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 49
Server version: 5.5.31-0+wheezy1 (Debian)
Copyright 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE openfire;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON openfire.* TO 'openfire'@'localhost' IDENTIFIED BY 'PasswordGoldFish' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
4) Загружаем и устанавливаем Openfire сервер.
# cd /tmp # wget http://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_3.8.2_all.deb
100%[==================================>] 12 838 026 2,92M/s за 7,6s
2013-05-28 12:58:04 (1,62 MB/s) — «downloadServlet?filename=openfire%2Fopenfire_3.8.2_all.deb» saved [12838026/12838026]
/tmp# cp downloadServlet\?filename\=openfire%2Fopenfire_3.8.1_all.deb openfire_3.8.2_all.deb /tmp# rm downloadServlet\?filename\=openfire%2Fopenfire_3.8.2_all.deb /tmp# dpkg -i openfire_3.8.2_all.deb
Warning: /var/lib/openfire
Starting openfire: openfire
# /etc/init.d/openfire stop
Stopping openfire: openfire.
Меняем владельца:
# chown -R openfire:openfire /var/lib/openfire # /etc/init.d/openfire start
Starting openfire: openfire.
5) Переходим в браузере по адресу (я использую Mozilla Firefox):
http://openfireserver:9090
Выбираем язык (русский перевод кривой, я оставил English)
Набираем Domain name: openfireserver.realm.local
Далее выбираем «Standard Database Conncection»
Выбираем Preset MySQL
Исправляем [hostname] на localhost и [database-name] на openfire
Набираем Username: openfire
Набираем Password: PasswordGoldFish
Нажимаем «Continue»
Настройка Profile, Step 1:
Выбираем «Directory Server (LDAP)»
Выбираем Server Type: Active Directory
Набираем Host: realm.local
Набираем Base DN: ou=Jabber,ou=Company_Users,dc=realm,dc=local
Набираем Administrator DN: cn=LDAP,cn=Users,dc=realm,dc=local
Набираем Password: Password_LDAP
Для этого шага я предварительно создал пользователя в AD с именем LDAP и вечным паролем: Password_LDAP
Сохраняем и продолжаем.
Шаги 2 и 3 сохраняем без изменений.
Добавляем администраторов Openfire, это могут быть любые пользователи из Base DN.
Просто набираем их логины и нажимаем «Add».
Если пользователи успешно добавились, жмем «Continue».
На этом установка Openfire закончена, можно зайти в консоль администратора.
Если зайти в раздел Users можно увидеть, что все пользователи из Base DN уже есть.
Все уже работает и пользователь могут авторизовываться обычным способом, но моя цель SSO (главная проблема — блокировка учетных записей в AD после смены пароля).
Для этого идем дальше…
6) Настраиваем Samba:
# nano /etc/samba/smb.conf
[global] workgroup = REALM realm =REALM.LOCAL security = ADS encrypt passwords = true dns proxy = no socket options = TCP_NODELAY kerberos method = secrets and keytab winbind refresh tickets = yes password server = realm.local domain master = no local master = no preferred master = no os level = 0 domain logons = no load printers = no show add printer wizard = no printcap name = /dev/null disable spoolss = yes
7) Настраиваем Kerberos:
# nano /etc/krb5.conf
[libdefaults] default_realm = REALM.LOCAL kdc_timesync = 1 forwardable = true proxiable = true default_tkt_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5 default_tgs_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5 permitted_enctypes = rc4-hmac des3-cbc-sha1 des-cbc-crc des-cbc-md5 [realms] REALM.LOCAL = { kdc = realm.local admin_server = realm.local default_domain = REALM.LOCAL } [domain_realm] .realm.local = REALM.LOCAL realm.local = REALM.LOCAL
8) Перезапускаем Samba
# /etc/init.d/samba restart
9) Присоединяем Debian сервер к AD:
# net ads join -U DomainAdminAccount -D REALM.LOCAL
или
# net rpc join -U DomainAdminAccount
10) Проверяем как присоединилось:
# net ads testjoin
Join is OK
# net rpc testjoin
Join to 'REALM' is OK
11) Проверка DNS:
# nslookup > openfireserver
Server: 192.168.1.1
Address: 192.168.1.1#53
Name: openfireserver.realm.local
Address: 192.168.1.22
> 192.168.1.22
Server: 192.168.1.1
Address: 192.168.1.1#53
22.1.168.192.in-addr.arpa name = openfireserver.realm.local.
> exit
Следующие пять шагов выполняем на контроллере домена Windows Server 2008:
12) Создаем в AD пользователя xmpp-openfire с вечным паролем и включенной опцией «Do not require Kerberos preauthentication» (Без предварительной проверки подлинности Kerberos).
13) Создаем SPN и связываем ее с пользователем xmpp-openfire:
Запускаем командную строку с привилегиями Администратора.
>setspn -A xmpp/openfireserver.realm.local@REALM.LOCAL xmpp-openfire >ktpass -princ xmpp/openfireserver.realm.local@REALM.LOCAL -mapuser xmpp-openfire@realm.local -pass * -ptype KRB5_NT_PRINCIPAL
Вводим пароль пользователя xmpp-openfire.
14) Если для генерации keytab-файла будем использовать JRE, тогда создаем файл C:\Windows\krb5.ini с содержимым:
[libdefaults] default_realm = REALM.LOCAL [realms] REALM.LOCAL = { kdc = realm.local admin_server = realm.local default_domain = REALM.LOCAL } [domain_realm] .realm.local = REALM.LOCAL realm.local = REALM.LOCAL
15) Создаем keytab-файл (должно быть установлено Sun/Oracle JRE6):
cd C:\Program Files (x86)\Java\jre6\bin> C:\Program Files (x86)\Java\jre6\bin>ktab -k xmpp.keytab -a xmpp/openfireserver.realm.local@REALM.LOCAL
Вводим пароль пользователя xmpp-openfire.
Или можно воспользоваться другим способом, без JRE
>ktpass -princ xmpp/openfireserver.realm.local@REALM.LOCAL -mapuser xmpp-openfire@realm.local -pass * -ptype KRB5_NT_PRINCIPAL -out xmpp.keytab
Вводим пароль пользователя xmpp-openfire.
16) Проверяем созданный keytab-файл (нужно JRE):
C:\Program Files (x86)\Java\jre6\bin>kinit -k -t xmpp.keytab xmpp/openfireserver.realm.local@REALM.LOCAL
17) Переносим проверенный файл xmpp.keytab на Debian сервер в /usr/share/openfire/resources
Меняем владельца:
# chown openfire:openfire xmpp.keytab
18) Проверяем файл xmpp.keytab на Debian сервере:
# kinit -V -k -t /usr/share/openfire/resources/xmpp.keytab xmpp/openfireserver.realm.local@REALM.LOCAL
19) Создаем на Debian сервере файл \etc\openfire\gss.conf с содержимым:
com.sun.security.jgss.accept { com.sun.security.auth.module.Krb5LoginModule required storeKey=true keyTab="/usr/share/openfire/resources/xmpp.keytab" doNotPrompt=true useKeyTab=true realm="REALM.LOCAL" principal="xmpp/openfireserver.realm.local@REALM.LOCAL" isInitiator=false debug=true; };
20) Заходим браузером в консоль администратора Openfire и в разделе System properties добавляем параметры:
sasl.gssapi.config = /etc/openfire/gss.conf
sasl.gssapi.debug = false
sasl.gssapi.useSubjectCredsOnly = false
sasl.mechs = GSSAPI
sasl.realm = REALM.LOCAL
xmpp.fqdn = openfireserver.realm.local
21) Перезапуск Openfire
# /etc/init.d/openfire restart
22) Устанавливаем на рабочие станции Jabber-клиента Spark 2.6.3 with JRE.
23) Правим реестр:
В раздел
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters
(For XP: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos)
добавляем параметр типа DWORD
AllowTGTSessionKey со значением 1.
24) Создаем в C:\Windows файл kbd5.ini с содержимым:
[libdefaults] default_realm = REALM.LOCAL default_tkt_enctypes = rc4-hmac default_tgs_enctypes = rc4-hmac [realms] REALM.LOCAL = { kdc = realm.local admin_server = realm.local default_domain = REALM.LOCAL } [domain_realm] .realm.local = REALM.LOCAL realm.local = REALM.LOCAL
25) Перезагружаем рабочую станцию.
26) В Spark выбираем опцию «Use Single Sign-On (SSO) via GSSAPI», набираем openfireserver в поле «Сервер» и подключаемся.
В Windows XP нет проблем, но в Windows 7 SSO в Spark работает из коробки только с непривилегированными пользователями.
Если вы работаете под учетной записью администратора — запускайте Spark от имени Администратора или отключите UAC.
Удачи!
По мере освоения продукта следует продолжение…