SCROLL
Среднее время на прочтение: 3 мин.

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

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

 

Реализовать задачу решил с помощью OpenLDAP и все ниже описываемое будет для домена jakonda.local.

 

Установка OpenLDAP

Обновляем информацию о репозиториях и обновляем установленные пакеты:

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

 

Указываем FQDN (Fully Qualified Domain Name) имя системы, в файле /etc/hostname:

debian.jakonda.local

Файл /etc/hosts приводим к виду таким образом, чтобы в нём была запись с полным доменным именем компьютера и с коротким именем, ссылающаяся на один из внутренних IP хоста:

127.0.0.1 localhost
192.168.1.10 debian.jakonda.local debian

 

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

sudo apt-get install slapd ldap-utils

 

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

sudo netstat -nap tcp | grep 389

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

Все отлично служба каталогов установлена и запущена.

 

Заполнение базы данных OpenLDAP

Данные в базу данных OpenLDAP вносятся посредством ldif файлов.

 

Создадим ldif файл (прим. LDAP.ldif) и описываем в нем ноды для хранения пользователей и групп:

# Нода пользователей
dn: ou=people,dc=jakonda,dc=local
ou: People
objectClass: top
objectClass: organizationalUnit
description: Users

# Нода групп
dn: ou=groups,dc=jakonda,dc=local
ou: Groups
objectClass: top
objectClass: organizationalUnit
description: Security Groups

# Нода контактов
dn: cn=addressbook,dc=jakonda,dc=local
cn: Addressbook 
objectClass: top 
objectClass: posixGroup 
gidNumber: 1100 
description: Address book

 

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

ldapadd -x -D cn=admin,dc=jakonda,dc=local -W -f LDAP.ldif

 

Для проверки, выведем информацию:

ldapsearch -x -LLL -b dc=jakonda,dc=local 

dn: ou=people,dc=jakonda,dc=local
ou: People
objectClass: top
objectClass: organizationalUnit
description:: 0KDQsNGB0LzQtdGJ0LXQvdC40LUg0LDQtNGA0LXRgdCw0YLQvtCyINC00LvRjyDQsNC00YDQtdGB0L3QvtC5INC60L3QuNCz0Lg=

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

dn: cn=addressbook,dc=jakonda,dc=local
cn: Addressbook 
objectClass: top 
objectClass: posixGroup 
gidNumber: 1100 
description:: 0KDQsNGB0LzQtdGJ0LXQvdC40LUg0LDQtNGA0LXRgdCw0YLQvtCy

 

Добавим пользователя (для примера) jakonda. Создадим ldif файл со следующим содержанием:

dn: uid=jakonda,ou=people,dc=jakonda,dc=local
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

[stextbox id=’warning’]ИНФОРМАЦИЯ. значения uid и gid в вашем каталоге не должны совпадать с локальными значениями. Используйте диапазон больших чисел, начинающийся например с 1000.[/stextbox]

 

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

ldapadd -x -D cn=admin,dc=jakonda,dc=local -W -f user.ldif

 

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

ldapsearch -x -LLL -b dc=jakonda,dc=local '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.

Обсуждение

25 комментариев
  • Приветствую, при попытке выполнить команду
    ldapadd -x -D cn=admin,dc=example,dc=com -W -f LDAP.ldif
    и вводе пароля указанно при установке
    sudo apt-get install slapd ldap-utils
    пишет ldap_bind: Invalid credentials (49)
    «20.04.3 LTS (Focal Fossa)»
    Что я делаю не так? Домены везде поменял на свои.

    • Это ответ на комментарий emoxam

      Приветствую,
      Пишет же ошибку — ldap_bind: Invalid credentials (49) проверяй правильность ввода учетных данных для подключения.

      • Это ответ на комментарий Жаконда

        Короче дока старая видимо, надо дергать sudo dpkg-reconfigure slapd.
        А все будут соединятся под админом для поиска конитактов?

        • Это ответ на комментарий emoxam

          Конечно старая, я статью писал в 2017 году.. с того времени я более к OpenLDAP не возвращался.

          Да нет, подключение к LDAP каталогу возможно от любого пользователя.

    • Это ответ на комментарий Игорь

      403 — ошибка доступа, сложно сказать почему, проверяйте что делаете не так по инстуркции.

  • Здравствуйте, а как быть с группами рассылки? В ldap это можно организовать?

    • Это ответ на комментарий Юрий

      Добрый вечер, не могу знать, не было нужды реализовывать это

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

  • 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
    то всё работало бы из коробки без модификации стандартной схемы.

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

    • Это ответ на комментарий Александр

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

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

    • Это ответ на комментарий Дмитрий

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

      • Это ответ на комментарий Жаконда

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

        • Это ответ на комментарий Дмитрий

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

  • Нашел в чем была ошибка … когда заполнял фаил 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 не хочет.

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

    • Это ответ на комментарий Дмитрий

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

  • Не создаются ноды для хранения данных, Команда «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

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

    • Это ответ на комментарий Дмитрий

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