Содержание статьи:
Понадобилось на работе организовать корпоративную адресную книгу, простую в содержании, легко редактируемую и чтобы ее можно было использовать в почтовых клиентах пользователей (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
[tip]Заметка: значения uid и gid в вашем каталоге не должны совпадать с локальными значениями. Используйте диапазон больших чисел, начинающийся, например, с 1000.[/tip]
Добавим данные из 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.
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОБЛАГОДАРИ АВТОРА
Здравствуйте !!
Статья супер полезная и содержательная. Встала задача как раз поднятия общей адресной книги в организации, подключиться к LDAP зимбры не вышло, и было принято решение поднять отдельно.
На этапе «Для начала создадим ноды для хранения пользователей и групп» выдает ошибку «invalid format (line1) entry: «» . Сервер Ubuntu 16 . Пожалуйста объясните как исправить ошибку… очень очень нужно….
Добрый день !
А в чем именно загвоздка то ? Не совсем понятно. Все тестировалось и ставилось на 14.04, там все без ошибок по статье делается.
Не создаются ноды для хранения данных, Команда «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
Попробовал на ubuntu-14.04.5, так же выдает «ubuntu-14.04.5». Делал точно по инструкции, только dc=example,dc=com заменил на свой домен. Подозреваю что ошибка какая то простая… но выглядит все правильно….
Странно, должно все работать, проверено не однократно, попробовать к сожалению сейчас не представляется возможным.
Нашел в чем была ошибка … когда заполнял фаил 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 не хочет.
Разобрался, с авторизацией оказалось что нужно внимательнее было делать, ошибка в написании была. Как итоге отлично работает в Thunderbird, можно даже по шаблону из phpldapadmin создавать, тогда можно указывать номера телефоном и название организации. А вот в Outlook поиск не проводит вообще… и контакты не отображаются. А начальство интересует именно он, обычные пользователи сидят на мозиле, у них все будет работать, а вот что теперь делать с оутлук …
В Outlook тоже все работает, проверено же. Даже описал как настроить. У меня так же часть пользователей сидит на мозиле, а часть на Outlook.
Пробую и на 14й и на 16 убунте, thunderbird без проблем , отлично отрабатывает, outlook ни в какую не заводится. Он подключается к ldap, но пишет что поиск «поиск не дал результатов». Пожалуйста подскажите как это можно исправить, второй день уже пробую разные варианты… Делал все точно по инструкции. На разных версиях оутлука.
Выяснил что он ищет в Outlook только через расширенный поиск. При отправке письма сам не дописывает отправителя, пока не нажимаешь «кому», в момент нажатия этой кнопки он подтягивает полный адрес. У вас работает как положено ?
Вопрос всё ещё актуален ! Не работает быстрый поиск в Outlook 2016, только расширенный . Может быть есть какое то решение ?!
Не подскажу т.к. не в курсе как там обстоят дела с Outlook, т.к. 99% клиентов используется Thunderbird, а там все подтягивается на ура
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
то всё работало бы из коробки без модификации стандартной схемы.
В файле ldif комментарии нужно начинать с символа #, а не //
Поправил
Здравствуйте, а как быть с группами рассылки? В ldap это можно организовать?
Добрый вечер, не могу знать, не было нужды реализовывать это
Перезвоните мне пожалуйста 8 (812) 200-42-68 Алексей.
Для чего ? Если у Вас есть какие либо предложения, то прошу писать на admin@jakondo.ru
У меня при попытке зайти в админку ошибка 403
403 — ошибка доступа, сложно сказать почему, проверяйте что делаете не так по инстуркции.