Главная > Программы Создаем адресную книгу на базе 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. Он содержит большое количество встроенных шаблонов, что упрощает работу с каталогами. Структура адресной книги
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-дереве
Для более безопасного хранения пароля его необходимо зашифровать, поэтому для шифрования паролей выполните команду: n для администратора ldap-каталогов: # slappasswd –h {MD5} –s secret n Для доступа к 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"
Базовая настройка сервера каталогов закончена. Установка и настройка PostgreSQLPostgreSQL – мощный сервер баз данных, предназначенный для бесплатного использования в рамках лицензии 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. Пример поиска контактной информации сотрудника в адресной книге Вот и всё в принципе. Удачи! Главная > Программы |