Настройка интеграции ejabberd 18.12.1 с Active Directory на Debian 9. Настройка SSO (Single Sign On) авторизации.
Продолжаю свое знакомство с XMPP-сервером, на базе ejabberd и реализацию задачи по организации достойного корпоративного мессенджера.
Рассмотрим как интегрировать ejabberd с Active Directory на базе Windows Server 2012 R2, в частности возможность входа на XMPP-сервер по доменным учетным данным, формирование списка контактов (ростера) на основе пользовательских данных с Active Directory, загрузка пользовательских сведений в vCard из Active Directory, а так же рассмотрим вариант настройки SSO (Single Sign On) авторизации в ejabberd.
Исходные данные:
- XMPP-сервер ejabberd 18.12.1 на Debian 9 (установленный по этой статье).
- Домен (example.com) развернут на Windows Server 2012 R2 (развернутый по этой статье).
Настройка домена
В конфигурационном файле /etc/ejabberd/ejabberd.yml
указываем обслуживаемый виртуальный домен, в моем примере это example.com
:
hosts:
- "example.com"
Создание сертификата
Для использования SSL, генерируем самоподписной сертификат, для обслуживаемого домена:
openssl req -new -x509 -nodes -newkey rsa:1024 -days 1825 -keyout private.key -out ejabberd.pem
...
## Common Name (e.g. server FQDN or YOUR name) []:example.com
Common Name
, указать FQDN домена, для которого генерируется сертификат.Далее добавляем приватный ключ к сертификату, назначает права на сертификат и перемещаем его для удобства в каталог установки ejabberd:
cat private.key >> ejabberd.pem
chown root:ejabberd ejabberd.pem
chmod 640 ejabberd.pem
mv ejabberd.pem /etc/ejabberd/ejabberd.pem
В конфигурационном файле /etc/ejabberd/ejabberd.yml
, указываем использование сгенерированного сертификата:
certfiles:
- "/etc/ejabberd/ejabberd.pem"
Настройка LDAP соединения
В конфигурационном файле /etc/ejabberd/ejabberd.yml
, добавляем следующие строки:
ldap_servers:
- "dc1.example.com"
ldap_port: 389
ldap_rootdn: "CN=ejabberd,OU=SystemUsers,DC=example,DC=com"
ldap_password: "Aa1234567"
ldap_base: "ou=ActiveUsers,dc=example,dc=com"
ldap_uids: ["sAMAccountName"]
auth_method:
- ldap
Пояснения по строкам:
ldap_servers | указываем FQDN домен контроллера |
ldap_port | используемый порт подключатся к Active Directory |
ldap_rootdn | учетная запись пользователя через которого будет выполнятся просмотр Active Directory |
ldap_password | пароль от учетной записи, указанной выше |
ldap_base | указываем область поиска учетных записей |
ldap_uids | указываем какие данные использовать в качестве JID идентификатора |
auth_method | указываем какой метод аутентификации использовать |
Так же в секции ACL, укажем учетную запись администратора:
acl:
admin:
user:
- "superadmin"
Теперь можно подключится к домену @example.com
, используя доменные учетные записи (прим. superadmin@example.com
).
Настройка списка контактов LDAP
С авторизацией по доменным учетным записям разобрались, теперь для удобной работы нужно прокинуть всем пользователям контакты, всех сотрудников компании.
Для структурирования списка контактов по отделам, необходимо чтобы в свойствах пользователей были заполнены поля (Отдел). Для примера, приведу свойства одного из пользователей домена:
В конфигурационном файле /etc/ejabberd/ejabberd.yml
, в секции modules
, добавляем описание модуля mod_shared_roster_ldap
:
modules:
mod_shared_roster_ldap:
ldap_base: "ou=ActiveUsers,dc=example,dc=com"
ldap_rfilter: "(objectClass=user)"
ldap_groupattr: "department"
ldap_groupdesc: "department"
ldap_memberattr: "sAMAccountName"
ldap_userdesc: "displayName"
Пояснения по строкам:
ldap_base | в какой области искать учетные записи пользователей |
ldap_rfilter | фильтруем просмотр только в пользователях |
ldap_groupattr | по какому параметру группировать контакты |
ldap_groupdesc | из какого параметра брать название группы |
ldap_memberattr | по какому параметру добавлять пользовательский контакт |
ldap_userdesc | из какого параметра брать название контакта |
В итоге после авторизации, список контактов предстанет в таком виде:
В списке контактов, все сотрудники компании будут находится в своих отделах, что заметно упростит поиск того или иного контакта для переписки.
Загрузка сведений в vCard из LDAP
Последним шагом в интеграции ejabberd в корпоративную среду, у меня будет заполнение пользовательских данные vCard
из данных Active Directory
. Из свойств пользовательских учетных записей, будем брать нужную нам информацию и импортировать ее в vCard каждого пользователя.
В конфигурационном файле /etc/ejabberd/ejabberd.yml
, в секции modules
, добавляем описание модуля mod_vcard
:
modules:
mod_vcard:
db_type: ldap
ldap_vcard_map:
"NICKNAME": {"%s": ["displayName"]}
"FAMILY": {"%s": ["sn"]}
"GIVEN": {"%s": ["givenName"]}
"FN": {"%s": ["displayName"]}
"EMAIL": {"%s": ["mail"]}
"ORGNAME": {"%s": ["company"]}
"ORGUNIT": {"%s": ["department"]}
"TITLE": {"%s": ["title"]}
"TEL": {"%s": ["telephoneNumber"]}
ldap_search_fields:
"User": "%u"
"Full Name": "displayName"
"Given Name": "givenName"
"Family Name": "sn"
"Email": "mail"
"Organization Name": "company"
"Organization Unit": "department"
"Title": "title"
"Telephone": "telephoneNumber"
ldap_search_reported:
"Full Name": "FN"
"Nickname": "NICKNAME"
Пояснения по строкам:
db_type | указываем какой тип данных будем использовать |
ldap_vcard_map | сопоставляем поля в vCard и Active Directory |
ldap_search_fields | определяем форму поиска и атрибуты Active Directory |
ldap_search_reported | отображение контакта |
В итоге в сведения о пользователе, будут автоматически взяты из Active Directory и будут выглядеть вот так:
Настройка SSO (Single Sign On)
Сервер ejabberd поддерживает SSO (Single Sign On) авторизацию, но к сожалению далеко не на все XMPP-клиентах можно воспользоваться данной функцией.
Я использую в качестве XMPP-клиента Miranda NG v0.95.10
, она поддерживает SSO авторизацию.
Настройку SSO на Debian системе, я уже описывал в этой статье и они идентичны под текущую задачу. Выполняем все шаги в указанной статье (само собой изменяя такие данные как имя системы, имя служебного пользователя, доменное имя) до пункта «Настройка Apache (Debian 8 Jessie)».
Выставляем права на KEYTAB-файл:
chown root:ejabberd /etc/ejabberd/ejabberd.keytab
chmod 640 /etc/ejabberd/ejabberd.keytab
В конфигурационном файле /etc/ejabberd/ejabberd.yml
, добавляем следующие строки:
auth_method:
- anonymous
- ldap
allow_multiple_connections: true
anonymous_protocol: both
Пояснения по строкам:
auth_method | обязательно указываем несколько методов авторизации (anonymous, ldap), на случай если клиент не поддерживает SSO, чтобы всегда можно было авторизоваться обычным способом. |
allow_multiple_connections | данная опция используется только когда включен anonymous режим. Она позволяет использовать одно и то же имя пользователя несколько раз в режиме anonymous входа, если для подключения используются разные ресурсы. |
anonymous_protocol | указываем использование SASL Anonymous и Login anonymous для авторизации. |
Перезапускаем eJabberd сервер:
service ejabberd restart
На примере XMPP-клиента Miranda NG v0.95.10, добавляем учетную запись XMPP и в поле «Домен/Сервер», указываем название домена, отмечает галочкой пункт «Доменный логин».
Если все сделали правильно по инструкции, то авторизация будет осуществлена, без ввода имени пользователя и пароля.
Спасибо большое! Только после указания на рутовом уровне вот этого я смог зайти по LDAP, но что самое главное я смогу видеть все свои LDAP контакты! До этого не видел!
Если бы ещё СБП я б перевёл, ух перевёл бы!)
ldap_servers:
— «dc1.example.com»
ldap_port: 389
ldap_rootdn: «CN=ejabberd,OU=SystemUsers,DC=example,DC=com»
ldap_password: «Aa1234567»
ldap_base: «ou=ActiveUsers,dc=example,dc=com»
ldap_uids: [«sAMAccountName»]
auth_method:
— ldap
Добрый день.
Кто-нибудь сталкивался с тем, когда включаешь SSO, перестает формироваться список Общих контактов из LDAP.
auth_method:
# — ldap
— anonymous
anonymous_protocol: both.
Когда указано вот так:
auth_method:
— ldap
— anonymous
anonymous_protocol: both
То LDAP Общая книга формируется. Но не работает SSO, только LDAP.
Как можно гранулировано настроить SSO для авторизации пользователей, а LDAP для формирования книги контактов.
Здравствуйте. Аналогичная ситуация. Где то что то недосказано. Для gssapi есть патчи, но они старые. А авторизация типа SSO проходит скорей всего по anonymous.
Доброго времени суток, я в администрировании новичок, поставили задачу персональный корпоративный мессенджер поднять, сразу наткнулся на Ejabberd с его ерлангом и не понимаю куда все эти строчки вставлять в начало=середину или конец, Также воспользовался вашим гайдом по настройке и никак не могу дойти до конца:D, зачем нужен ssl(можете принцип объяснить, я уже не пойму когда сертификаты нужно на другие машины перекидывать, а когда нет), достаточно ли будет того чтобы debian и AD были в одной подсети или необходимо Debian в домен вводить. Спасибо.
Здравствуйте, пробовал по вашей статье настроить SSO, но что-то никак не авторизуются клиенты при включенной галочке «доменный логин». В логе записи: @ejabberd_c2s:process_auth_result:276 (tls|) Failed c2s PLAIN authentication for user.u@domain.local from 192.168.x.54: Invalid username or password
Без галочки все отлично работает
Билет керберос
kinit -kV -p ejabberd/server.domain.local
Using default cache: /tmp/krb5cc_0
Using principal: ejabberd/server.domain.local@DOMAIN.LOCAL
Authenticated to Kerberos v5
Добрый день!
Всё настроил как тут описано, всё работает. Вопрос: как сделать чтобы vcard брался ТОЛЬКО из LDAP? Чтобы пользователи не могли изменить свои данные в vcard.
Спасибо за статью, скажите а можно ли реализовать на ejabberd чат для корпоративной сети, а не месссенджер? Просто в данный момоент используется чат V-talking, но он имеет проблемы и недостатки, ищу ему алтернативу. А т.к. в сети больше половины машин по операционной системой Windows XP, то выбор не сильно большой.
Конечно можно, я собственно и делал для корпоративного общения. Единственный минус это отсутствие клиентов должных под него, если на ПК можно какой то единый найти, то вот для мобильных устройств все печальней, у тех кто использует Android, там есть замечательно приложение XABBER, а вот у кого Apple, то там все печально, имеющиеся приложения с поддержкой XMPP мало и все они ущербны..
Я имел ввиду именно чат. Т.к. по умолчанию jabber сделан как мессенджер. У меня же пользователи привыкли к варианту когда есть общее поле общения и список контактов сбоку от окна.
Все верно, можно создавать Chatroom, с доступами и т.д. и т.д., в этом плане XMPP (ejabberd) хорош.
Благодарю за быстрый ответ. Значит буду ставить и разбираться.
Добрый день! Все получилось, кроме SSO. У ejabberd крутится на винде, собственно, какие манипуляции надо произвести, чтобы заработало SSO?
Добрый день, не знаю, т.к. не разбирал такую связку на Windows