Поиск






Понедельник, 29.04.2024, 08:43

| RSS

ОТДЕЛ
ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЙ
 
Каталог статей


Главная » Статьи » Интересные статьи

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

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

Необходимо:

  • Организовать общую адресную книгу для предприятия.
  • Научится просто и эффективно управлять OpenLDAP и адресной книгой.
  • Подсадить пользователей на правильный почтовый клиент.

Предисловие

На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью 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.

# 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, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.

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

Mozilla Thunderbird

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

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

Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по 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.

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)

В) Какой почтовый клиент может записывать информацию в адресную книгу?
О) Единственный почтовый клиент который может писать в LDAP это Evolution.

Источник
Категория: Интересные статьи | Добавил: sashacd (12.10.2010)
Просмотров: 3306 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:

Copyright ООО "Отдел Информационных Технологий" © 2024