Создаем адресную книгу используя OpenLDAP на Ubuntu server 14.04.5 LTS

Понадобилось на работе организовать корпоративную адресную книгу, простую в содержании, легко редактируемую и чтобы ее можно было использовать в почтовых клиентах пользователей (MS Outlook, Mozilla Thunderbird). Реализовать задачу решил с помощью OpenLDAP.

OpenLDAP – это бесплатный сервер каталогов LDAP, который обладает достаточной функциональностью и полностью совместим с Outlook Express, Mozilla и Mozilla Thunderbird.

 

Установка OpenLDAP и заполнение базы данных

Обновляем систему до актуального состояния.

sudo apt-get update && sudo apt-get upgrade -y

Изменим доменное имя в системе на подходящее.

sudo nano /etc/hosts

Указываем желаемое доменное имя, на его основе будет автоматом создан базовый уровень дерева LDAP.

127.0.1.1 hostname.example.com hostname

Теперь устанавливаем OpenLDAP. В процессе установке будет запрос на задание пароля от учетной записи admin.

sudo apt-get install slapd ldap-utils

После установки проверим работает ли служба каталогов slapd

sudo netstat -nap tcp | grep 389

Видим что служба slapd работает и что она слушает любые подключения.

tcp   0   0  0.0.0.0:389   0.0.0.0:*   LISTEN 926/slapd 
tcp6  0   0  :::389        :::*        LISTEN 926/slapd

Все отлично служба каталогов установлена и запущена. Теперь можно заносить данные в нашу базу данных. Данные в базу вносятся посредством ldif файлов.

Создадим ldif файл:

nano LDAP.ldif

Для начала создадим ноды для хранения пользователей и групп. В файл пишем следующее:

# Создание ноды для сохранения пользователей
dn: ou=people,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
description: Размещение адресатов

# Создание ноды для сохранения групп
dn: ou=groups,dc=example,dc=com
ou: Groups
objectClass: top
objectClass: organizationalUnit
description: Размещение групп

Добавим данные из ldif файла в нашу базу:

ldapadd -x -D cn=admin,dc=example,dc=com -W -f LDAP.ldif

Проверить все ли успешно добавлено можно командой:

ldapsearch -x -LLL -b dc=example,dc=com

Получаем вывод и видим что все успешно добавилось.

dn: ou=people,dc=example,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
description:: 0KDQsNGB0LzQtdGJ0LXQvdC40LUg0LDQtNGA0LXRgdCw0YLQvtCyINC00LvRjyDQ
sNC00YDQtdGB0L3QvtC5INC60L3QuNCz0Lg=

dn: ou=groups,dc=example,dc=com
ou: Groups
objectClass: top
objectClass: organizationalUnit
description:: 0KDQsNGB0LzQtdGJ0LXQvdC40LUg0LPRgNGD0L/Qvw==

Теперь добавим в базу группу для контактов. Создаем или используем уже созданный файл LDAP.ldif (предварительно очистив его от имеющихся данных) и пишем в файл следующее:

# Создание группы для контактов
dn: cn=addressbook,ou=groups,dc=example,dc=com
cn: Addressbook
objectClass: top
objectClass: posixGroup
gidNumber: 1100
description: Группа контактов адресной книги

Добавим данные из ldif файла в нашу базу:

ldapadd -x -D cn=admin,dc=example,dc=com -W -f LDAP.ldif

Вот теперь можно добавлять пользователей для адресной книги. Создаем или используем уже созданный файл LDAP.ldif (предварительно очистив его от имеющихся данных) и пишем в файл следующее:

# Добавление пользователя
dn: uid=jakonda,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
uid: jakonda
sn: Иванов
givenName: Иван
cn: Иванов Иван Иванович
displayName: Иванов Иван Иванович
mail: admin@jakondo.ru
gidNumber: 1100
uidNumber: 1100
userPassword: Aa1234567
loginShell: /bin/bash
homeDirectory: /home/jakonda

Заметка: значения uid и gid в вашем каталоге не должны совпадать с локальными значениями. Используйте диапазон больших чисел, начинающийся, например, с 1000.

Добавим данные из ldif файла в нашу базу:

ldapadd -x -D cn=admin,dc=example,dc=com -W -f LDAP.ldif

Проверим добавился ли пользователь в базу, для этого выполним команду:

ldapsearch -x -LLL -b dc=example,dc=com 'uid=jakonda' cn gidNumber

Вывод показывает что пользователь найден, значит все сделано правильно.

dn: uid=jakonda,ou=people,dc=example,dc=com
cn:: 0JvQuNCy0LXQvdGG0L7QsiDQldCy0LPQtdC90LjQuSDQndC40LrQvtC70LDQtdCy0LjRhw==
gidNumber: 1100

На этом сервер OpenLDAP готов к работе в качестве адресной книги для почтовых клиентов. Ниже рассмотрим как можно упросить управление базой LDAP, в частности при добавлении новых пользователей, групп, изменение данных в уже имеющихся пользователях и т.д.. Использовать для этих целей мы будем phpLDAPadmin.

 

Установка и настройка phpLDAPadmin

Для работы phpLDAPadmin установим пакет lamp-server:

sudo tasksel install lamp-server

В ходе установки lamp-server, будет запрос создания пароля для пользователя root для MySQL (хоть мы его и не будем использовать)

Теперь устанавливаем phpLDAPadmin:

sudo apt-get install phpldapadmin

Выполним настройку phpLDAPadmin. Отредактируем конфигурационный файл:

sudo nano /etc/phpldapadmin/config.php

В значениях указанных ниже вместо dc=example,dc=com подставляем свое название домена (прим. dc=jakondo,dc=ru)

$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

После того как поправили конфигурационный файл, перезапускаем службу Apach2:

sudo service apache2 restart

Через любой удобный браузер заходим на phpLDAPadmin

http://192.168.0.2/phpldapadmin/

Авторизуемся используюя логин cn=admin,dc=example,dc=com и пароль который вы задавали на учетную запись admin.Вот в таком виде мы увидим нашу LDAP базу данных. Достаточно все просто и понятно в интерфейсе.

Теперь легко и просто можно управлять базой LDAP с помощью Веб-интерфейса. В phpLDAPadmin все интуитивно понятно и разобраться в управлении базой не должно составить труда. Раз все готово, то осталось настроить почтовые клиенты на пользовательских ПК, ниже рассмотрим как это можно сделать.

 

Настройка адресной книги на почтовых клиентах Mozilla Thunderbird и MS Outlook 2010

Настройка Mozilla Thunderbird. Переходим в ИнструментыНастройкиСоставление — вкладка Адресация. Отмечаем галочкой Сервере каталогов и нажимаем Изменить каталоги…

Нажимаем Добавить

Во вкладке Основное заполняем форму по примеру ниже, только подставляя свой данные

Во вкладке Дополнительно в поле Фильтр поиска пишем (objectclass=*). Нажимаем ОК.

Теперь при вводе адресата в поле Кому, нам будут выдаваться найденные значения на LDAP сервере.

Настройка MS Outlook 2010. Переходим ФайлСведенияНастройка учетных записей.

 

Переходим во вкладку Адресные книги и нажимаем Создать…

Выбираем Служба каталогов интернета (LDAP) и нажимаем Далее. Заполняем форму по аналогии как представлено ниже, только подставляем свои данные. Нажимаем Другие настройки…

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

Во вкладке Поиск, отмечаем пункт Другая и пишем в моем случае ou=people,dc=example,dc=com. Нажимаем ОК.

Проверяем работу адресной книги. Как видно на картинке ниже, поиск на сервере LDAP проходит успешно.

На этом все, мы разобрали как можно быстро развернуть и внедрить адресную книгу на базе OpenLDAP.

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (1 голос(ов), в среднем: 5,00 из 5)
Загрузка...

Всего комментариев: 15 Комментировать

  1. Дмитрий /

    Здравствуйте !!
    Статья супер полезная и содержательная. Встала задача как раз поднятия общей адресной книги в организации, подключиться к LDAP зимбры не вышло, и было принято решение поднять отдельно.
    На этапе «Для начала создадим ноды для хранения пользователей и групп» выдает ошибку «invalid format (line1) entry: «» . Сервер Ubuntu 16 . Пожалуйста объясните как исправить ошибку… очень очень нужно….

    1. Жаконда / Автор записи

      Добрый день !
      А в чем именно загвоздка то ? Не совсем понятно. Все тестировалось и ставилось на 14.04, там все без ошибок по статье делается.

  2. Дмитрий /

    Не создаются ноды для хранения данных, Команда «ldapsearch -x -LLL -b dc=example,dc=com» не показывает
    dn: ou=people,dc=example,dc=com
    ou: People
    objectClass: top

    А отображает:

    dn: dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectClass: organization
    o: example.com
    dc: example

  3. Дмитрий /

    Попробовал на ubuntu-14.04.5, так же выдает «ubuntu-14.04.5». Делал точно по инструкции, только dc=example,dc=com заменил на свой домен. Подозреваю что ошибка какая то простая… но выглядит все правильно….

    1. Жаконда / Автор записи

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

  4. Дмитрий /

    Нашел в чем была ошибка … когда заполнял фаил ldap.ldif то писал в виде:
    // Создание ноды для сохранения пользователей
    dn: ou=people,dc=example,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    description: Размещение адресатов

    А нужно было записывать как :
    dn: ou=people,dc=example,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    description: Размещение адресатов

    И все корректно добавляется. Получилось всё, но теперь новая проблема… В почтовом клиенте не проходит авторизация…Пользователь admin, в phpmyldap заходит без проблем, из Thunderbird не хочет.

  5. Дмитрий /

    Разобрался, с авторизацией оказалось что нужно внимательнее было делать, ошибка в написании была. Как итоге отлично работает в Thunderbird, можно даже по шаблону из phpldapadmin создавать, тогда можно указывать номера телефоном и название организации. А вот в Outlook поиск не проводит вообще… и контакты не отображаются. А начальство интересует именно он, обычные пользователи сидят на мозиле, у них все будет работать, а вот что теперь делать с оутлук …

    1. Жаконда / Автор записи

      В Outlook тоже все работает, проверено же. Даже описал как настроить. У меня так же часть пользователей сидит на мозиле, а часть на Outlook.

      1. Дмитрий /

        Пробую и на 14й и на 16 убунте, thunderbird без проблем , отлично отрабатывает, outlook ни в какую не заводится. Он подключается к ldap, но пишет что поиск «поиск не дал результатов». Пожалуйста подскажите как это можно исправить, второй день уже пробую разные варианты… Делал все точно по инструкции. На разных версиях оутлука.

        1. Дмитрий /

          Выяснил что он ищет в Outlook только через расширенный поиск. При отправке письма сам не дописывает отправителя, пока не нажимаешь «кому», в момент нажатия этой кнопки он подтягивает полный адрес. У вас работает как положено ?

  6. Александр /

    Вопрос всё ещё актуален ! Не работает быстрый поиск в Outlook 2016, только расширенный . Может быть есть какое то решение ?!

    1. Жаконда / Автор записи

      Не подскажу т.к. не в курсе как там обстоят дела с Outlook, т.к. 99% клиентов используется Thunderbird, а там все подтягивается на ура

  7. Александр /

    Outlook и адресная книга в OpenLDAP

    victor_sudakov
    December 7th, 2012
    В адресной книге Outlook (не Express) есть такая фича, как просмотр адресов (LDAP address-list-browsing). В русском Outlook в свойствах адресной книги это называется «Включить просмотр (требуется серверная поддержка)». Это когда вызываешь адресную книгу и в ней сразу показывается список всех адресов. Это по умолчанию работает с Exchange Server (duh!) и Communigate Pro (кто бы сомневался).

    Чтобы получить эту функциональность с OpenLDAP в качестве LDAP сервера, последний должен уметь две вещи.

    1. Поддерживать VLV. Для этого в описании базы в slapd.conf надо включить «overlay sssvlv».

    2. Уметь отсортировать выдаваемый результат по аттрибуту cn. И вот это OpenLDAP делать отказывается с ошибкой «LDAPMessage searchResDone(11) inappropriateMatching (serverSort control: No ordering rule)». Потому что атрибут name и унаследованные от него атрибуты (cn, sn и др.) не поддерживают ORDERING. А всего-то надо добавить атрибуту name свойство «ORDERING caseIgnoreOrderingMatch».

    В конфиге это сделать нельзя, т.к. свойства атрибута name зашиты в исходниках. Поэтому патч, после которого адресная книга начинает браузиться:

    — ./openldap-2.4.33/servers/slapd/schema_prep.c.orig 2012-12-07 09:54:56.000000000 +0700
    +++ ./openldap-2.4.33/servers/slapd/schema_prep.c 2012-12-07 09:58:10.000000000 +0700
    @@ -908,6 +908,7 @@
    «DESC ‘RFC4519: common supertype of name attributes’ »
    «EQUALITY caseIgnoreMatch »
    «SUBSTR caseIgnoreSubstringsMatch »
    + «ORDERING caseIgnoreOrderingMatch »
    «SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )»,
    NULL, SLAP_AT_ABSTRACT,
    NULL, NULL,

    Ссылка на обсуждение: http://www.openldap.org/lists/openldap-technical/201212/threads.html#00002

    Outlook по умолчанию делает запрос, который можно представить как
    ldapsearch -E sss=cn ‘(cn=*)’ cn
    что означает: «отсортируй мне выдачу согласно правилу сортировки, которое определено на сервере для атрибута cn». А на сервере для cn никакого правила сортировки не определено, потому что не предусмотрено в описании атрибута в RFC4519, и возникает ошибка.

    Если бы Outlook в запросе сообщал желаемое правило сортировки, по аналогии с
    ldapsearch -E sss=cn:caseIgnoreOrderingMatch ‘(cn=*)’ cn
    то всё работало бы из коробки без модификации стандартной схемы.

  8. m /

    В файле ldif комментарии нужно начинать с символа #, а не //

    1. Жаконда / Автор записи

      Поправил

Оставить ответ

5 × четыре =