Lightweight Directory Access Protocol (LDAP) — это протокол запросов и изменений к сервису каталогов на базе X.500, работающий поверх TCP/IP. . Этот протокол обеспечивает доступ к каталогам LDAP. Здесь приведены некоторые ключевые понятия и термины: • Каталог LDAP — это дерево данных в виде записей, иерархичных по своей природе, которое называется деревом каталогов информации (Directory Information Tree, или DIT). • Запись состоит из набора атрибутов. • Атрибут имеет тип (имя/описание) и одно или несколько значений. • Каждый атрибут должен быть определён как минимум в одном объектном классе (objectClass). • Атрибуты и объектные классы определяются в схемах (объектный класс фактически рассматривается как специальный вид атрибута). • Каждая запись имеет уникальный идентификатор — отличительное имя (Distinguished Name, или DN). Оно состоит из относительного отличительного имени (RDN), за которым следует запись родительского DN. • DN записи — это не атрибут. Оно не является частью собственно записи.
Термины объект, контейнер, and узел (node) имеют определенный подтекст, но они все по существу обозначают такую вещь, как запись, технически корректный термин
Например, далее мы имеем одну запись, содержащую 11 атрибутов. Её DN — это "cn=John Doe,dc=example,dc=com"; её RDN — это "cn=John Doe"; а родительский DN — "dc=example,dc=com". dn: cn=John Doe,dc=example,dc=com cn: John Doe givenName: John sn: Doe telephoneNumber: +1 888 555 6789 telephoneNumber: +1 888 555 1232 mail: john@example.com manager: cn=Larry Smith,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top
Вышепривёденная запись — это формат LDIF (LDAP Data Interchange Format, то есть формат обмена данными LDAP). Любая информация, которую вы помещаете в ваш DIT, должна быть в таком формате. Это определено в RFC28492. Хотя данное руководство описывает, как использовать его для централизованной идентификации, LDAP хорош для всего, что затрагивает большое количество запросов к системе, основанной на атрибутах (имя:значение) и ориентированной преимущественно на чтение. В качестве примеров можно привести адресную книгу, список адресов электронной почты и конфигурацию почтового сервера.
Установка
Установите демон сервера OpenLDAP и традиционные утилиты управления LDAP. Они находятся в пакетах slapd и ldap-utils, соответственно. Установка slapd создаст работающую конфигурацию. В частности, она создаст экземпляр базы данных, которую вы можете использовать для хранения своих данных. Однако суффикс (или базовый DN) этого экземпляра будет определён из доменного имени localhost. Если вы хотите использовать что-то другое, отредактируйте /etc/hosts и замените доменное имя на подходящее. Например, если вам нужен суффикс dc=example,dc=com, то ваш файл должен иметь подобную строку:
127.0.1.1 hostname.example.com hostname Это руководство будет использовать суффикс базы данных dc=example,dc=com.
Установка: sudo apt-get install slapd ldap-utils
slapd проектируется так, чтобы настраиваться самостоятельно, выделяя отдельный DIT для этой цели. Это позволяет динамически настраивать slapd без необходимости перезапускать сервис. Эта конфигурационная база данных состоит из набора текстовых LDIF- файлов, расположенных в /etc/ldap/slapd.d. Этот вариант работы известен под разными названиями: метод slapd-config, RTC-метод (от Real Time Configuration — настройка в реальном времени) или метод cn=config. Вы всё ещё можете использовать традиционный метод плоского файла (slapd.conf), но это не рекомендуется; данная функциональность в конечном счете будет убрана. В настоящее время Ubuntu использует метод slapd-config для настройки slapd, и данное руководство это отражает. Во время установки вам будет предложено указать учётные данные администратора. Это LDAP-данные для rootDN вашего экземпляра базы данных. По умолчанию DN этого пользователя: cn=admin,dc=example,dc=com. Также по умолчанию не создается административного пользователя для базы данных slapd-config и вы, следовательно, будете вынуждены использовать внешнюю аутентификацию LDAP для доступа к ней. Мы рассмотрим, как это делается, позднее. Некоторые классические схемы (cosine, nis, inetorgperson) выпускаются теперь для slapd. Это также включает базовую (core) схему, которая предполагается для любой рабочей схемы.
Проверка после установки
Процесс установки создаст два DIT. Один для slapd-config и один для ваших данных (dc=example,dc=com). Давайте взглянем: • Здесь показано, как выглядит дерево (DIT) базы данных slapd-config. Напомним, что эта база основана на LDIF и находится в /etc/ldap/slapd.d: /etc/ldap/slapd.d/ ├── cn=config │ ├── cn=module{0}.ldif │ ├── cn=schema │ │ ├── cn={0}core.ldif │ │ ├── cn={1}cosine.ldif │ │ ├── cn={2}nis.ldif │ │ └── cn={3}inetorgperson.ldif │ ├── cn=schema.ldif │ ├── olcBackend={0}hdb.ldif │ ├── olcDatabase={0}config.ldif │ ├── olcDatabase={-1}frontend.ldif │ └── olcDatabase={1}hdb.ldif └── cn=config.ldif
Не редактируйте базу slapd-config напрямую. Вносите изменения через протокол LDAP (утилитами).
• Здесь показано, как выглядит дерево slapd-config через LDAP протокол:
sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config dn: cn=module{0},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: olcBackend={0}hdb,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config dn: olcDatabase={1}hdb,cn=config
Пояснения к записям: • cn=config: глобальные настройки • cn=module{0},cn=config: динамически загружаемый модуль • cn=schema,cn=config: содержит жёстко запрограммированную схему системного уровня • cn={0}core,cn=schema,cn=config: жёстко запрограммированная базовая (core) схема • cn={1}cosine,cn=schema,cn=config: схема cosine • cn={2}nis,cn=schema,cn=config: схема nis • cn={3}inetorgperson,cn=schema,cn=config: схема inetorgperson • olcBackend={0}hdb,cn=config: тип хранилища 'hdb' заднего плана • olcDatabase={-1}frontend,cn=config: база переднего плана, настройка по умолчанию для других баз данных • olcDatabase={0}config,cn=config: конфигурационная база slapd (cn=config) • olcDatabase={1}hdb,cn=config: экземпляр вашей базы данных (dc=examle,dc=com)
• А здесь показано как выглядит дерево dc=example,dc=com: ldapsearch -x -LLL -H ldap:/// -b dc=example,dc=com dn dn: dc=example,dc=com dn: cn=admin,dc=example,dc=com
Пояснения к записям: • dc=example,dc=com: базовый уровень вашего дерева (DIT) • cn=admin,dc=example,dc=com: администратор (rootDN) данного дерева (заполняется в процессе установки пакета)
Изменение/заполнение вашей базы данных
Введём некоторые данные в нашу базу: • узел (node) с названием People (для хранения пользователей) • узел с названием Groups (для хранения групп) • группу с названием miners • пользователя с именем john
Для этого создайте следующий LDIF файл и назовите его add_content.ldif:
dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People
dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups
dn: cn=miners,ou=Groups,dc=example,dc=com objectClass: posixGroup cn: miners gidNumber: 5000
dn: uid=john,ou=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount
uid: john sn: Doe givenName: John cn: John Doe displayName: John Doe uidNumber: 10000 gidNumber: 5000 userPassword: johnldap gecos: John Doe loginShell: /bin/bash homeDirectory: /home/john
Важно, чтобы значения uid и gid в вашем каталоге не совпадали с локальными значениями. Используйте диапазон больших чисел, начинающийся, например, с 5000. Установка больших значений uid и gid для ldap также позволяет упростить контроль за тем что могут делать локальные пользователи, а что ldap.
Добавляем данные:
ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_content.ldif Enter LDAP Password: ******** adding new entry "ou=People,dc=example,dc=com" adding new entry "ou=Groups,dc=example,dc=com" adding new entry "cn=miners,ou=Groups,dc=example,dc=com" adding new entry "uid=john,ou=People,dc=example,dc=com"
Мы можем проверить что информация добавлена правильно с помощью утилиты ldapsearch: ldapsearch -x -LLL -b dc=example,dc=com 'uid=john' cn gidNumber dn: uid=john,ou=People,dc=example,dc=com cn: John Doe gidNumber: 5000
Объяснения ключей команды: • -x: "простое" связывание; не будет использоваться метод SASL по умолчанию • -LLL: отключить вывод посторонней информации • uid=john: — «фильтр» для поиска пользователя john • cn gidNumber: запрос на вывод определенных атрибутов (по умолчанию выводятся все атрибуты)
Изменение базы данных настройки slapd
Дерево (DIT) slapd-config также может запрашиваться и изменяться. Здесь приведено несколько примеров. • Используйте ldapmodifyдля добавления индекса (атрибут DbIndex) для вашей {1}hdb,cn=config базы (dc=example,dc=com). Создайте файл с названием uid_index.ldif следующего содержания: dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: uid eq,pres,sub
Затем выполните команду: sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif modifying entry "olcDatabase={1}hdb,cn=config"
Вы можете подтвердить изменения следующим способом: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=config '(olcDatabase={1}hdb)' olcDbIndex dn: olcDatabase={1}hdb,cn=config olcDbIndex: objectClass eq olcDbIndex: uid eq,pres,sub
Давайте добавим схему. Сначала её нужно преобразовать в формат LDIF. Вы можете найти не преобразованные схемы в добавление к преобразованным в каталоге /etc/ldap/schema. • Удаление схемы из базы slapd-config — нетривиальная задача. Потренируйтесь добавлять схемы на тестовой системе. • Перед добавлением любой схемы вам следует проверить, какие схемы уже установлены (показан вывод по умолчанию, для состояния "из коробки"): sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \ cn=schema,cn=config dn dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config
В следующем примере мы добавим схему CORBA. 1. Создайте конфигурационный файл преобразования schema_convert.conf, содержащий следующие строки: include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/ldapns.schema include /etc/ldap/schema/pmi.schema
2. Создайте выходной каталог ldif_output.
3. Определите индекс схемы: slapcat -f schema_convert.conf -F ldif_output -n 0 | grep corba,cn=schema cn={1}corba,cn=schema,cn=config
Когда slapd вводит объекты с тем же родительским DN, он создает индекс для этого объекта. Индекс обрамляется скобками: {X}.
4. Используйте slapcat для выполнения преобразования: slapcat -f schema_convert.conf -F ldif_output -n0 -H \ ldap:///cn={1}corba,cn=schema,cn=config
Сконвертированная (преобразованная) схема теперь в cn=corba.ldif
5. Редактируйте cn=corba.ldif по достижении следующих атрибутов: dn: cn=corba,cn=schema,cn=config ... cn: corba
Также удалите следующие строки в конце: structuralObjectClass: olcSchemaConfig entryUUID: 52109a02-66ab-1030-8be2-bbf166230478 creatorsName: cn=config createTimestamp: 20110829165435Z entryCSN: 20110829165435.935248Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20110829165435Z
Значения ваших атрибутов могут быть другими.
6. Наконец, используйте ldapadd для добавления новой схемы к дереву slapd-config:
sudo ldapadd -Q -Y EXTERNAL -H ldapi:/// -f cn\=corba.ldif adding new entry "cn=corba,cn=schema,cn=config"
7. Проверьте текущую загруженную схему: sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}nis,cn=schema,cn=config dn: cn={3}inetorgperson,cn=schema,cn=config dn: cn={4}corba,cn=schema,cn=config
Для аутентификации с помощью LDAP внешних приложений и клиентов, они должны быть специфически настроены. Обратитесь к соответствующей документации по поводу деталей.
Ведение журнала
Ведение журнала активности для slapd обязательно, когда осуществляется решение на базе OpenLDAP, поэтому его требуется включить вручную после установки приложения. Иначе только элементарные сообщения будут доступны в журналах. Ведение журналов, как и другие настройки slapd, подключаются через базу данных slapd-config. OpenLDAP поставляется с несколькими подсистемами (уровнями) журналирования, каждая из которых включает подчиненную (дополнительную). Хороший вариант, который стоит попробовать — это stats. Страница slapd-config3 содержит больше информации по иным подсистемам. Создайте файл logging.ldif со следующим содержимым: dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: stats
Производим изменения: sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f logging.ldif
Это породит значительный объем записи в журнал и вы захотите уменьшить уровень детализации когда ваша система станет боевой. С таким уровнем детализации система журналирования вашего хоста (rsyslog) может отнимать значительное время процессора, а также пропускать сообщения: rsyslogd-2177: imuxsock lost 228 messages from pid 2547 due to rate-limiting
Вы можете решить изменить настройки rsyslog. В файл /etc/rsyslog.conf поместите следующее: # Disable rate limiting # (default is 200 messages in 5 seconds; below we make the 5 become 0) $SystemLogRateLimitInterval 0
А затем перезапустите демон rsyslog: sudo service rsyslog restart
|
Комментариев оставлено: (0) Просмотров: 15309
Другие новости по теме:
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Комментарии к новости:
|
управление аккаунтом
Профиль пользователя
самые интересные новости
Популярные новости
|