Последнее изменение файла: 2009.10.29
Скопировано с www.bog.pp.ru: 2010.03.21
Bog BOS: LDAP и OpenLDAP
Протокол LDAP (Lightweight Directory Access Protocol,
упрощённый протокол службы каталогов) является развитием
(упрощением и адаптацией к TCP/IP) стандарта ISO/ITU X.500 (1993 год).
Используется во всех службах каталогов (NDS/eDirectory, Active Directory, OpenLDAP, iPlanet,
Fedora Directory).
Версии LDAP: версия 1 (RFC 1487, 1993, не используется),
версия 2 (RFC 1777, 1995; RFC 3494, упразднение в 2003),
версия 3 (RFC 2251, 1997).
LDAPv3 предусматривает возможность сортировки информации, разбиения на страницы,
расширяемые операции, хранение схемы в каталоге, поддержку интернационализации для
имён объектов и значений атрибутов, использование SASL для
расширения методов аутентификации, возврат ссылки на другой сервер.
LDAP представляет средства доступа к логически иерархической БД
(реальное хранилище может быть реализовано по другому). Каталог (БД) состоит из записей (объектов).
Тип объекта (класс) определяется набором атрибутов: имя, тип значения, обязательность.
Строки в кодировке UTF-8.
Объект может ассоциироваться с несколькими классами.
Класс может быть расширением другого класса (наследование).
Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров),
псевдонимы (символьные ссылки), переадресация клиента к другому каталогу
(переход по ссылкам, chasing referrals).
Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога.
Правила связывания определяются набором правил, который называется схемой каталога
(в схему входят также описания классов).
Дерево начинается от корневого объекта (класс Top в Active Directory).
Поиск объекта в иерархии производится с помощью составного имени.
Каждый объект имеет относительное отличительное имя (Relative Distinguished Name).
Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего
уровня (порядок записи - от младшего к старшему, разделитель - точка).
Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=).
Имеется выделенный администратор каталога, обладающий корневыми полномочиями.
Для аутентификации используется расширяемый механизм SASL.
Имеется возможность анонимного доступа. Права доступа - чтение, запись. ACL не стандартизованы.
Поддерживается репликация.
Общие имена атрибутов:
c - страна
st - регион
l - местность
o - организация
ou - подразделение
dc - domain container
cn - имя
sn - фамилия
mail
Клиент может:
подключиться к серверу БД (запрос привязки), для аутентификации используются механизмы
SASL
читать значения определённых атрибутов конкретного объекта
сравнить значения с атрибутом объекта (полезно для аутентификации сравнением хеша)
искать объекты по значениям атрибутов (указывается корень поддерева,
максимальное количество результатов, максимальное время поиска, фильтр поиска,
перечень желаемых атрибутов)
получить список объектов ниже по иерархии
отменить предыдущий запрос
добавить, изменить или удалить объект
переименовать объект
Стандартный TCP порт сервера LDAP - 389 (возможность использования протокола
UDP зарезервирована, но не используется). Для шифрования может использоваться
TLS (SSL) (порт 636).
LDIF (LDAP Data Interchange Format, RFC 2849) - стандарт на экспорт
каталога в текстовый файл с целью дальнейшего импорта файла на другой сервер.
Текстовый файл в каждой строке содержит имя и значение одного атрибута.
Если атрибут имеет несколько значений, то они записываются на нескольких строчках.
Имя атрибута 'dn' используется для задания DN имени очередного объекта
(описания объектов также разделяются пустой строкой).
Имя атрибута objectClass используется для определения класса (типа) объекта.
Имя атрибута отделяется от значения строкой ': ' (значение в кодировке UTF-8),
строкой ':: ' (значение в кодировке base64), строкой ':< '
(указывается URI, по которому находится значение;
обычно file:///...).
Строки, начинающиеся с '#', являются комментариями. Продолжение строки обозначается
пробелом или табуляцией в первой позиции следующей строки.
Разрабатывается OpenLDAP Foundation. Лицензия своя (BSD-like).
Стабильная версия - 2.3.39 (20071118); CentOS 4.5 - версия 2.2.13; CentOS 5 - 2.3.27; FC6 - 2.3.30;
FC3 - 2.2.19. Пакеты - openldap, openldap-devel, openldap-clients, openldap-servers.
В качестве внутреннего хранилища используется Berkeley DB
(Sleepycat Software, куплена Oracle в 2006 году, /var/lib/ldap, каждый атрибут в
отдельном файле имя-атрибута.bdb, права доступа к каталогу - ldap:ldap 700).
Клиентские программы и библиотеки (ldap - LDAP, lber - кодировка BER/DER).
Файл настройки - /etc/openldap/ldap.conf (ldap.conf.5) и ~/.ldaprc или ~/ldaprc или ./ldaprc
(перекрывают общесистемные настройки).
Переменная окружения LDAPNOINIT отключает все установки по умолчанию.
С помощью переменных LDAPCONF (абсолютный или относительный путь) и
LDAPRC (имя файла в текущем или домашнем каталоге) можно задать имена дополнительных файлов настройки.
Значение опции XYZ можно установить с помощью переменной окружения LDAPXYZ.
Опции:
URI ldap[s]://[имя-сервера[:порт]] ... (URI для доступа к LDAP серверу)
BASE DN-имя-корня
BINDDN DN-имя-привязки
HOST имя-сервера[:порт] ... (имя LDAP сервера; рекомендуется использовать URI)
PORT порт (порт LDAP сервера; рекомендуется использовать URI)
SIZELIMIT число (12 штук? максимально допустимый размер результатов поиска; 0 = 00)
TIMELIMIT число (15 секунд? максимально допустимое время поиска; 0 = 00)
DEREF never|searching|finding|always (finding - обработка ссылок только при поиске базового
объекта; searching - обработка ссылок только при поиске небазового объекта)
TLS_RANDFILE имя-файла (случайные биты, если недоступен /dev/[u]random)
TLS_REQCERT never|allow|try|demand|hard (deman; как проверять сертификат сервера;
never - не запрашивать; allow - запрашивать, но позволять неправильный или отсутствующий
сертификат; try - запрашивать, но допускать отсутствие сертификата;
demand или hard - требовать наличия правильного сертификата)
Настройки сервера (slapd(8)) в файле /etc/openldap/slapd.conf
(должен иметь права доступа root:ldap 640).
Модули схемы в каталоге /etc/openldap/schema (берутся командами include из slapd.conf).
Опции настройки:
allow bind_v2 (The Bat не умеет LDAPv3 :()
suffix "dc=company,dc=ru" (какие записи будут храниться в этой БД)
rootdn "cn=root,dc=company,dc=ru" (пользователь с правами на изменение БД)
rootpw {SSHA}... (хешированый SHA пароль - см. slappasswd(8))
Скрипт запуска сервера - /etc/rc.d/init.d/ldap (можно использовать стандартные команды chkconfig
и service, имя сервиса - ldap)
slurpd - сервер репликации.
Утилиты для работы с каталогом (slapadd, slapcat, slapd_db_*, slapdn, slapindex,
slaptest - проверка правильности конфигурационного файла slapd.conf).
Утилита slappasswd позволяет создавать
хеш пароля для дальнейшего использования в качестве значения атрибута userPassword
или опции rootpw файла slapd.conf. Параметры:
-v
-u (пока по умолчанию; создавать хеш для userPassword в формате, определённом RFC 2307)
-s пароль (если не задан здесь или с помощью ключа -T, то запрашивается в диалоге)
-c формат (формат как в sprintf(3) для преобразования случайной строки символов из диапазона
[A-Za-z0-9./]; например, "%.2s" даёт соль для стандартной функции crypt(3);
"$1$%.8s" приводит к использованию функцией crypt(3) алгоритма MD5, так что результат
можно использовать в /etc/shadow)
Утилиты для работы с файлами в формате LDIF (ldapadd, ldapsearch) и
доступа к каталогу (ldapcompare, ldapdelete, ldapmodify, ldapmodrdn, ldappasswd, ldapwhoami).
Редактируем slapd.conf для работы с несколькими доменами:
...
allow bind_v2
...
database bdb
suffix "dc=company1"
rootdn "cn=root,dc=company1"
rootpw {SSHA}хешированный-пароль
directory /var/lib/ldap-company1
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
...
Создаём объекты верхнего уровня для каждого домена:
cat << EOF | ldapadd -v -x -D 'cn=root,dc=company1' -W
dn: dc=company1
objectClass: top
objectClass: domain
#objectClass: dcObject
#objectClass: organization
dc: company1
o: название организации
description: дополнительная информация
l: местность (город)
st: область
street: улица и номер дома
postalCode: почтовый индекс
postalAddress: почтовый адрес
telephoneNumber: номер рабочего телефона
facsimileTelephoneNumber: номер факса
EOF
Создаём объекты ou=people для каждого домена:
cat << EOF | ldapadd -v -x -D 'cn=root,dc=company1' -W
dn: ou=people,dc=company1
objectClass: top
objectClass: organizationalUnit
ou: people
EOF
Можно разбить адресную книгу по подразделениям:
cat << EOF | ldapadd -v -x -D 'cn=root,dc=company1' -W
dn: ou=IT,ou=people,dc=company1
objectClass: top
objectClass: organizationalUnit
ou: IT
EOF
Создаём объекты для каждого сотрудника (значения атрибутов не наследуются):
cat << EOF | ldapadd -v -x -D 'cn=root,dc=company1' -W
dn: uid=vasiliy_pupkin,ou=people,dc=company1
uid: vasiliy_pupkin
cn: Пупкин Василий
sn: Пупкин
gn: Василий
initials: В.И.
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
#objectClass: residentialPerson
#objectClass: newPilotPerson
objectClass: userSecurityInformation
telephoneNumber: номер рабочего телефона
mobile: номер сотового телефона
homePhone: номер домашнего телефона
faximileTelephoneNumber: номер факса
mail: адрес электронной почты
description: дополнительная информация
title: название должности (номер комнаты)
departmentNumber: название отдела
ou: название отдела
physicalDeliveryOfficeName:
roomNumber:
employeeNumber:
employeeType: permanent
jpegPhoto:
o: название организации
street: улица и номер дома
streetAddress: улица и номер дома
l: местность (город)
st: регион
postalCode: почтовый индекс
postalAddress: почтовый адрес
postOfficeBox: почтовый адрес
EOF
Thunderbird использует LDAPv3. Добавление LDAP-сервера в адресную книгу:
выбрать в меню Address Book -> File -> New -> LDAP, настроить имя книги
, имя (адрес) хоста ,
DN базы (dc=company1 ). Результаты в prefs.js.
Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск
производится по мере ввода) по 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.
Mozilla имеет возможности расширенного поиска (например, по имени отдела и т.д.).
The Bat использует LDAPv2, делает поиск по cn и считывает следующий список атрибутов:
display-name, cn,
commonName, mail, otherMailbox, givenName, sn, surname, st, c, l, co, organizationName,
o, ou, organizationalUnitName, URL, homePhone, facsimileTelephoneNumber,
otherFacsimileTelephoneNumber, OfficeFax, mobile, otherPager, OfficePager, pager, info,
title, telephoneNumber, homePostalAddress, postalAddress, streetAddress, street,
department, comment, postalCode, physicalDeliveryOfficeName, initials, objectClass,
uid, uniqueIdentifier, userCertificate, userSMIMECertificate.
Outlook Express. Добавление LDAP-сервера в адресную книгу:
выбрать в меню Адрес -> Сервис -> Учётные записи -> Добавить.
Сервер каталогов: имя или адрес хоста. Затем изменить свойства (имя книги, основа поиска).
Поиск производится по нажатию кнопки "Поиск людей", вводу параметров и нажатию кнопки "Найти".
Предварительно опрашивается список возможносте сервера: 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.
gq представляет собой графический визуализатор каталогов LDAP и схем.
Имеется поиск и возможность внесения изменений.
После изменения параметров сервера необходимо перезапустить программу.
Довольно удобно.
RFC 1484. Using the OSI Directory to achieve User Friendly Naming (OSI-DS 24 (v1.2)) S. Hardcastle-Kille [ July 1993 ] ( TXT = 48974 bytes)(Obsoleted by RFC1781, RFC3494)
RFC 1485. A String Representation of Distinguished Names (OSI-DS 23 (v5)) S. Hardcastle-Kille [ July 1993 ] ( TXT = 11158 bytes)(Obsoleted by RFC1779, RFC3494)
RFC 1487. X.500 Lightweight Directory Access Protocol W. Yeong, T. Howes, S. Kille [ July 1993 ] ( TXT = 44947 bytes)(Obsoleted by RFC1777, RFC3494)
RFC 1488. The X.500 String Representation of Standard Attribute Syntaxes T. Howes, S. Kille, W. Yeong, C. Robbins [ July 1993 ] ( TXT = 17182 bytes)(Obsoleted by RFC1778)
RFC 1558. A String Representation of LDAP Search Filters T. Howes [ December 1993 ] ( TXT = 5239 bytes)(Obsoleted by RFC1960)
RFC 1777. Lightweight Directory Access Protocol W. Yeong, T. Howes, S. Kille [ March 1995 ] ( TXT = 45459 bytes)(Obsoletes RFC1487) (Obsoleted by RFC3494)
RFC 1778. The String Representation of Standard Attribute Syntaxes T. Howes, S. Kille, W. Yeong, C. Robbins [ March 1995 ] ( TXT = 19053 bytes)(Obsoletes RFC1488) (Obsoleted by RFC3494) (Updated by RFC2559)
RFC 1779. A String Representation of Distinguished Names S. Kille [ March 1995 ] ( TXT = 12429 bytes)(Obsoletes RFC1485) (Obsoleted by RFC2253, RFC3494)
RFC 1781. Using the OSI Directory to Achieve User Friendly Naming S. Kille [ March 1995 ] ( TXT = 47129 bytes)(Obsoletes RFC1484) (Obsoleted by RFC3494)
RFC 1798. Connection-less Lightweight X.500 Directory Access Protocol A. Young [ June 1995 ] ( TXT = 18548 bytes)(Obsoleted by RFC3352)
RFC 1959. An LDAP URL Format T. Howes, M. Smith [ June 1996 ] ( TXT = 7243 bytes)(Obsoleted by RFC2255)
RFC 1960. A String Representation of LDAP Search Filters T. Howes [ June 1996 ] ( TXT = 5288 bytes)(Obsoletes RFC1558) (Obsoleted by RFC2254)
RFC 2247. Using Domains in LDAP/X.500 Distinguished Names S. Kille, M. Wahl, A. Grimstad, R. Huber, S. Sataluri [ January 1998 ] ( TXT = 12411 bytes)
RFC 2251. Lightweight Directory Access Protocol (v3) M. Wahl, T. Howes, S. Kille [ December 1997 ] ( TXT = 114488 bytes)(Updated by RFC3377, RFC3771)
RFC 2252. Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions M. Wahl, A. Coulbeck, T. Howes, S. Kille [ December 1997 ] ( TXT = 60204 bytes)(Updated by RFC3377)
RFC 2253. Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names M. Wahl, S. Kille, T. Howes [ December 1997 ] ( TXT = 18226 bytes)(Obsoletes RFC1779) (Updated by RFC3377)
RFC 2254. The String Representation of LDAP Search Filters T. Howes [ December 1997 ] ( TXT = 13511 bytes)(Obsoletes RFC1960) (Updated by RFC3377)
RFC 2255. The LDAP URL Format T. Howes, M. Smith [ December 1997 ] ( TXT = 20685 bytes)(Obsoletes RFC1959) (Updated by RFC3377)
RFC 2559. Internet X.509 Public Key Infrastructure Operational Protocols - LDAPv2 S. Boeyen, T. Howes, P. Richard [ April 1999 ] ( TXT = 22889 bytes)(Obsoleted by RFC3494) (Updates RFC1778)
RFC 2589. Lightweight Directory Access Protocol (v3): Extensions for Dynamic Directory Services Y. Yaacovi, M. Wahl, T. Genovese [ May 1999 ] ( TXT = 26855 bytes)
RFC 2596. Use of Language Codes in LDAP M. Wahl, T. Howes [ May 1999 ] ( TXT = 17413 bytes)(Obsoleted by RFC3866)
RFC 2798. Definition of the inetOrgPerson LDAP Object Class M. Smith [ April 2000 ] ( TXT = 32929 bytes)(Updated by RFC3698)
RFC 2829. Authentication Methods for LDAP M. Wahl, H. Alvestrand, J. Hodges, R. Morgan [ May 2000 ] ( TXT = 33471 bytes)(Updated by RFC3377)
RFC 2830. Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security J. Hodges, R. Morgan, M. Wahl [ May 2000 ] ( TXT = 24469 bytes)(Updated by RFC3377)
RFC 2849. The LDAP Data Interchange Format (LDIF) - Technical Specification G. Good [ June 2000 ] ( TXT = 26017 bytes)
RFC 3296. Named Subordinate References in Lightweight Directory Access Protocol (LDAP) Directories K. Zeilenga [ July 2002 ] ( TXT = 27389 bytes)
RFC 3352. Connection-less Lightweight Directory Access Protocol (CLDAP) to Historic Status K. Zeilenga [ March 2003 ] ( TXT = 7265 bytes)(Obsoletes RFC1798)
RFC 3377. Lightweight Directory Access Protocol (v3): Technical Specification J. Hodges, R. Morgan [ September 2002 ] ( TXT = 9981 bytes)(Updates RFC2251, RFC2252, RFC2253, RFC2254, RFC2255, RFC2256, RFC2829, RFC2830)
RFC 3383. Internet Assigned Numbers Authority (IANA) Considerations for the Lightweight Directory Access Protocol (LDAP) K. Zeilenga [ September 2002 ] ( TXT = 45893 bytes)(Also BCP64)
RFC 3384. Lightweight Directory Access Protocol (version 3) Replication Requirements E. Stokes, R. Weiser, R. Moats, R. Huber [ October 2002 ] ( TXT = 66871 bytes)
RFC 3494. Lightweight Directory Access Protocol version 2 (LDAPv2) to Historic Status K. Zeilenga [ March 2003 ] ( TXT = 9225 bytes)(Obsoletes RFC1484, RFC1485, RFC1487, RFC1777, RFC1778, RFC1779, RFC1781, RFC2559)
RFC 3663. Domain Administrative Data in Lightweight Directory Access Protocol (LDAP) A. Newton [ December 2003 ] ( TXT = 42260 bytes)
RFC 3671. Collective Attributes in the Lightweight Directory Access Protocol (LDAP) K. Zeilenga [ December 2003 ] ( TXT = 17912 bytes)
RFC 3672. Subentries in the Lightweight Directory Access Protocol (LDAP) K. Zeilenga [ December 2003 ] ( TXT = 24447 bytes)
RFC 3673. Lightweight Directory Access Protocol version 3 (LDAPv3): All Operational Attributes K. Zeilenga [ December 2003 ] ( TXT = 10003 bytes)
RFC 3674. Feature Discovery in Lightweight Directory Access Protocol (LDAP) K. Zeilenga [ December 2003 ] ( TXT = 10282 bytes)
RFC 3687. Lightweight Directory Access Protocol (LDAP) and X.500 Component Matching Rules S. Legg [ February 2004 ] ( TXT = 96256 bytes)
RFC 3703. Policy Core Lightweight Directory Access Protocol (LDAP) Schema J. Strassner, B. Moore, R. Moats, E. Ellesson [ February 2004 ] ( TXT = 142983 bytes)(Updated by RFC4104)
RFC 3712. Lightweight Directory Access Protocol (LDAP): Schema for Printer Services P. Fleming, I. McDonald [ February 2004 ] ( TXT = 62301 bytes)
RFC 3771. The Lightweight Directory Access Protocol (LDAP) Intermediate Response Message R. Harrison, K. Zeilenga [ April 2004 ] ( TXT = 17114 bytes)(Updates RFC2251)
RFC 3829. Lightweight Directory Access Protocol (LDAP) Authorization Identity Request and Response Controls R. Weltman, M. Smith, M. Wahl [ July 2004 ] ( TXT = 11986 bytes)
RFC 3866. Language Tags and Ranges in the Lightweight Directory Access Protocol (LDAP) K. Zeilenga, Ed. [ July 2004 ] ( TXT = 31501 bytes)(Obsoletes RFC2596)
RFC 3876. Returning Matched Values with the Lightweight Directory Access Protocol version 3 (LDAPv3) D. Chadwick, S. Mullan [ September 2004 ] ( TXT = 24233 bytes)
RFC 3909. Lightweight Directory Access Protocol (LDAP) Cancel Operation K. Zeilenga [ October 2004 ] ( TXT = 13423 bytes)
RFC 3928. Lightweight Directory Access Protocol (LDAP) Client Update Protocol (LCUP) R. Megginson, Ed., M. Smith, O. Natkovich, J. Parham [ October 2004 ] ( TXT = 36892 bytes)
RFC 4104. Policy Core Extension Lightweight Directory Access Protocol Schema (PCELS) M. Pana, Ed., A. Reyes, A. Barba, D. Moron, M. Brunner [ June 2005 ] (TXT = 190951 bytes)(Updates RFC3703)
RFC 4370. Lightweight Directory Access Protocol (LDAP) Proxied Authorization Control R. Weltman [ February 2006 ] (TXT = 10624 bytes)
RFC 4373. Lightweight Directory Access Protocol (LDAP) Bulk Update/Replication Protocol (LBURP) R. Harrison, J. Sermersheim, Y. Dong [ January 2006 ] (TXT = 31091 bytes)
RFC 4403. Lightweight Directory Access Protocol (LDAP) Schema for Universal Description, Discovery, and Integration version 3 (UDDIv3) B. Bergeson, K. Boogert, V. Nanjundaswamy [ February 2006 ] (TXT = 78747 bytes)