СЕРГЕЙ АПАЕВ
Создаем адресную книгу на базе OpenLDAP
Надоела пустая трата времени на ведение адресных книг в текстовом формате? Возможно, использование сервера каталогов будет лучшим решением проблемы.
Почему OpenLDAP?
OpenLDAP – бесплатный сервер каталогов, который содержится в большинстве дистрибутивов Linux и FreeBSD. Он обладает достаточной функциональностью и полностью совместим с Outlook Express, Mozilla и Mozilla Thunderbird.
Почему PostgreSQL?
PostgreSQL – достаточно известный сервер баз данных. Обладает хорошим быстродействием, надёжностью и многофункционален. В отличие от MySQL он поддерживает спецификацию ANSI SQL 92, что без особых усилий позволяет перенести базы данных, написанные на PostgreSQL, в такие коммерческие продукты, как Oracle и MSSQL, а также обладает широким набором дополнительных возможностей (правила, триггеры, встроенные языки). Продукт 1С Бухгалтерия v. 8.1 был полностью реализован на PostgreSQL. Использование PostgreSQL в данном примере ярко иллюстрирует часть его возможностей.
Остальные подробности
Для управления содержимым сущностей будет использоваться веб-интерфейс PHPLdapAdmin. Это мощный веб-интерфейс для работы с OpenLDAP. Он содержит большое количество встроенных шаблонов, что упрощает работу с каталогами.
Структура адресной книги
Наименование поля
|
Имя
|
Фамилия
|
ФИО (полностью)
|
Электронная почта
|
Домашний телефон
|
Рабочий телефон
|
Мобильный телефон
|
Должность
|
Название отдела
|
Название организации (частная компания)
|
Факс
|
Пейджер (ICQ, Yahoo и т. д.)
|
Домашний адрес
|
Рабочий адрес
|
Почтовый индекс
|
OpenLDAP осуществляет взаимодействие с PostgreSQL через источники данных UnixODBC, что позволяет использовать другие серверы баз данных (MySQL, MSSQL, Oracle и т. д.). Все поля из таблицы будут отображаться в таких почтовых клиентах, как Outlook Express, Mozilla Thunderbird и просто Mozilla. Итак, приступим.
Установка и настройка OpenLDAP
Для успешной сборки OpenLDAP установим unixODBC-2.2.11.
Собираем из портов:
# cd /usr/ports/databases/unixODBC
# make && make install
Приступаем к установке самого пакета OpenLDAP:
# cd /usr/ports/databases/openldap23-client
# make && make install
# cd ../openldap23-server
# make WITH_ODBC=YES WITH_ODBC_TYPE=unixodbc
# make install
Приступаем к настройке сервера.
Убедитесь, что после установки на главный конфигурационный файл стоят права владельца на пользователя ldap. В противном случае задайте права на главный конфигурационный файл:
# chown ldap:ldap /usr/local/etc/openldap/slapd.conf
Правим главный конфигурационный файл:
# mcedit /usr/local/etc/openldap/slapd.conf
# Подключаем необходимые схемы
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
# Указываем путь для файлов pid и args
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
# Определяем порядок доступа к сущностям
# Разрешаем доступ к службе каталогов LDAP только авторизированным пользователям
access to *
by users read
by self read
by anonymous auth
# Путь к модулю sql
modulepath /usr/local/libexec/openldap
moduleload back_sql.so
#########################################################
# sql database definitions
#########################################################
# Определяем настройки для соединения с PostgreSQL-сервером
database sql
suffix "o=myorg"
rootdn "cn=root,o=myorg"
rootpw {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
# Имя источника данных
dbname PostgreSQL
# Имя пользователя для соединения с PostgreSQL
dbuser ldap
# Пароль для данного пользователя
dbpasswd {MD5}4QrcOUm6Wau+VuBX8g+IPg==
insentry_stmt "insert into ldap_entries (id,dn,oc_map_id,parent,keyval) values ((select nextval('ldap_entries_id_seq')),?,?,?,?)"
upper_func "upper"
strcast_func "text"
concat_pattern "?||?"
has_ldapinfo_dn_ru no
# При использовании модуля sql-индексы указывать не нужно
# Поиск автоматически можно вести по всем атрибутам, используемым в LDAP-дереве
Для более безопасного хранения пароля его необходимо зашифровать, поэтому для шифрования паролей выполните команду:
- для администратора ldap-каталогов:
# slappasswd –h {MD5} –s secret
- Для доступа к PostgreSQL:
# slappasswd –h {MD5} –s 123456
Для того чтобы не переписывать длинный кодированный пароль, в конце данных команд можно поставить перенаправление вывода на конфиг в конец файла (>>/usr/local/openldap/etc/slapd.conf), а потом отредактировать.
Для запуска, остановки, перезапуска, проверки статуса используем команду:
# /usr/local/etc/rc.d/slapd.sh start stop restart status
Запускаем сервер после установки PostreSQL.
Для автоматического запуска OpenLDAP при загрузке правим rc.conf:
# mcedit /etc/rc.conf
slapd_enable="YES"
slapd_flags="-u ldap –g ldap –h ldap://192.168.7.1"
Базовая настройка сервера каталогов закончена.
Установка и настройка PostgreSQL
PostgreSQL – мощный сервер баз данных, предназначенный для бесплатного использования в рамках лицензии BSD. Он входит в состав большинства дистрибутивов Linux и FreeBSD.
Собираем PostgreSQL из портов:
# cd /usr/ports/databases/postgresql80-client
# make && make install
# cd /usr/ports/databases/postgresql80-server
# make && make install
Создадим каталог для размещения баз данных с правами на pgsql:
# cd /var/db
# mkdir pgsql
# chmod 700 pgsql && chown pgsql:pgsql pgsql
# /usr/local/bin/sudo –u pgsql /usr/local/bin/initdb –-username=pgsql –-pgdata=/var/db/pgsql
Возможно, вам придётся установить утилиту sudo в разделе security общего дерева портов. После установки не забудьте разрешить root запускать команды для пользователя pgsql. Для этого необходимо отредактировать sudoers:
# mcedit /usr/local/etc/sudoers
root ALL=(pgsql) ALL
Данная строка разрешает root запускать команды для пользователя pgsql. После создания первичных баз в целях безопасности данную строку можно закомментировать или удалить.
Для автоматического запуска сервера при загрузке системы правим rc.conf:
# mcedit /etc/rc.conf
postgresql_enable="YES"
postgresql_user="pgsql"
postgresql_data="/var/db/pgsql"
Далее правим главный конфигурационный файл, где указываем IP, на котором будет работать сервер:
# mcedit /var/db/pgsql/postgresql.conf
listen_addresses='localhost'
Для версии 7.x необходимо указать:
tcpip_socket = true
virtual_host = '127.0.0.1'
Для запуска PostgreSQL выполните команду:
# /usr/local/etc/rc.d/010.pgsql.sh start
Настройка UnixODBC
Для настройки UnixODBC необходимо создать два файла следующего содержания:
# mcedit /usr/local/etc/odbcinst.ini
[PostgreSQL]
Description = PostgreSQL driver for Linux & Win32
Driver = /usr/local/lib/libodbcpsql.so
Setup = /usr/local/lib/libodbcpsqlS.so
FileUsage = 1
В данном файле мы указываем путь к библиотеке, которая отвечает за работу с PostgreSQL-сервером.
# mcedit /usr/local/etc/odbc.ini
[PostgreSQL]
Description = Test to Postgres
Driver = PostgreSQL
Trace = Yes
TraceFile = sql.log
Database = ldap
Servername = 127.0.0.1
UserName =
Password =
Port = 5432
Protocol = 6.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =
Здесь содержится информация, используемая для доступа к PosgreSQL. Имя пользователя и пароль мы указали в главном конфигурационном файле slapd.conf, поэтому здесь эти данные можно не указывать
Создание базы данных PostgreSQL хранения сущностей LDAP
Прежде всего необходимо определиться со структурой LDAP-дерева. В корне каталогов будет находиться контейнер o=myorg, в котором будут содержаться два контейнера. В первом ou=users,o=myorg будет храниться информация о пользователях, которые будут иметь доступ к серверу каталогов(например, cn=ivan ivanov,ou=users,o=myorg). Во втором ou=myaddressbook,o=myorg будут храниться записи о сотрудниках.
Приступаем к созданию баз данных:
# psql –h 127.0.0.1 -d template1 -U pgsql
Далее создаём пользователя ldap:
template1=# CREATE USER ldap WITH SYSID 100 PASSWORD '123456'
NOCREATEDB NOCREATEUSER;
Теперь создадим базу данных для данной адресной книги:
template1=# CREATE DATABASE ldap WITH OWNER = ldap ENCODING = 'UNICODE';
В данном случае очень важно использовать кодировку UNICODE, т.к. OpenLDAP будет добавлять данные, содержащие русские символы в юникодной кодировке, а не SQL-ASCII. Использование данной кодировки в базе данных позволит корректно отображать символы на русском при непосредственном доступе к таблицам PostgreSQL. Отсоединяемся и создаем таблицы под новым пользователем ldap к вновь созданной базе ldap:
# psql –h 127.0.0.1 –d ldap –U ldap –p 5432 –W < /usr/local/scripts/main.sql
Данный SQL-скрипт автоматически создаст таблицы для хранения сущностей.
Перезапускаем систему. После авторизации выполняем:
# sockstat -4
На что он должен выдать список всех сервисов, которые слушают на IPv.4, среди которых должны быть PostgreSQL и slapd, что свидетельствует об успешно выполненных настройках.
Установка и настройка PHPLdapAdmin
Доступ к нему осуществляется через сервер Apache. Для нормальной работы phpldapadmin никаких особых настроек PHP не требуется, нужна только поддержка OpenLDAP, поэтому если уже имеется настроенный PHP, то просто добавьте модуль ldap, и этого будет достаточно. Собираем PHPLdapAdmin из портов:
# cd /usr/ports/net/phpldapadmin
# make && make install
Для запуска Apache выполняем:
# apachectl start
Переходим к настройке PHPLdapAdmin:
# cd /usr/local/www/phpldapadmin/config
# mv config.php.example config.php
Для подключения к LDAP-серверу имя пользователя и пароль мы будем вводить в самом интерфейсе. Хост необходимо указать в данном файле.
# mcedit config.php
$ldapservers->SetValue($i,'server','host','192.168.7.1');
В браузере заходим на http://192.168.7.1/phpldapadmin/.
Создание адресной книги
Приступаем к созданию адресной книги. Для авторизации нажимаем «ВХОД». В качестве логина вводим cn=root,o=myorg, в качестве пароля – secret. Для создания главного контейнера выбираем «IMPORT», и далее в текстовом поле «Paste your LDIF here» введите следующее:
dn: o=myorg
objectclass: organization
o: myorg
Переходим к созданию контейнера, содержащего информацию о пользователях, которым разрешено пользоваться сервером каталогов. Выделите контейнер o=myorg и кликните «Создать потомка». В качестве шаблона выберите «Organisational Unit» и введите название контейнера -users. Создадим учётную запись для доступа к серверу каталогов. В контейнере ou=users,o=myorg кликните «Создать потомка» и в качестве шаблона укажите «User Account», и заполните данные. В качестве uid можно вводить порядковый номер пользователя (рис. 1).
Рисунок 1. Пример добавления пользователя
Создадим контейнер для хранения записей о сотрудниках. Для этого в контейнере o=myorg создайте контейнер ou=address_book по тому же принципу, что и ou=users. Для добавления записей о сотрудниках создайте в контейнере ou=addressbook,o=myorg потомка, указав в качестве шаблона Address Book Entry (mozillaOrgPerson). И далее заполняйте данные на русском (рис. 2). После чего нажмите «proceed» для создания объекта. Вот таким образом добавляются данные. OpenLDAP автоматически размещает их в SQL-таблицах. С помощью интерактивного клиента pgadmin вы можете посмотреть данные в таблицах.
Рисунок 2. Пример добавления данных о сотруднике
Настройка Outlook Express на использование адресной книги
Переходим к настройке Outlook Express. Для добавления сервера каталогов в меню «Сервис –> Учётные записи» выбираем «Добавить –> Служба каталогов». В качестве имени укажите 192.168.7.1.
Потом зайдите в свойства и на вкладке «Общие» в поле «Учётная запись» введите «Моя адресная книга». Установите галку «Требуется вход на сервер» в состояние включено.
В качестве учётной записи введите cn=ivan ivanov,ou=users,o=myorg и укажите пароль, который вы вводили при создании данного пользователя.
Переходим на вкладку «Дополнительно» и в поле «Основа поиска» укажите ou=myaddressbook,o=myorg.
Теперь можно выполнять поиск в адресной книге по любым критериям. Кликните кнопку «Адреса», далее «Поиск людей» и введите критерии поиска.
Пример поиска показан на рис. 3.
Рисунок 3. Пример поиска контактной информации сотрудника в адресной книге
Вот и всё в принципе.
Удачи!