ВАРНИНГ! ЭТО ЧЕРНОВИК!
Коротко о приятномВ версии ejabberd 1.1.2 появились новые интересные возможности по части LDAP. Одной из наиболее приятных таких особенностей является поддержка LDAP фильтров в общепринятом синтаксисе и исправления в модуле авторизации. Это позволяет заставить работать ejabberd в связке с ActiveDirectory с минимальным количеством изменений.
Желания и возможностиТребуется настроить ejabberd 1.1.2 так, что бы пользователи могли аутентифицироваться, используя свои логин и пароль из ActiveDirectory. Все пользователи, которым разрешён доступ к Jabber являются членами Security Group "JabberUsers". Общий ростер должен группировать сотрудников по отделам, должны работать VCard и поиск по сотрудникам из Jabber
Используемые материалыДля начала надо сделать некоторые вещи в AD. Необходимо создать группу, члены которой будут иметь доступ к jabber серверу и показываться в ростере. В нашем примере используется домен maya.ku3 и группа JabberUsers. После внесения всех нужных пользователей в эту группу надо прописать им в поле департамента группу в общем ростере, которой они будут принадлежать. Например пользователь vasya@maya.ku3 должен быть включен в группу JabberUsers и в поле департамента у него будет прописано Support. Это заставит его контакт появиться в группе Support в ростере. Путано, но надеюсь общий смысл ясен.
Настройка ejabberdВ новой версии этот процесс стал лёгок и приятен. Разбивается он на три логические части:
В качестве метода авторизации указываем ldap. В фильтре 'ldap_filter' указана группа и дополнительные параметры фильтрации. Фильтр расширяется по желанию :-). Соединение к AD делается от отдельного пользователя ejabberd.
{auth_method, ldap}.
{ldap_servers, ["10.0.149.2"]}.
{ldap_uidattr, "sAMAccountName"}.
{ldap_filter, "(memberOf=CN=JabberUsers,CN=Users,DC=maya,DC=ku3)(|(userAccountControl=66050)(userAccountControl=66048))"}.
{ldap_base, "dc=maya,dc=ku3"}.
{ldap_rootdn, "CN=ejabberd,CN=Users,DC=maya,DC=ku3"}.
{ldap_password, "SuperMegaSecret" }.
Настройка VCard и поиска
Тут всё ещё проще. В новой версии ejabberd у нас появилась возможность самим определять соответствия атрибутов. Крайне полезно для самого стандартного на свете LDAP-сервера :-). В модулях прописываем примерно нижеследующее.
{mod_vcard_ldap,
[{ldap_vcard_map,
[{"NICKNAME", "%s", ["displayname"]},
{"GIVEN", "%s", ["givenName"]},
{"MIDDLE", "%s", ["initials"]},
{"FAMILY", "%s", ["sn"]},
{"FN", "%s", ["displayName"]},
{"EMAIL", "%s", ["mail"]},
{"ORGNAME", "%s", ["company"]},
{"ORGUNIT", "%s", ["department"]},
{"CTRY", "%s", ["c"]},
{"LOCALITY", "%s", ["l"]},
{"STREET", "%s", ["streetAddress"]},
{"REGION", "%s", ["st"]},
{"PCODE", "%s", ["postalCode"]},
{"TITLE", "%s", ["title"]},
{"URL", "%s", ["wWWHomePage"]},
{"DESC", "%s", ["description"]},
{"TEL", "%s", ["telephoneNumber"]}]},
{ldap_search_fields,
[{"User", "%u"},
{"Name", "givenName"},
{"Family Name", "sn"},
{"Email", "mail"},
{"Company", "company"},
{"Department", "department"},
{"Role", "title"},
{"Description", "description"},
{"Phone", "telephoneNumber"}]},
{ldap_search_reported,
[{"Full Name", "FN"},
{"Nickname", "NICKNAME"},
{"Email", "EMAIL"}]}
]
},
Настройка SharedRoster
Надо собрать модуль mod_shared_roster_ldap, на который давалась ссылка выше, и прописать его с указанием атрибутов, по которым будет строиться ростер.
{mod_shared_roster_ldap,
[{ldap_groupattr,"department"},
{ldap_groupdesc,"department"},
{ldap_rfilter, "(&(memberOf=CN=JabberUsers,CN=Users,DC=maya,DC=ku3)(|(userAccountControl=66050)(userAccountControl=66048)))"},
{ldap_memberattr,"sAMAccountName"},
{ldap_userdesc,"cn"}
]
},
Настройка клиента
Для авторизации нам необходимо иметь пароль в открытом виде. Поэтому надо в клиенте разрешить передачу пароля незашифрованным. Если использовать SSL, то ничего страшного в этой опции нету.