Главная | Контакты | Настройки СМЕНИТЬ ПАЛИТРУ:

Главная > Программы

Создаем адресную книгу на базе 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-дереве

Для более безопасного хранения пароля его необходимо зашифровать, поэтому для шифрования паролей выполните команду:

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"

Базовая настройка сервера каталогов закончена.

Установка и настройка 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. Пример поиска контактной информации сотрудника в адресной книге

Вот и всё в принципе.

Удачи!


Главная > Программы