Рейтинг
+2.26

LDAP

4 читателя, 76 топиков

Беспарольная авторизация на сервере OpenLDAP с использованием SASL

  • LDAP
Возникла как-то у вашего покорного слуги насущная потребность ходить на LDAP-сервер секьюрно (то есть по шифрованному соединению, а не со 100% гарантией безопасности, как можно было бы подумать), но без ввода пароля. Идея хорошая, но почему-то традиционно слова «секьюрно» и «без пароля» ассоциируются с такими громоздкими понятиями, как Kerberos, GSSAPI, SSO, Настройка всего этого — занятие не только трудоёмкое, но и не всегда оправданное: один человек это настроит, другой же, который рано или поздно придёт работать на его место, довольно быстро сойдёт с ума, а это нехорошо, потому что с людьми нужно быть… гуманнее как минимум :)

Читать дальше →

Проект Pro-LDAP.ru

  • LDAP
Хочу представить свой проект Pro-LDAP.ru (Про LDAP по-русски), http://pro-ldap.ru/. О целях проекта рассказано на его главной странице, если коротко, хотелось бы собрать в одном месте максимум информации на русском языке, которая могла бы принести реальную пользу системным администраторам, занимающимся службами каталогов.
В ближайших планах: в 2011 году закончить перевод OpenLDAP 2.4 Admin Guide (текущий вариант перевода http://pro-ldap.ru/tr/admin24/), в 2012 — перевести man-страницы OpenLDAP.
Хотелось бы услышать Вашу оценку (критическую, разумеется) качества перевода, а также предложения по дальнейшему развитию проекта, нужен ли на сайте форум и т. п.
Если есть желание помочь с переводом, либо предоставить хорошие статьи/материалы, пишите, адреса есть на главной странице сайта проекта. Буду благодарен за любую помощь!

Три буквы о главном

  • LDAP
Во многих странах уже давно и успешно пользуются технологиями SSO для частных нужд компаний и корпораций. У нас об SSO если и знают, то что-то совсем не то (и часто вообще путают с доменным входом в сеть Windows) и не применяют на практике, а чаще — не знают, не интересуются и знать не желают.
Читать дальше →

LDAP-конференция

  • LDAP
Собственно ldap@conference.jabber.ru
Защищена капчей, ботов нет
Буду рад ответить на все ваши вопросы
Ещё больше буду рад услышать ваши пожелания и предложения :)

Схема для связи объектов в каталоге

  • LDAP
Предлагаю вашему вниманию валидную схему для указания ссылок из объекта на другие объекты (просьба не путать с labeledURI и seeAlso :)).
Соответствующее пространство OID'ов зарегистрировано на моё имя, так что пользуйтесь на здоровье.

dn: cn=link,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: link
olcAttributeTypes: ( 1.3.6.1.4.1.37344.125.11 NAME 'linkedTo' DESC 'DN of another object in catalog which is linked to this entry' SUP distinguishedName )
olcObjectClasses: ( 1.3.6.1.4.1.37344.125.1 NAME 'link' SUP top AUXILIARY MUST ( linkedTo ) )


Читать дальше →

Permission denied при чтении конфигурационной директории OpenLDAP

  • LDAP
Столкнулся с такой загадочной проблемой: при попытке считать свою конфигурационную директорию, а именно файл cn=config.ldif, LDAP-сервер из штатной поставки Ubuntu 11.10 Oneiric страшно ругается Permission denied и спешно завершается.
Никаких объективных предпосылок для этого нет, права на чтение/запись пользователю openldap даны, sudo -u openldap cat <config_path>/cn=config.ldif отрабатывает правильно. И уж совсем странно, что будучи запущенным под рутом без опций -u и -g, slapd точно также не может получить доступ к своей конфигурации. Запустил его с strace'ом: на привилегированный порт 389 биндится, effective user id не меняет, к счастью, никаких chroot'ов без спроса не делает, но… но в итоге slapd всё равно благополучно валится:

open("/etc/openldap/domains/DOMAIN/conf/cn=config.ldif", O_RDONLY) = -1 EACCES (Permission denied)

Проблема решилась очень просто: взял исходники с openldap.org и собрал из исходников, получив совершенно адекватную рабочую версию сервера.
Ещё попробую изучить вопрос, но в любом случае предупреждаю, что в Ubuntu со штатной сборкой slapd явно что-то не так.

Компиляция BerkeleyDB для сборки OpenLDAP из исходников

  • LDAP
Сервер OpenLDAP для своей работы как правило требует хотя бы более-менее свежую версию Oracle BerkeleyDB. К сожалению, есть такие дистрибутивы, которые очень сложно или вовсе невозможно обновить, не переустанавливая (CentOS) и есть аналогичные энтерпрайз-решения, с которыми в общем таже беда (RedHat ES). При этом на BerkeleyDB завязаны многие дистрибутивные пакеты, а взаимодействие с этим движком файловых БД реализовано столь грамотно и удобно, что простая смена минорного номера версии запросто приводит к неработоспособности всего софта, который был скомпилирован для версии более старой. Так что же делать?
Ответ очевиден и прост до гениальности одновременно: компилировать движок BerkeleyDB отдельно так, чтобы только OpenLDAP его и «увидел».
Для начала установим BerkeleyDB (простейший вариант, без переопределения PREFIX'а установки — ибо ну и пусть себе следует прямой наводкой в /usr/local):


[[ -d ~/Compile ]] || mkdir ~/Compile
tar -xvf ~/Downloads/db-5.2.36.tar.gz -C ~/Compile
cd ~/Compile/db-5.2.36/build_unix
../dist/configure --enable-posixmutexes --with-mutex=POSIX/pthreads
make && su -c 'make install'


Ну а теперь компилируем OpenLDAP, не забыв показать скрипту configure, где лежит заветный BerkeleyDB:

CFLAGS=-L/usr/local/BerkeleyDB.5.2/lib CPPFLAGS=-I/usr/local/BerkeleyDB.5.2/include ./configure <здесь_могли_быть_ваши_опции>

Собственно, всё, с новым OpenLDAP'ом вас, господа!

P.S. Идея довольно простая, но тем не менее многие люди, включая и меня до недавнего времени, не решаются компилировать BerkeleyDB напрямую или пытаются обновить BDB, упираясь в непроходимы(й идиотизм)е дебри системы обновления своего дистрибутива: ведь даже в Gentoo пересобрать BDB для одного-единственного приложения не так-то просто…

Анонс LDAPCon 2009

  • LDAP
20 и 21-го сентября в рамках организованной LinuxFoundation конференции LinuxCon 2009 пройдёт форум LDAPCon 2009. Место проведения — отель «Portland Marriott Downtown Waterfront», город Портланд, штат Орегон, США.
2-я интернациональная Конференция по LDAP (LDAPCon 2009) — это технический форум для IT специалистов, интересующихся LDAP-технологиями и всем, что с ними связано: серверы каталогов, приложения для управления каталогами, управление аутентификацией и контролем доступа, мета-каталоги. 1-я интернациональная Конференция по LDAP прошла в 2007 году в Германии.
Основное внимание на LDAPCon 2009 будет уделено реализации и интеграции серверов LDAP и LDAP-совместимых (а также, разумеется, и LDAP-ориентированных) приложений. Данное мероприятие предоставляет отличную возможность встретиться поставщикам и разработчикам ПО, активным и будущим участникам LDAP-сообщества с целью обмена полезной информацией и накопленным опытом в области стратегий развёртывания и обслуживания каталогов, взаимодействия серверов и приложений, обсуждения возможностей применения LDAP в новых проектах, получения информации о самых современных тенденциях и разработках в области LDAP-технологий.

Официальный язык конференции — английский.

[PHP] Поиск по LDAP в браузере

  • LDAP
Еще один скрипт поиска по LDAP с любого компьютера в сети. Скрипт написан на PHP. Не стал прикручивать в выдаче результата красивое оформление, если потребуется, его можно взять из доработанной версии этого же скрипта, который я выкладывал вчера.
А этот скрипт в браузере выглядит примерно так:
Читать дальше →

Новая версия скрипта для бэкапа OpenLDAP-баз

  • LDAP
Каждый раз создаётся полный бэкап slapcat'ом
Если предыдущего бэкапа нет (первый запуск, например) — просто делаем первый полный бэкап
Если есть предыдущий полный бэкап, сравниваем текущий полученный бэкап с предыдущим
Если разница есть, то она записывается degrade-патчем (то есть позволяющим получить предыдущую версию из самой свежей), если разницы нет — просто чистятся файлы в /tmp

Если директории для бэкапов нет, она создаётся

Все переменные настроек — в начале скрипта

Читать дальше →

Судьба человека и его ПО как "зеркало эпохи"

  • LDAP
Довольно туманно будущее OpenSource-сервера каталогов OpenDS, разработка коего, как это уже стало «доброй традицией» в мире открытого софта, держится по сути на одном-единственном человеке… Дело в том, что корпорация Oracle, поглотившая компанию Sun Microsystems — бывшего работодателя Ludovic Poitou (того самого разработчика), совершенно не заинтересована в развитии большинства OpenSource-проектов, не приносящих столь очевидной прибыли как, например, MySQL.
Читать дальше →

Мультипротокольный балансировщик нагрузки (pen)

  • LDAP
Оказывается, есть совершенно бесплатный балансировщик нагрузки, умеющий также и failover, подходящий для LDAP! Это утилита pen, созданная теми же людьми, которые разрабатывали Siag Office (сам pen тоже древний). Установка его тривиальна даже при компиляции из исходников, но, например, в дистрибутиве Fedora pen уже есть, так что просто yum install pen. Пока что я его активно не тестировал, по факту работает, но насколько правильно он это делает — сказать не могу, дам лишь ссылку на официальный HOWTO

Коллекция интересных (нетривиальных) LDAP-related ссылок

  • LDAP
Данная коллекция будет пополняться время от времени путём непосредственного редактирования мной данного поста.
Нужна в первую очередь мне самому, поскольку кроме собственно ссылок содержит и краткое описание того, о чём в соотв. материалах идёт речь.

Читать дальше →

Схема DUAConfigProfile (RFC4876) для OpenLDAP

  • LDAP
Поскольку уже конвертированной схемы не нашлось, выкладываю свою.
Схема в частности пригодится для интеграции SUDO и LDAP при дословной реализации штатного README на эту тему. Хотя обязательной её назвать нельзя, поскольку в действительности SUDO работает с LDAP-каталогом и без неё.

Читать дальше →

R.I.P., LDAPCon 2011

  • LDAP
В этом году Dieter Kluenter, организатор прошлых конференций LDAPCon, не собирается проводить данное мероприятие. Напомню, что конференция не состоялась и в прошлом году, хотя в 2009 она была и тогда ничто не предвещало скорой кончины увлекательного междусобойчика LDAP-разработчиков.
Читать дальше →

Принудительный LDIF line wrapping отменяется!

  • LDAP
Не прошло и пяти лет, как в ldapsearch наконец добавили опцию, позволяющую выводить LDIF без переносов строк. Напомню, что переносы эти ставились в соответствии со стандартом MIME, который сам по себе вообще весьма сомнительное отношение имеет к LDIF, но тем не менее. Особо хотелось бы отметить, что в реализациях ldapsearch родом из проекта iPlanet (детища консорциума Sun Microsystems и Netscape) подобная опция была с самого начала, а в OpenLDAP'овском клиенте её не добавляли исключительно по принципиальным соображениям строгого следования букве и духу стандартов, даже если это ограничивает свободу выбора или попросту противоречит здравому смыслу. Но в 2.4.24 они всё-таки сдались, так что скомпилировав его вы получите чудесный новенький ldapsearch, умеющий знаете что?
Вот:
ldapsearch -LLLZZZ -b 'dc=company,dc=com' -s one -o ldif-wrap=no

Лучший графический LDAP-клиент

  • LDAP
Уже очень давно пользуюсь во всех отношениях приятным LDAP-клиентом LDAP Browser/Editor. Эта компактная кроссплатформенная программа на Java с открытым исходным умеет всё или почти всё (не умеет, например, картинки JPEG напрямую в каталог запихивать). Её ближайшим конкурентом можно назвать Apache Directory Studio — клиент более функциональный, интеллектуальный и навороченный, но и более требовательный к ресурсам. Я предпочитаю пользоваться в основном LDAP Browser/Editor'ом и только в каких-то редких случаях — Apache Directory Studio. Из редких случаев стоит упомянуть работу со схемой, просмотр и редактирование Active Directory, а также загрузку любых файлов в каталог (для чего он совершенно не предназначен, поэтому такое кощунство требуется делать действительно редко).

И да, phpLDAPAdmin — штука довольно недоразвитая, ненаглядная и тормозная (как и большинство навязываемых нам «супер-пупер» веб-технологий), поэтому пользоваться ей рекомендую лишь в тех случаях, когда требуется админить LDAP-сервер удалённо из любой точки планеты, и не только под nix'ами, но и под форточками. Но по жизни для нервной системы полезнее будучи на Багамах всё же скачать автономный LDAP-клиент и пользоваться им.

Отличный обзор LDAP Browser/Editor можно найти на сайте LDAP-сервера OpenDS: www.opends.org/wiki/page/LDAPBrowserEditor Правда, указанная там ссылка на домашнюю страничку автора неактуальна уже (видимо, автор прекратил разработку или продолжил её в составе какого-то другого ПО). Тем не менее, программа очень популярна и скачать её можно во многих местах, например, здесь: www.novell.com/communities/files/Gawor_ldapbrow..., а RPM-пакет — здесь: rpm.pbone.net/index.php3/stat/4/idpl/11310306/d...

ПРАВИЛЬНАЯ инциализация OpenLDAP-сервера с динамической конфигурацией

  • LDAP
Положим, перед нами стоит задача «с нуля» настроить новый сервер каталогов, при этом использование безнадёжно устаревшего метода конфигурации, — редактирование slapd.conf, — полностью исключено, поскольку завещано нашими предками: «Делай хорошо, а плохо само получится!»
Исходные данные: есть установленный любым путём OpenLDAP-сервер и стандартные утилиты к нему (во многих дистрибутивах по каким-то странным соображениям клиентская и серверная части OL разнесены по разным пакетам, так что в этом случае вам необходимо установить и то, и другое)
Требуется: создать рабочую конфигурацию LDAP-каталога и добавить суффикс dc=example,dc=com, при этом использовать slapd.conf на любом этапе нельзя (мы же твёрдо решили отказаться от этого анахронизма).

Здесь перед вами встаёт дилема: раз нельзя использовать slapd.conf, значит нужно написать конфигурацию каким-либо иным образом. А поскольку известно, что физически на файловой системе дерево конфигурации представляет собой структуру каталогов со вложенными ldif-файлами, то первое, что приходит на ум — это изучение 5-й главы «Руководства администратора OpenLDAP» на предмет того, как бы написать все необходимые LDIF'ы самому (и при этом не сойти с ума, узнав, что operationalAttributes для cn=config никто не отменял). Когда я первый раз решил настроить свой сервер каталогов через cn=config и попытался создать всё дерево настроек вручную, скурпулёзно следуя этой самой 5-й главе, я потерпел фиаско, при этом с пользой потратив время на изучение внутреннего устройства конфигурации. Оказалось, что такой подход — неправильный. Дальнейшее изучение документации, в том числе и man-страниц (для проекта OpenLDAP вообще характерно, что в man'ах можно найти значительно более обстоятельную информацию, нежели в «Руководстве администратора»;) привело меня к тому, что можно создать некий простенький стартаповый файл конфигурации slapd.conf, который slapd при запуске со своеобразным «секретным» сочетанием параметров -f <путь_к_slapd.conf> -F <каталог_для_cn=config> — преобразует к формату cn=config'а (впрочем, он это в любом случае делает при каждом запуске) и сам выложит в «каталог_для_cn=config» всю нужную мне структуру. Таким образом я действительно добился результата, в заботливо созданном и подсунутом slapd в параметре -F каталоге и правда появилась структура с нужными ldif'ами, но… при этом получалось, что мне так и не удалось избавиться от slapd.conf, ведь на этапе инициализации он в минималистичном виде, но всё же понадобился. А хотелось не прибегать к помощи slapd.conf'а совсем, к тому же по всем признакам было понятно, что сами разработчики OpenLDAP'а не используют этот неудобный и явно устаревший метод. «А ларчик просто открывался» — решение, оказалось, лежало на поверхности!
Итак, всё НАМНОГО элементарнее, чем вы думали, если вы над этим уже думали, мой дорогой читатель, на что я, честно говоря, очень рассчитываю.
Перво-наперво нужно создать каталог для cn=config, он может называться как угодно и находиться по сути дела где угодно, лишь бы файловая система была доступна на запись и позволяла устанавливать права доступа для UNIX'овых пользователей. Например:
mkdir -p /etc/openldap/slapd.d/example

После создания каталога вам нужно определиться с паролем, который будет использоваться для доступа к конфигурации. Используйте утилиту slappasswd (на самом деле это тот же slapd) для получения шифрованного пароля:
slappasswd -h '{<МЕТОД_ХЕШИРОВАНИЯ>}' -s 'ПАРОЛЬ'

Например:
Команда: slappasswd -h '{MD5}' -s 'topsecret'
Вывод: {MD5}6oR5iLpZcn2/TjTudXJtww==

Если вы немного параноик (что в принципе хорошо) и не привыкли оставлять не предназначенные для чужих глаз сведения в своём history, можете не указывать пароль в открытом виде и опустить опцию -s, но тогда вам придётся два раза вводить одно и то же, как в утилите passwd.
Скопируйте вывод команды slappasswd, например, просто выделив его мышью в окне терминала. Теперь вам предстоит… да-да, написать начальную конфигурацию, которая разрешила бы классическую дилему с курицей и яйцом, возникающую из-за того, что наполнить дерево cn=config можно только после запуска сервера, а сервер не запустить, если для него вообще нет конфигурационной информации.
Но это делается на самом деле даже проще, чем со slapd.conf'ом. Итак, открываем любимый текстовый редактор и пишем:
dn: cn=config
objectClass: olcGlobal
cn: config

dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcRootPW: ШИФР_ПАРОЛЬ

Собственно на место ШИФР_ПАРОЛЬ нужно вставить тот вывод slappasswd, который вы перед этим скопировали.
Вуаля, начальная конфигурация готова, её можно сохранить в файл — например, под именем startup-config.ldif. Теперь всё готово для того, чтобы в правильном формате «скормить» этот файл LDAP-серверу, при этом не запуская его. Для добавления данных в напрямую в бэкенды OpenLDAP, а не через посредство сервера, то есть в режиме оффлайн, предназначена утилита slapadd (опять же, на самом деле это просто ссылка на slapd, имя которой является своеобразным неявным параметром, определяющим, что данному бинарнику следует делать). Шаблон начальной конфигурации, в котором, заметьте, нашего пока ничего, кроме пароля, нет, загружается следующим образом:
slapadd -n 0 -F <КАТАЛОГ_ДЛЯ_cn=config> -l <ФАЙЛ_НАЧАЛЬНОЙ_КОНФИГУРАЦИИ>

Обратите внимание на то, что мы обязательно должны передать утилите slapadd параметр -n 0, что означает «добавить данные в базу номер ноль». Посмотрите на файл начальной конфигурации: в нём описание собственно самой базы cn=config находится в dn: olcDatabase={0}config,cn=config. Следует обратить внимание на число 0, указанное в фигурных скобках — это собственно тот самый индекс базы (для cn=config всегда равен нулю), который мы затем указываем в параметре -n для slapadd. Делать это явным образом нужно потому, что по умолчанию slapadd пытается добавить данные в базу, соответствующую первому инициализированному суффиксу с индексом больше единицы (обычно это уже собственно содержимое каталога, то есть пользовательские данные).
Итак, для примера считаем, что под нужды cn=config мы создали каталог /etc/openldap/slapd.d/example, тогда команда может выглядеть так:
Команда: slapadd -n 0 -F /etc/openldap/slapd.d/example -l ПУТЬ/К/ФАЙЛУ/startup-config.ldif
Вывод: _#################### 100.00% eta none elapsed none fast!
Closing DB...

Убедитесь в том, что теперь каталог cn=config'а не пуст, выполнив в нём ls -lR. Если вы видите структуру каталогов со вложенными ldif'ами, значит всё в порядке, в противном случае перечитайте всё изложенное мной выше и попытайтесь понять, что вы сделали не так :) Вроде бы всё сделали, но остаётся один маленький штришок: поскольку все предыдуще действия были произведены под суперпользователем, а OpenLDAP в целях безопасности должен запускаться с правами собственной учётной записи, если сейчас просто взять и запустить LDAP-сервер указав ему в параметре -F только что инициализированную нами базу cn=config, он не сможет получить доступ к файлам — ведь они принадлежат root и на них утилитой slapadd предусмотрительно установлена маска доступа со сброшенными битами для «группы» и «остальных». Поэтому в каталоге с базой cn=config'а нужно рекурсивно поменять владельца на того пользователя, с правами которого будет запускаться сервер. Для того, чтобы узнать имя этого самого пользователя, посмотрите вывод getent passwd | fgrep -i ldap, скорее всего его так и зовут: «ldap», — хотя в Debian'е, например, традиционно уже решили соригинальничать и назвали его openldap, что не суть важно (в особенности, если вы умеете быстро печатать десятипальцевым методом, который ваш покорный слуга так до сей поры чудесной и не освоил).
В примере после chown -R ldap.ldap /etc/openldap/slapd.d/example мы имеем готовую работоспособную конфигурацию, пусть и простейшую и теперь мы можем запустить сам сервер:
slapd -F /etc/openldap/slapd.d/example -u ldap -g ldap -h ldap:///

Итак, если вы точно следовали моим рекомендациям, уже сейчас у вас есть сервер OpenLDAP, который больше не нужно перезапускать, все оставшиеся действия по настройке (подключение модулей, расширение схемы, добавление суффиксов) вы будете делать только в режиме «онлайн», изменяя конфигурацию на работающем сервере!

Сделав наш сервер максимально гибким и конфигурируемым благодаря динамическому дереву настроек cn=config, мы конечно же не можем не вопользоваться теперь предоставленными нам широчайшими возможностями для того, чтобы создать суффикс dc=example,dc=net (ведь именно это нам в конечном счёте и нужно, не правда ли?).
Но дабы вы не наступали всё на те же чудные грабли, на которые наступал я и не раз, даже не надейтесь на то, что хотя бы минимально необходимые атрибуты и классы объектов сейчас есть в составе автоматически созданного сервером дерева настроек. Да оно в общем и не мудрено — ведь прописывали же вы все так называемые файлы схем в древнем, как сама история файлике slapd.conf? И ведь там даже core.schema нужно было явным образом указывать, иначе вообще ничего у вас не заработало бы. Ну так я могу вас обрадовать тем, что в случае с cn=config определённый прогресс уже есть и то, что лежит в core по умолчанию будет лежать у вас в cn=schema,cn=config. Всё остальное же нужно добавлять самим. При этом очевидно, что поскольку сама по себе схема каталога интегрирована в дерево cn=config, то и добавлять её составляющие нужно будет как обычные LDIF-файлы: ведь именно то, что мы видим в дереве конфигурации — это и есть представление данных именно в том виде, в котором их читает сервер, эта конфигурация уже не интерпретируется, как раньше происходило с файлом slapd.conf, где include'ы считывались в процессе парсинга. Но где же взять файлы нужных схем в формате LDIF, спросите вы? Вопрос не праздный, потому что никаких утилит преобразования файлов schema в LDIF'ы в поставке OpenLDAP'а нет (что, вообще говоря, довольно странно и вообще вряд ли сей факт имеет какое-о разумное объяснение с учётом того, что до сих пор большинство кустарных схем к огромному количеству самого разного софта так и поставляется в старом формате). Если вы внимательно рассмотрите содержимое каталога /etc/openldap/schema (соответственно, это может быть другой каталог, в зависимости от того, что у вас за система и/или какое значение prefix вы задали на этапе конфигурирования), то найдёте там несколько важных (если не сказать ключевых) и наиболее часто используемых файлов схем в формате LDIF. Любые другие схемы можно добавить, переконвертировав их из schema в ldif довольно простым скриптом на bash, который я приведу чуть позже. А пока давайте просто добавим схемы в том порядке, в котором их взаимные зависимости будут удовлетворены. Поскольку в поставке OpenLDAP'а таких схем маловато, пока что можно особо не заморачиваться взаимозависимостями и сделать это так, как делал я:
while read s; do ldapadd -x -D 'cn=config' -w 'ПАРОЛЬ_ДЛЯ_cn=config' -f $s; done < <( find /etc/openldap/schema/ -type f -name '*.ldif' -a ! -name 'core.ldif' ) 

Собственно, вся «хитрость» данного подхода заключается в том, что схемы в алфавитном порядке имён файлов грузятся правильно, а если их попытаться «скормить» серверу том порядке, в котором их находит find, возникают конфликты неразрешённых зависимостей. В общем, это всё не суть важно, можно и руками загружать при желании.

Что ж, теперь у нас есть базовый набор схем и можно приступать к настройке суффикса. Впрочем, постойте, а поверх чего этот суффикс будет работать? Ведь наверняка же поверх бэкендов BDB или HDB? А модули для этих бэкендов загружены или, возможно, вполне возможно, всё необходимое статически скомпилировано со slapd? Для того, чтобы узнать, был ли slapd собран полностью статично, попробуйте следующий запрос:
ldapsearch -xLLL -b 'cn=subschema' -s base '(objectClass=*)' '+' | fgrep olcModuleList

Если в ответ на этот запрос вы получите строку, содержащую olcModuleList — значит у вас модульная конфигурация, если же вы не увидите ничего, значит slapd скомпилирован полностью статически и без поддержки загружаемых модулей.

Для того, чтобы точно узнать, требуются от вас какие-либо дополнительные действия или нет, действуйте по принципу доказательства от противного: попробуйте загрузить LDIF для нового пространства имён (суффикса), например:

dn: olcDatabase=bdb,cn=config
objectClass: top
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: bdb
olcSuffix: dc=example,dc=com
olcRootDN: cn=manager,dc=example,dc=com
olcRootPW: ШИФР_ПАРОЛЬ
olcDbDirectory: /var/lib/ldap

Надеюсь, для тех, кто хоть раз настраивал сервер OpenLDAP, всё достаточно очевидно. ШИФР_ПАРОЛЬ сформируйте командой slappasswd по аналогии с тем, как вы это делали для cn=config. В olcDbDirectory прописывается путь к каталогу, в котором будут размещаться файлы базы данных-бэкенда (например, Berkeley DB), то есть это аналог директивы directory в slapd.conf. Если при попытке добавить данный LDIF в дерево конфигурации вы получаете ошибку, свидетельстующую об отсутствии objectClass'а olcBdbConfig, значит, либо не загружен соответствующий модуль (но для этого предыдущая проверка должна была пройти успешно и objectClass olcModuleList присутствует в текущей схеме), либо кто-то (возможно, вы сами) умудрился статически скомпилировать slapd без поддержки Berkeley DB. Аналогично и в случае с HDB.
Если выяснилось, что вам нужно подгрузить модуль, в соответствии с п.п. 5.2.2 «Руководства администратора», добавьте следующий LDIF:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModuleLoad: ПУТЬ/К/МОДУЛЮ/back_bdb.la

Заметьте, что индексы в фигурных скобках в начале RDN (как тот же «cn={0}module» в Руководстве) на самом деле генерируются сервером автоматически, их нужно указывать явно _только_ в особых случаях (например, когда нужно «раздвинуть» существующие индексы, вставив новый элемент).
Стоит особо отметить, что при истинно модульной конфигурации OpenLDAP, подобной модульной сборке ядра операционной системы, все компоненты по возможности находятся в отдельных подключаемых во время исполнения бинарных файлах с расширением «la». В этих случаях иногда требуется подключить не один-два модуля, а, например, десяток или даже больше. Понятное дело, что каждый раз указывать полный путь к файлам модулей в директиве olcModuleLoad в этом случае несколько нерационально, в особенности если у вас все la-шные файлы лежат в одном и том же каталоге. В этом случае можно добавить директиву olcModulePath, которая выполняет ту же функцию, что и системная переменная PATH — определяет пути поиска файлов по умолчанию. В этом случае LDIF для добавления нужных модулей может выглядеть так:
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap/bin:/usr/share/samba/ldap/modules:<и т.д.>
olcModuleLoad: back_bdb.la
olcModuleLoad: back_hdb.la
olcModuleLoad: back_sock.la
olcModuleLoad: <ещё_один_модуль>.la

Поиск по LDAP в браузере с использованием jQuery

  • LDAP
Потребовался мне быстрый поиск по LDAP с любого компьютера в распределенной сети c возможностью выбора нескольких адресатов для отсылки письма. В итоге написал скрипт с использованием jQuery, который позволяет делать выборки из базы без перезагрузки страницы, манипулировать почтовыми адресами для отсылки. Выборку делает php программа, которая возвращает выборку данных в основной html документ. В итоге в браузере выглядит примерно так:
ldap search
Читать дальше →