Ejabberd 1.1.2 + Active Directory

  ВАРНИНГ! ЭТО ЧЕРНОВИК!

Коротко о приятном

   В версии ejabberd 1.1.2 появились новые интересные возможности по части LDAP. Одной из наиболее приятных таких особенностей является поддержка LDAP фильтров в общепринятом синтаксисе и исправления в модуле авторизации. Это позволяет заставить работать ejabberd в связке с ActiveDirectory с минимальным количеством изменений.

Желания и возможности

  Требуется настроить ejabberd 1.1.2 так, что бы пользователи могли аутентифицироваться, используя свои логин и пароль из ActiveDirectory. Все пользователи, которым разрешён доступ к Jabber являются членами Security Group "JabberUsers". Общий ростер должен группировать сотрудников по отделам, должны работать VCard и поиск по сотрудникам из Jabber

Используемые материалы Настройка AD

  Для начала надо сделать некоторые вещи в 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, то ничего страшного в этой опции нету.