OpenLDAP Сервер HowTo

OpenLDAP Сервер

 0.1 Введение

LDAP — это Lightweight Directory Access Protocol, и является упрощенной версией протокола X.500. Применяется, для централизованной аунтификации пользователей, хранении адресных книг и др.

Проще говоря, вся информация в LDAP хранится в виде дерева. Структуру дерева определяет администратор сам. Мы начнем с основного дерева, содержащего два узла ниже корня:

  • «People» узел для хранения пользователей
    «Groups» узел для хранения груп
  • Перед началом установки надо определиться с корнем этого дерева. Допустим это будет example.com. Тогда корневой узел дерева LDAP будет dc=example,dc=com.

    1 Установка

    Надо установить OpenLDAP сервер Slapd, LDAP-утилиты и пакет, содержащий LDAP утилиты управления:

    
    
    sudo apt-get install slapd ldap-utils

    По умолчанию slapd настроен с минимальными опциями, необходимые для запуска демона. В отличии от старых версий OpenLDAP, конфигурация сервера теперь перенесена непосредственно в дерево LDAP! Хотя можно и воспользоваться старым способом конфигурации, но это не желательно по ряду причин.

    vi /etc/ldap/ldap.conf
    
    
    BASE dc=example,dc=com
    URI ldap://192.168.1.8/

    2 Заполнение LDAP

    Как сказано выше, OpenLDAP использует отдельный каталог, который содержит cn=config и используется для динамического конфигурирования Slapd демона, позволяя применять любые модификации определения схемы, указатели, списки управления доступом и т.д. без остановки сервиса!

    Директория cn=config имеет только минимальную конфигурацию и будет нуждаться в дополнительных опциях конфигурации для того, чтобы заполнить интерфейс каталога тем, что нам понадобится. Интерфейс будет заполнен по «классической» схеме, которая будет совместима с приложениями, адресной книгой и с Unix Posix эккаунтами. Posix эккаунты позволят проводить аутентификации для различных приложений, таких как веб-приложения, электронная почта Mail Transfer Agent (MTA), jabber приложения и т.д.

    В приложениях, использующих LDAP аунтификацию незабудьте настроить конфигурацию, которая должна соответствовать вашему серверу! В нашем примере это

    dc=example,dc=com

    Теперь приступим к настройке нашего сервера. В начале загрузим дополнительные файлы схемы:

    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

    Далее, скопируйте файл LDIF, например, назвав его backend.example.com.ldif , где-то в вашей системе:

    
    
    # Load dynamic backend modules
    dn:
    cn=module,cn=config
    objectClass: olcModuleList
    cn: module
    olcModulepath: /usr/lib/ldap
    olcModuleload: back_hdb

    # Database settings
    dn: olcDatabase=hdb,cn=config
    objectClass: olcDatabaseConfig
    objectClass: olcHdbConfig
    olcDatabase: {1}hdb
    olcSuffix: dc=example,dc=com
    olcDbDirectory: /var/lib/ldap
    olcRootDN: cn=admin,dc=example,dc=com
    olcRootPW: secret
    olcDbConfig: set_cachesize 0 2097152 0
    olcDbConfig: set_lk_max_objects 1500
    olcDbConfig: set_lk_max_locks 1500
    olcDbConfig: set_lk_max_lockers 1500
    olcDbIndex: objectClass eq
    olcLastMod: TRUE
    olcDbCheckpoint: 512 30
    olcAccess: to attrs=userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
    olcAccess: to attrs=shadowLastChange by self write by * read olcAccess: to dn.base="" by * read
    olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read

    Не забудьте изменить значение olcRootPW на тот пароль, который вы выберите.

    Теперь добавьте LDIF в каталог:

    
    
    sudo ldapadd -Y EXTERNAL -H ldapi:/// -f backend.example.com.ldif

    Интерфейс каталога готов к заполнению. Создать frontend.example.com.ldif со следующим содержимым:

    
    
    # Create top-level object in domain

    dn: dc=example,dc=com
    objectClass: top
    objectClass: dcObject
    objectclass: organization
    o: Example Organization
    dc: Example
    description: LDAP Example

    # Admin user.
    dn: cn=admin,dc=example,dc=com
    objectClass: simpleSecurityObject
    objectClass: organizationalRole
    cn: admin
    description: LDAP administrator
    userPassword: secret
    dn: ou=people,dc=example,dc=com
    objectClass: organizationalUnit
    ou: people
    dn: ou=groups,dc=example,dc=com
    objectClass: organizationalUnit
    ou: groups
    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: 1000
    gidNumber: 10000
    userPassword: password
    gecos: John Doe
    loginShell: /bin/bash
    homeDirectory: /home/john
    shadowExpire: -1
    shadowFlag: 0
    shadowWarning: 7
    shadowMin: 8
    shadowMax: 999999
    shadowLastChange: 10877
    mail: john.doe@example.com
    postalCode: 31000
    l: Toulouse
    o: Example
    mobile: +33 (0)6 910 326 59 29
    homePhone: +33 (0)5 495 33 44 33
    title: System Administrator
    postalAddress:
    initials: JD
    dn: cn=example,ou=groups,dc=example,dc=com
    objectClass: posixGroup
    cn: example
    gidNumber: 10000

    В этом примере структура каталога, пользователя и группы были как “setup”. В других примерах можно увидеть objectClass: top добавляется в каждую запись, но это поведение по умолчанию, так что вы не должны добавлять его явно.

    Добавим записи в LDAP-каталоге:

    
    
    sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f frontend.example.com.ldif

    Проверить можно с помощью ldapsearch:

    
    
    ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn
    dn: uid=john,ou=people,dc=example,dc=com
    cn: John Doe
    sn: Doe
    givenName: John

    где:

  • -Х: не будет использовать SASL метод аутентификации, который используется по умолчанию.
    -LLL: запретить печать LDIF информационной схемы.
  • 3 Дальнейшая настройка

    Конфигурационную директорию cn=config — можно настраивать с помощью утилит из пакета Ldap-Utils:

    Использование ldapsearch применяется: для просмотра дерева, вода пароля админа во время установки, или изменения настроек:

    sudo ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn

    вывод:

    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0
    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: olcDatabase={-1}frontend,cn=config
    dn: olcDatabase={0}config,cn=config
    dn: olcDatabase={1}hdb,cn=config

    В качестве примера изменения конфигурации CN = config, добавим еще один атрибут, используя ldapmodify :

    
    
    sudo ldapmodify -Y EXTERNAL -H ldapi:///

    вывод:

    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0 dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex olcDbIndex: uidNumber eq
    modifying entry "olcDatabase={1}hdb,cn=config"

    После того как модификация закончится, нажмите Ctrl+D для выхода.
    ldapmodify также можете прочитать изменений из файла. Скопируйте и вставьте следующий код в файл с именем uid_index.ldif :

    dn: olcDatabase={1}hdb,cn=config
    add: olcDbIndex
    olcDbIndex: uid eq,pres,sub

    Затем выполните ldapmodify :

    
    
    sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f uid_index.ldif

    вывод:

    
    
    SASL/EXTERNAL authentication started
    SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
    SASL SSF: 0

    modifying entry «olcDatabase={1}hdb,cn=config»

    Использовать ldif файлы удобно для больших изменений. На пример для добавления схемы в дерево, эту схему необходимо преобразовать в ldif.

    В следующем примере добавим схему “dyngroup.schema” :

    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

    2 — Создадим темпоральный каталог для хранения вывода

    
    
    mkdir /tmp/ldif_output

    3- Теперь, используя slapcat конвертировать файлы схем в LDIF:

    
    
    slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s "cn={5}dyngroup,cn=schema,cn=config" > /tmp/cn=dyngroup.ldif\

    Настройте имя файла конфигурации и временные имена каталогов. Возможно, есть смысл держать ldif_output каталог на случай, если вы хотите добавить дополнительные схемы в будущем.

    «CN = {5}» индекс может меняться в зависимости от конфигурации нужной вам схемы. Чтобы узнать правильный номер выполнить следующее:

    
    
    slapcat -f schema_convert.conf -F /tmp/ldif_output -n 0 | grep dyngroup

    Замените dyngroup с соответствующим именем схемы.

    Запись опубликована в рубрике Debian, Ldap, Linux. Добавьте в закладки постоянную ссылку.

    Один комментарий на «OpenLDAP Сервер HowTo»

    1. Уведомление: LDAP+SAMBA | Linux

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Анти-спам: выполните заданиеWordPress CAPTCHA