OpenLDAP, addressbook, web интерфейс во FreeBSD

Posted Пт, 05/21/2010 - 10:11 by Raven2000

По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта - посвящается сие писание =).

Необходимо:

Организовать общую адресную книгу для предприятия.

Научится просто и эффективно управлять OpenLDAP и адресной книгой.

Подсадить пользователей на правильный почтовый клиент.

Предисловие

Основные термины

Компоненты OpenLDAP

Установка

Ставим OpenLDAP

Настройка OpenLDAP

Запуск OpenLDAP

Управление

Web интерфейс

Программное обеспечение

Адресная книга в почтовых клиентах

FAQ

Ссылки

Предисловие

На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью OpenLDAP. В данной статье, я опишу основные параметры необходимые для работы OpenLDAP в качестве адресной книги и по дополнительным просьбам я расширю и дополню, если вам будет чего либо не хватать. Но я уверен, что вы и сами сможете расширить функционал OpenLDAP без лишних просьб, а лишь чтением манов и гуглением.

Основные термины

OpenLDAP Software - открытая реализация LDAP, разработанная проектом OpenLDAP Project. Распространяется под собственной лицензией, называемой OpenLDAP Public License. LDAP - платформенно-независимый протокол. В числе прочих есть реализации для различных модификаций BSD, а также GNU/Linux, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (2000, XP) и z/OS.

LDAP (Lightweight Directory Access Protocol) представляет средства доступа к логически иерархической БД. Каталог (БД) состоит из записей (объектов). Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога. Правила связывания определяются набором правил, который называется схемой каталога (в схему входят также описания классов). Дерево начинается от корневого объекта (класс Top в Active Directory).

Тип объекта (класс) определяется набором атрибутов: имя, тип значения, обязательность. Строки в кодировке UTF-8. Объект может ассоциироваться с несколькими классами. Класс может быть расширением другого класса (наследование). Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров), псевдонимы (символьные ссылки), переадресация клиента к другому каталогу (переход по ссылкам, chasing referrals).

Каждый объект имеет относительное отличительное имя (Relative Distinguished Name). Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего уровня (порядок записи - от младшего к старшему, разделитель - точка). Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=). Имеется выделенный администратор каталога, обладающий корневыми полномочиями. Для аутентификации используется расширяемый механизм SASL.

Поиск объекта в иерархии производится с помощью составного имени с корня вниз (как в DNS). Есть возможность анонимного доступа. Права доступа - чтение и запись и поддерживается репликация LDAP сервера.

Общие имена атрибутов:

c - страна

st - регион

l - местность

o - организация

ou - подразделение

dc - domain container

cn - имя

sn - фамилия

mail - электронный адрес

Возможности клиента:

подключиться к серверу БД (запрос привязки), для аутентификации используются механизмы SASL

читать значения определённых атрибутов конкретного объекта

сравнить значения с атрибутом объекта (полезно для аутентификации сравнением хеша)

искать объекты по значениям атрибутов (указывается корень поддерева, максимальное количество результатов, максимальное время поиска, фильтр поиска, перечень желаемых атрибутов)

получить список объектов ниже по иерархии

отменить предыдущий запрос

добавить, изменить или удалить объект

переименовать объект

Компоненты OpenLDAP

Открытое программное обеспечение OpenLDAP состоит из нескольких основных компонентов:

slapd - независимый LDAP демон (сервер)

slurpd - независимый LDAP демон обновления и репликации

библиотеки реализующие протокол LDAP, утилиты, инструменты и элементарные клиенты.

Примеры клиентов: ldapsearch, ldapadd, ldapdelete и других.

Также содержится для OpenLDAP проекта:

JLDAP - библиотеки классов LDAP для Java

JDBC-LDAP - драйвер интерфейса между Java JDBC - LDAP

Установка

Ставим OpenLDAP

Установка OpenLDAP стандартна и поэтому, вкратце пройдемся по ней:

Мы нашли две версии этого порта 2.3 и 2.4, и я остановился на 2.4 ввиду ее перспективности.

# cd /usr/ports

# make search name=openldap-server

Port: openldap-server-2.3.43

Path: /usr/ports/net/openldap23-server

Info: Open source LDAP server implementation

Maint: delphij@FreeBSD.org

B-deps: db44-4.4.20.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.3.43

R-deps: db44-4.4.20.4 libltdl-1.5.26 openldap-client-2.3.43

WWW: <a href="http://www.OpenLDAP.org/</p>

<p>Port:" title="http://www.OpenLDAP.org/</p>

<p>Port:">http://www.OpenLDAP.org/</p>

<p>Port:</p></a> openldap-server-2.4.17

Path: /usr/ports/net/openldap24-server

Info: Open source LDAP server implementation

Maint: delphij@FreeBSD.org

B-deps: db46-4.6.21.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.4.17

R-deps: db46-4.6.21.4 libltdl-1.5.26 openldap-client-2.4.17

WWW: http://www.OpenLDAP.org/

Сконфигурируем и выберем необходимые модули:

# cd /usr/ports/net/openldap24-server/ && make config

---------------------------------------------------------------------¬

¦ Options for openldap-server 2.4.17 ¦

¦ -----------------------------------------------------------------¬ ¦

¦ ¦ [ ] SASL With (Cyrus) SASL2 support ¦ ¦

¦ ¦ [ ] DYNACL Run-time loadable ACL (experimental) ¦ ¦

¦ ¦ [ ] ACI Per-object ACI (experimental) ¦ ¦

¦ ¦ [ ] DNSSRV With Dnssrv backend ¦ ¦

¦ ¦ [ ] PASSWD With Passwd backend ¦ ¦

¦ ¦ [ ] PERL With Perl backend ¦ ¦

¦ ¦ [ ] RELAY With Relay backend ¦ ¦

¦ ¦ [ ] SHELL With Shell backend (disables threading) ¦ ¦

¦ ¦ [ ] SOCK With Sock backend ¦ ¦

¦ ¦ [ ] ODBC With SQL backend ¦ ¦

¦ ¦ [ ] RLOOKUPS With reverse lookups of client hostnames ¦ ¦

¦ ¦ [ ] SLP With SLPv2 (RFC 2608) support ¦ ¦

¦ ¦ [ ] SLAPI With Netscape SLAPI plugin API ¦ ¦

¦ ¦ [X] TCP_WRAPPERS With tcp wrapper support ¦ ¦

¦ ¦ [X] BDB With BerkeleyDB support ¦ ¦

¦ ¦ [ ] ACCESSLOG With In-Directory Access Logging overlay ¦ ¦

¦ ¦ [ ] AUDITLOG With Audit Logging overlay ¦ ¦

¦ ¦ [ ] COLLECT With Collect overy Services overlay ¦ ¦

¦ ¦ [ ] CONSTRAINT With Attribute Constraint overlay ¦ ¦

¦ ¦ [ ] DDS With Dynamic Directory Services overlay ¦ ¦

¦ ¦ [ ] DEREF With Dereference overlay ¦ ¦

¦ ¦ [ ] DYNGROUP With Dynamic Group overlay ¦ ¦

¦ ¦ [ ] DYNLIST With Dynamic List overlay ¦ ¦

¦ ¦ [ ] LASTMOD With Last Modification overlay ¦ ¦

¦ ¦ [ ] MEMBEROF With Reverse Group Membership overlay ¦ ¦

¦ ¦ [ ] PPOLICY With Password Policy overlay ¦ ¦

¦ ¦ [ ] PROXYCACHE With Proxy Cache overlay ¦ ¦

¦ ¦ [ ] REFINT With Referential Integrity overlay ¦ ¦

¦ ¦ [ ] RETCODE With Return Code testing overlay ¦ ¦

¦ ¦ [ ] RWM With Rewrite/Remap overlay ¦ ¦

¦ ¦ [X] SEQMOD Sequential Modify overlay ¦ ¦

¦ ¦ [X] SYNCPROV With Syncrepl Provider overlay ¦ ¦

¦ ¦ [ ] TRANSLUCENT With Translucent Proxy overlay ¦ ¦

¦ ¦ [ ] UNIQUE With attribute Uniqueness overlay ¦ ¦

¦ ¦ [ ] VALSORT With Value Sorting overlay ¦ ¦

¦ ¦ [ ] SMBPWD With Samba Password hashes overlay ¦ ¦

¦ ¦ [X] DYNAMIC_BACKENDS Build dynamic backends ¦ ¦

+-L------------------------------------------------------------------+

¦ [ OK ] Cancel ¦

L---------------------------------------------------------------------

Начнем установку:

# cd /usr/ports/net/openldap24-server/ && make install clean

~~~~~

*************************************************************

The OpenLDAP server package has been successfully installed.

In order to run the LDAP server, you need to edit

/usr/local/etc/openldap/slapd.conf

to suit your needs and add the following lines to /etc/rc.conf:

slapd_enable="YES"

slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'

slapd_sockets="/var/run/openldap/ldapi"

Then start the server with

/usr/local/etc/rc.d/slapd start

or reboot.

Try `man slapd' and the online manual at

<a href="http://www.OpenLDAP.org/doc/<br />

for" title="http://www.OpenLDAP.org/doc/<br />

for">http://www.OpenLDAP.org/doc/<br />

for</a> more information.

slapd runs under a non-privileged user id (by default `ldap'),

see /usr/local/etc/rc.d/slapd for more information.

************************************************************

===> Installing rc.d startup script(s)

===> Running ldconfig

/sbin/ldconfig -m /usr/local/libexec/openldap

===> Installing ldconfig configuration file

===> Registering installation for openldap-server-2.4.17

===> SECURITY REPORT:

This port has installed the following files which may act as network

servers and may therefore pose a remote security risk to the system.

/usr/local/libexec/slapd

This port has installed the following startup scripts which may cause

these network services to be started at boot time.

/usr/local/etc/rc.d/slapd

If there are vulnerabilities in these programs there may be a security

risk to the system. FreeBSD makes no guarantee about the security of

ports included in the Ports Collection. Please type 'make deinstall'

to deinstall the port if this is a concern.

For more information, and contact details about the security

status of this software, see the following webpage:

http://www.OpenLDAP.org/

Настройка OpenLDAP

Приступим к настройке OpenLDAP.

Внесем в /etc/rc.conf следующее:

slapd_enable="YES"

slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'

slapd_sockets="/var/run/openldap/ldapi"

По умолчанию ldap слушает все интерфейсы ldap://0.0.0.0/, но я укажу конкретно, что ему слушать это localhost и интерфейс сетевой платы. Например, вот так:

slapd_enable="YES"

slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/"'

slapd_sockets="/var/run/openldap/ldapi"

Теперь необходимо откорректировать конфигурационный файл OpenLDAP. Скопируем дефолтный конфигурационный файл:

# cd /usr/local/etc/openldap/

# cp slapd.conf.default slapd.conf

Отредактируем slapd.conf.

# cat 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

pidfile /var/run/openldap/slapd.pid

argsfile /var/run/openldap/slapd.args

modulepath /usr/local/libexec/openldap

moduleload back_bdb

access to * by * read

access to attr=userPassword

by self write

by anonymous auth

by * none

database bdb

suffix "dc=ampul,dc=local"

rootdn "cn=root,dc=ampul,dc=local"

rootpw {SSHA}Password

directory /var/db/openldap-data

index objectClass eq

index cn eq

Пройдемся по конфигурационному файлу:

include - подключаемые схемы; в поставке OpenLDAP их довольно много. И вы подключите только те, которые будете использовать. В принципе, схемы являются частью конфигурационного файла, но для наглядности они вынесены в отдельные фрагменты. С указанием пути откуда они берутся.

modulepath и moduleload - запускаемый сервис и модуль используемого способа хранения данных.

access - для управления доступом используются списки доступа ACL. В данном примере приводятся два списка — в первом из них ограничивается доступ к атрибуту userPassword (полный доступ к нему могут иметь только сам объект либо администратор базы; для всех остальных доступ запрещён). Второе правило гласит, что всем даётся доступ на чтение любых данных (кроме ограниченного предыдущим правилом).

database - способ хранения данных используемый нами.

suffix - корнем иерархической структуры будет являться некоторый объект например dc=example,dc=com (я буду использовать для примера суффикс

dc=ampul,dc=local) у вас он соответственно будет другим. Суффикс для каталога можно взять любой.

rootdn - DN, описывающий администратора

rootpw - хешированый SSHA пароль администратора (см. slappasswd(8))

Утилита slappasswd позволяет создавать хеш пароля для дальнейшего использования в качестве значения атрибута userPassword или опции rootpw файла slapd.conf.

Параметры:

-v - многословный режим

-u - (пока по умолчанию; создавать хеш для userPassword в формате, определённом RFC 2307)

-s - пароль (если не задан здесь или с помощью ключа -T, то запрашивается в диалоге)

-T - имя файла с паролем

-h - схема ({SSHA}; метод хеширования пароля: {CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA}, {CLEARTEXT})

-c - формат (формат как в sprintf(3) для преобразования случайной строки символов из диапазона [A-Za-z0-9./]; например, "%.2s" даёт соль для стандартной функции crypt(3); "$1$%.8s" приводит к использованию функцией crypt(3) алгоритма MD5, так что результат можно использовать в /etc/shadow)

Создать хешированный пароль для пользователя root можно так:

# slappasswd -s root

{SSHA}Password

Запуск OpenLDAP

После изменение slapd.conf запускаем сервис и проверяем работу.

# /usr/local/etc/rc.d/slapd start

# ps -ax | grep slap

35430 ?? Is 0:00,01 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/ -u ldap -g ldap

35544 p0 S+ 0:00,00 grep slap

# netstat -nap tcp | grep 389

tcp4 0 0 192.168.0.2.389 *.* LISTEN

tcp4 0 0 127.0.0.1.389 *.* LISTEN

Если вы все корректно сконфигурировали, то openldap запустится без проблем.

Сейчас нам необходимо создать корень:

# cat ampul.local.ldif

dn: dc=ampul,dc=local

objectClass: top

objectClass: dcObject

objectClass: organization

dc: ampul

o: FSI Ust-Luga Branch

dn: ou=addressbook,dc=ampul,dc=local

objectClass: top

objectClass: organizationalUnit

ou: addressbook

Добавим нашу схему в OpenLDAP.

# ldapadd -x -h localhost -f ampul.local.ldif -D "cn=root,dc=ampul,dc=local" -W

Enter LDAP Password: ****

adding new entry "dc=ampul,dc=local"

adding new entry "ou=addressbook,dc=ampul,dc=local"

Управление

Web интерфейс

Я давно подсел на web приложения потому, что я могу запускать их отовсюду и из любой системы будь то *NIX, Windows, Linux и т.п. Простота в обслуживании, обновлении, единая точка входа и управления и т.п. Для OpenLDAP есть несколько приложений которые могут помочь в администрировании OpenLDAP - мой выбор остановился на phpLDAPadmin.

Скриншот 1

# cd /usr/ports/

# make search name=phpLDAPadmin

Port: phpldapadmin-1.1.0.7,1

Path: /usr/ports/net/phpldapadmin

Info: A set of PHP-scripts to administer LDAP over the web

Maint: m.seaman@infracaninophile.co.uk

B-deps:

R-deps: gettext-0.17_1 libiconv-1.13 libxml2-2.7.3 openldap-client-2.4.16..

WWW: <a href="http://phpldapadmin.sourceforge.net/</p>

<p>#" title="http://phpldapadmin.sourceforge.net/</p>

<p>#">http://phpldapadmin.sourceforge.net/</p>

<p>#</p></a> cd /usr/ports/net/phpldapadmin;make install clean

phpldapadmin-1.1.0.7,1 has been installed into:

/usr/local/www/phpldapadmin

Please edit config.php to suit your needs.

To make phpLDAPadmin available through your web site, I suggest that

you add something like the following to httpd.conf:

Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"

<Directory "/usr/local/www/phpldapadmin/htdocs">

Options none

AllowOverride none

Order Deny,Allow

Deny from all

Allow from 127.0.0.1 .example.com

</Directory>

Please note: if you are upgrading from version 0.9.7 or earlier, the

layout of the phpldapadmin-1.1.0.7,1 files has been completely reworked. You will

need to modify your apache configuration and merge the settings from

your original configuration file:

/usr/local/www/phpldapadmin/config.php

to

/usr/local/www/phpldapadmin/config/config.php

===> Registering installation for phpldapadmin-1.1.0.7,1

===> Cleaning for phpldapadmin-1.1.0.7,1

Добавьте в конфигурационный файл Apache следующие строки предварительно настроив под себя

Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"

<Directory "/usr/local/www/phpldapadmin/htdocs">

Options none

AllowOverride none

Order Deny,Allow

Deny from all

Allow from 127.0.0.1 .example.com

</Directory>

При необходимости отредактируйте конфигурационный файл phpldapadmin

/usr/local/www/phpldapadmin/config/config.php

При проблемах чтения файлов установите права для Apache на директорию phpldapadmin.

# chown -R www:www /usr/local/www/phpldapadmin/

Теперь в браузере указываете IP адрес или имя с сервера с приставкой phpldapadmin

http://IP_name/phpldapadmin

Укажите логин и пароль привилегированного лица например:

Логин: cn=root,dc=ampul,dc=local

Пароль: Password

Программное обеспечение

Есть несколько программных продуктов, которые позволяют управлять LDAP серверами, но они, в основном, платные. Я остановился на LDAP Admin, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.

Скриншот 1

Скриншот 2

Адресная книга в почтовых клиентах

Mozilla Thunderbird

Thunderbird использует LDAPv3. Добавим LDAP-сервер в адресную книгу.

Скриншот 1

Введем корректный адрес и данные сервера OpenLDAP

Скриншот 1

Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по cn, givenName, sn и считывает следующий список атрибутов: modifytimestamp, xmozillausehtmlmail, description, notes, custom4, custom3, custom2, custom1, birthyear, homeurl, workurl, nscpaimscreenname, countryname, company, o, departmentnumber, department, orgunit, ou, title, zip, postalcode, region, st, locality, l, streetaddress, postofficebox, carphone, cellphone, mobile, pagerphone, pager, facsimiletelephonenumber, fax, homephone, telephonenumber, xmozillasecondemail, mail, xmozillanickname, displayname, commonname, cn, surname, sn, givenname.

Скриншот 1

Outlook Express.

Outlook Express использует LDAPv2. Добавим LDAP-сервер в адресную книгу для этого выбираем в меню Сервис -> Учётные записи -> Добавить -> Служба каталогов -> Сервер каталогов (LDAP).

Затем изменить свойствах созданной службы каталогов во вкладке Дополнительно вставте свою Основу поиска например (ou=addressbook,dc=ampul,dc=local).

Поиск производится по нажатию кнопки "Поиск людей", вводу параметров и нажатию кнопки "Найти". Предварительно опрашивается список возможности сервера: subschemaSubentry, dsServiceName, namingContexts, defaultNamingContext, schemaNamingContext, configurationNamingContext, rootDomainNamingContext, supportedControl, supportedLDAPVersion, supportedLDAPPolicies, supportedSASLMechanisms, dnsHostName, ldapServiceName, serverName, supportedCapabilities.

По умолчанию поиск по атрибутам cn, givenName, sn, но можно искать по "имя и адрес" (cn), "электронная почта" (mail), имени (givenName), фамилии (sn), организации (o). Считывает следующий список атрибутов: display-name, cn, commonName, mail, otherMailbox, givenName, sn, surname, st, c, co, organizationName, o, ou, organizationalUnitName, URL, homePhone, facsimileTelephoneNumber, otherFacsimileTelephoneNumber, OfficeFax, mobile, otherPager, OfficePager, pager, info, title, telephoneNumber, l, homePostalAddress, postalAddress, streetAddress, street, department, comment, postalCode, physicalDeliveryOfficeName, initials, conferenceInformation, userCertificate;binary, userSMIMECertificate;binary, labeledURI, Manager, Reports, IPPhone.

Чтобы сохранять всю необходимую информацию о человеке его запись должна иметь классы: top, person, organizationalPerson, inetOrgPerson, residentialPerson.

Outlook 2003

Схема подключения Outlook 2003 к OpenLDAP см прикрепленные файлы к статье.

FAQ

В) Как в адресной книге вывести всех клиентов у которых есть электронная почта

O) Ввести в поле поиска символ "@"

В) Какой порт использует LDAP сервер

О) Стандартный TCP порт LDAP сервера - 389. Для защиты соединения может использоваться TLS (SSL) (порт 636).

В) Я использую php-5.2.10 и у меня при заходе в ПО показывает ошибку

Declaration of AJAXTree::draw_dn() should be compatible with that of

PLMTree::draw_dn()

О) Вам необходимо в файле lib/AJAXTree.php найти и заменить $level=0 на $level в функции draw_dn().

Кусок кода:

draw_dn($dn,$level,$first_child=true,$last_child=true)

http://www.ignix.ru/public/daemon/openldap_addressbook

Обновлено: 12.03.2015