По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта — посвящается сие писание =).
Предисловие
На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью 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: [email protected] 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: [email protected] 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: [email protected] 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.
Добавить комментарий