Создаем адресную книгу используя 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.
Приветствую, при попытке выполнить команду
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)»
Что я делаю не так? Домены везде поменял на свои.
Приветствую,
Пишет же ошибку —
ldap_bind: Invalid credentials (49)
проверяй правильность ввода учетных данных для подключения.Короче дока старая видимо, надо дергать sudo dpkg-reconfigure slapd.
А все будут соединятся под админом для поиска конитактов?
Конечно старая, я статью писал в 2017 году.. с того времени я более к OpenLDAP не возвращался.
Да нет, подключение к LDAP каталогу возможно от любого пользователя.
У меня при попытке зайти в админку ошибка 403
403 — ошибка доступа, сложно сказать почему, проверяйте что делаете не так по инстуркции.
Перезвоните мне пожалуйста 8 (812) 200-42-68 Алексей.
Для чего ? Если у Вас есть какие либо предложения, то прошу писать на admin@jakondo.ru
Здравствуйте, а как быть с группами рассылки? В 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, там все без ошибок по статье делается.