|
Bog BOS: LDAP и OpenLDAP |
Последние изменения: |
Последнее изменение файла: 2016.05.10
Скопировано с www.bog.pp.ru: 2024.11.23
Протокол LDAP (Lightweight Directory Access Protocol, упрощённый протокол службы каталогов) является развитием (упрощением и адаптацией к TCP/IP) стандарта ISO/ITU X.500 (DAP, 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; RFC 4511). LDAPv3 предусматривает возможность сортировки информации, разбиения на страницы, расширяемые операции, хранение схемы в каталоге, поддержку интернационализации для имён объектов и значений атрибутов, использование SASL для расширения методов аутентификации, возврат ссылки на другой сервер.
Сервер LDAP представляет средства доступа к логически иерархической БД (реальное хранилище может быть реализовано по другому) клиентам LDAP. Каталог (БД) состоит из записей (объектов, entry). Тип объекта (класс, objectclass) определяется набором атрибутов: имя (регистронезависимо), синонимы, тип значения (синтаксис указывается с помощью OID из RFC 2252), обязательность, возможность объекта иметь несколько атрибутов с данным именем, правила сравнения, поиска подстроки и упорядочивания. Имя класса также является атрибутом объекта. Строки записываются в кодировке UTF-8. Объект может ассоциироваться с несколькими классами. Классы могут быть структурными (structural, расширение другого класса в пределах дерева наследования, начиная от класса Top), вспомогательными (auxiliary) и абстрактными (abstract, их можно только наследовать, но нельзя использовать непосредственно; например, класс Top является абстактным). Классу назначается уникальный иерархический идентификатор объекта (object identifier, OID, требуется регистрировать в IANA). Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров), псевдонимы (символьные ссылки), переадресация клиента к другому каталогу (переход по ссылкам, chasing referrals). Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога. Правила связывания определяются набором правил, который называется схемой каталога (в схему входят также описания классов). Дерево начинается от корневого объекта (Root, класс Top в Active Directory). Поиск объекта в иерархии производится с помощью составного имени. Каждый объект имеет относительное отличительное имя (Relative Distinguished Name). Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего уровня (порядок записи - от младшего к старшему, разделитель - точка). Может быть только один объект с указанным DN. RDN уникален на своём уровне. Корневой DN определяет пространство имён дерева (namespace, Directory Information Tree, DIT). LDAP сервер (DSA, Directory System Agent) может обслуживать несколько пространств имён (соответственно, иметь несколько корней). Их список приводится в Root DSE (DSA-Specific Entry). Имеется несколько традиционных способов выстраивания иерархии: по доменному имени (компоненты доменного имени записываются от младшего к старшему - "dc=company,dc=com"), по географической иерархии (o=company,l=moscow,st=moscow,c=ru) и локальное (dc=company). Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=). Имеется выделенный администратор каталога, обладающий корневыми полномочиями. Для аутентификации используется расширяемый механизм SASL. Имеется возможность анонимного доступа. Права доступа - чтение, запись. ACL не стандартизованы. Поддерживается репликация. Хранение БД LDAP оптимизируют для операций чтения. Транзакций нет.
Общие имена атрибутов:
Полезные классы:
Клиент может:
Стандартный TCP порт сервера LDAP - 389 (возможность использования протокола UDP зарезервирована, но не используется). Для шифрования может использоваться TLS (SSL) (порт 636).
LDIF (LDAP Data Interchange Format, RFC 2849) - стандарт на экспорт каталога в текстовый файл с целью дальнейшего импорта файла на другой сервер. Описания объектов также разделяются пустой строкой. Текстовый файл в каждой строке содержит имя и значение одного атрибута. Если атрибут имеет несколько значений, то они записываются на нескольких строчках. Имя атрибута 'dn' используется для задания DN имени объекта. Имя атрибута objectClass используется для определения класса (типа) объекта. Имя атрибута отделяется от значения строкой ': ' (значение в кодировке UTF-8), строкой ':: ' (значение в кодировке base64), строкой ':< ' (указывается URI, по которому находится значение; обычно file:///...). Строки, начинающиеся с '#', являются комментариями. Продолжение строки обозначается пробелом или табуляцией в первой позиции следующей строки. Формат LDIF позволяет изменять объекты с помощью псевдоатрибута changetype и его значений (каждое изменение завершается символом "-" вместо пустой строки):
Разрабатывается OpenLDAP Foundation. Лицензия своя (BSD-like). Стабильная версия - 2.3.39 (20071118); RHEL 4.5 - версия 2.2.13; RHEL 5 - 2.3.43; RHEL 6 - 2.4.23. Пакеты - openldap, openldap-devel, openldap-clients, openldap-servers (openldap-servers-overlays, openldap-servers-sql). В качестве внутреннего хранилища используется 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. Опции:
Опции SASL аутентификации:
Опции TLS:
Настройки сервера (документация в /usr/share/doc/openldap-servers-2.3.43/guide.html и slapd.8) в файле /etc/openldap/slapd.conf (должен иметь права доступа root:ldap 640). Опции (комментарий начинается с '#'; начинающаяся с пробела строка является продолжением):
Модули схемы находятся в каталоге /etc/openldap/schema (берутся командами include из slapd.conf). Сертификат SSL/TLS - /etc/pki/tls/certs/slapd.pem.
Параметры запуска сервера (можно задать в /etc/sysconfig/ldap с помощью переменных окружения SLAPD_OPTIONS, SLURPD_OPTIONS, SLAPD_LDAPS, SLAPD_LDAPI; сервис ldap в /etc/init.d/ldap; эффективный пользователь ldap):
Скрипт запуска сервера - /etc/rc.d/init.d/ldap (можно использовать стандартные команды chkconfig и service, имя сервиса - ldap)
slurpd - сервер репликации.
Утилиты для работы с каталогом
Утилита slappasswd позволяет создавать хеш пароля для дальнейшего использования в качестве значения атрибута userPassword или опции rootpw файла slapd.conf. Параметры:
Клиентские утилиты для работы с файлами в формате LDIF и доступа к каталогу:
Модуль аутентификации для SASL (cyrus-sasl-ldap).
Редактируем 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
Для редактирования можно использовать LDAPTLS_CACERT=файл gq.
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 и схем. Имеется поиск и возможность внесения изменений. После изменения параметров сервера необходимо перезапустить программу. Довольно удобно. Отсутствует в новых дистрибутивах.
lbe представляет собой графический визуализатор каталогов LDAP. Имеется поиск и возможность внесения изменений. Отсутствует в новых дистрибутивах.
Терминальный интерактивный LDAP клиент. Позволяет сделать запрос к LDAP-серверу, отредактировать (vi) результат и отослать обратно:
если имеются общесистемные настройки ldap клиентов: ldapvi -D 'cn=root,dc=имя-домена' '(uid=имя-пользователя)' если ldap клиент не настроен: LDAPTLS_CACERT=имя-файла ldapvi --host имя-хоста --user cn=root,dc=имя-домена --bind simple --base dc=имя-домена --starttls --tls strict
Directory administrator is a smart LDAP directory management tool. It can be used to manage UNIX and SAMBA user accounts and groups in a single sign-on setup, corporate address book information, host-based access control and advanced mail routing. It's extremely easy to install and use, yet powerful at the same time. Along with popular software, it's the preferred solution for single sign-on maintenance. cpu.i386 1.4.3-0.1.fc3.rf dag Matched from: CPU is an LDAP user management tool written in C and loosely based on FreeBSD's pw(8). The goal of CPU is to be a suitable replacement of the useradd/usermod/userdel utilities for administrators using an LDAP backend and wishing to have a suite of command line tools for doing the administration. lat-1.2.3-4.fc10.x86_64 - MONO URL : http://dev.mmgsecurity.com/projects/lat/ Summary : LDAP Administration Tool Description : LAT stands for LDAP Administration Tool. The tool allows you to browse LDAP-based directories and add/edit/delete entries contained within. It can store profiles for quick access to different servers. There are also different views available such as Users, Groups and Hosts that allow you to manage objects easily without having to deal with the intricacies of LDAP.
LDAP можно использовать при выборе сервисов имён с помощью NSS и аутентификации с помощью PAM (пакет nss_ldap, nss_ldap.5, pam_ldap.5).
Запись пользователя должна иметь класс posixAccount с заполненными атрибутами uid, cn, loginShell, uidNumber, gidNumber, homeDirectory и gecos.
Необходимо завести специального пользователя для чтения шифрованных паролей (предлагается proxyuser)
cat << EOF | ldapadd -v -x -D 'cn=root,dc=company1' -W dn: cn=proxyuser,dc=company1 cn: proxyuser sn: proxyuser objectclass: top objectclass: person userPassword: результат-slappasswd EOF
Права доступа в slapd.conf
access to attrs=userPassword by self write by anonymous auth by dn="cn=proxyuser,dc=имя" read # если мы хотим, чтобы пользователи могли менять себе пароль (ставить выше правила для root!) # by dn="cn=proxyuser,dc=имя" write by dn="cn=root,dc=имя" write by * none access to * by dn="cn=root,dc=имя" write by * read
Скрипты миграции (/usr/share/openldap/migration из пакета openldap-servers) помогают перейти от хранения информации о пользователях, группах, переадресации почты и пр. в текстовых файлах (/etc/groups, /etc/passwd и др.) к хранению её в LDAP. Процесс миграции:
(cat общий файл; echo; cat группы.ldif; echo; cat пользователи.ldif) | cat -s | \ LDAPTLS_CACERT=/etc/openldap/cacerts/ca.crt ldapadd -v -x -D 'cn=root,dc=company1' -W
# пароль не должен быть показан LDAPTLS_CACERT=/etc/openldap/cacerts/ca.crt ldapsearch -LL -H ldap://имя-сервера \ -b"dc=company1" -x "(uid=имя-пользователя)" -ZZ # пароль должен быть показан (в зашифрованном виде) LDAPTLS_CACERT=/etc/openldap/cacerts/ca.crt ldapsearch -LL -H ldap://имя-сервера \ -b"dc=company1" -x "(uid=имя-пользователя)" -D "cn=root,dc=company1" -W -ZZ # пароль должен быть показан (в зашифрованном виде) LDAPTLS_CACERT=/etc/openldap/cacerts/ca.crt ldapsearch -LL -H ldap://имя-сервера \ -b"dc=company1" -x "(uid=имя-пользователя)" -D "uid=имя-пользователя,ou=People,dc=company1" -W -ZZ
В CentOS 7.1 почти всё работает сразу после (добавить "enumerate = true" в секцию "[domain/default]" файла /etc/sssd/sssd.conf)
authconfig - -enableshadow - -passalgo=sha512 - -enableldap - -enableldapauth - -enableldaptls - -ldaploadcacert=ftp://ftp.cs.niisi.ras.ru/pub/local/ca.crt - -ldapserver=ldap.cs.niisi.ras.ru - -ldapbasedn=dc=ORVS - -enablecache - -enablesssd - -enablesssdauth - -enablecachecreds - -enablelocauthorize
В прочих надо помучиться.
Разложить /etc/openldap/cacerts/ca.crt.
Конфигурационный файл на клиентских хостах для обращения к серверу LDAP - /etc/openldap/ldap.conf
Пароль proxyuser в /etc/ldap.secret, mode 0600.
Конфигурационный файл на клиентских хостах (не для CentOS6! Там есть упомянутые выше /etc/openldap/ldap.conf и ниже /etc/nslcd.conf (/etc/pam_ldap.conf)) для обращения к серверу LDAP для NSS и PAM - /etc/ldap.conf. В нём надо настроить параметры
Для sssd настроить /etc/sssd/sssd.conf (root:root 0600) и запустить службу sssd (service и chkconfig) (как-то здесь обходится без proxyuser, в /etc/ssh/sshd_config необходимо "UsePAM yes"):
[sssd] config_file_version = 2 services = nss, pam domains = default [nss] filter_groups = root filter_users = root [pam] [domain/default] auth_provider = ldap ldap_id_use_start_tls = False chpass_provider = ldap cache_credentials = True ldap_search_base = dc=компания id_provider = ldap ldap_uri = ldaps://имя-сервера/ ldap_tls_cacert = /etc/openldap/cacerts/ca.crt # положить файл сюда! enumerate = true # замедляет работу, но без него не работает "getent passwd"
В CentOS6 /etc/ldap.conf (/etc/openldap/ldap.conf) переехал в /etc/nslcd.conf (/etc/pam_ldap.conf).
authconfig-tui корёжит /etc/ldap.conf и /etc/nsswitch.conf, так что настроить вручную на клиентских хостах
auth sufficient pam_ldap.so use_first_pass ... account sufficient pam_localuser.so account [default=bad success=ok user_unknown=ignore] pam_ldap.so ... password sufficient pam_ldap.so use_authtok ... session optional pam_ldap.so
В CentOS6 пытается найти /etc/pam_ldap.secret вместо /etc/ldap.secret.
Возможно, что после перехода на LDAP придётся перезапустить некоторые службы, например, gdm, crond и sge_execd.
Использование LDAP в exim
Cyrus-IMAP должен подхватывать LDAP автоматически при использовании saslauthd в режиме pam (после перехода необходимо перезапустить saslauthd). Однако на одном из хостов столкнулся с тем, что эта связка работает, если запускать "saslauthd -a pam -m /var/run/saslauthd" вручную (или через cron), но не работает если запускать через service или rc.local. Этот забавный эффект получился в результате работы SELinux: рассылал /etc/ldap.conf командой scp без сохранения контекста безопасности, напустить "restorecon -rvv" на /etc.
Сервер jabber настроен на использование PAM и настраивается на использование LDAP автоматически.
Теперь можно почистить /etc/passwd, /etc/shadow и /etc/group. Проверить результат можно с помощью "getent passwd" (не работает в CentOS6).
При большой нагрузке необходимо добавить в /etc/sysconfig/ldap
ULIMIT_SETTINGS="-n 4096"
LDAP клиент phpLDAPadmin (пакет phpldapadmin 1.0.1) для apache позволяет просматривать и изменять данные LDAP сервера. Есть русский интерфейс.
Настройка соединения с LDAP сервером в /etc/phpldapadmin/config.php: (пароль шифрования кук, язык, ограничения на поиск, имя сервера LDAP, URI сервера LDAP, порт, базовый DN, метод авторизации (где хранить пароль доступа к серверу LDAP), использовать ли STARTTLS и SASL, метод хеширования пароля в userPassword, правила привязывания при обращении к LDAP).
Настройки Apache в /etc/httpd/conf.d/phpldapadmin.conf и по аналогии в /etc/httpd/conf.d/ssl.conf.
Потребовалось поставить "TLS_REQCERT never" в /etc/openldap/ldap.conf (TLS_CACERTDIR и TLS_CACERTFILE не воспринимаются).
При смене пароля необходимо выбирать md5crypt.
Fedora Directory Server (aka Red Hat Directory Server, aka 389 server) |
В 2005 году фирма Red Hat приобрела Netscape Directory Server и выпустала его открытую часть под названием Red Hat Directory Server. После переписывания закрытых частей был выпущен Fedora Directory Server, затем переименованный в 389 Directory Server (389-ds-base, 389-ds, 389-adminutil). Позднее из Fedora Directory Server получился Red Hat Directory Server 8.0 (известен также как CentOS Directory Server: centos-ds-base, centos-ds, adminutil). Fedora Directory Server послужил основой freeIPA.
|
Bog BOS: LDAP и OpenLDAP |
Последние изменения: |