3.1.1 Перед тем как начать — Ubuntu Linux

После установки OpenLDAP в Ubuntu он, согласно философии этой системы, должен быть пригоден к использованию, то есть сразу быть готовым принимать и обслуживать запросы клиентов. Для этого он должен, как минимум, быть запущен, а значит должна быть какая-то начальная конфигурация. И она, естественно, есть, причём сразу же, "из коробки", это динамическая конфигурация cn=config. Разумеется, возникает она не из воздуха, LDIF инициализации можно найти в файле /usr/share/slapd/slapd.init.ldif:

# Global config:
dn: cn=config
objectClass: olcGlobal
cn: config
# Where the pid file is put. The init.d script
# will not stop the server if you change this.
olcPidFile: /var/run/slapd/slapd.pid
# List of arguments that were passed to the server
olcArgsFile: /var/run/slapd/slapd.args
# Read slapd.conf(5) for possible values
olcLogLevel: none
# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
lcToolThreads: 1

# Frontend settings
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
# The maximum number of entries that is returned for a search operation
olcSizeLimit: 500
# Allow unlimited access to local connection from the local root user
olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to dn.base="cn=subschema" by * read

# Config db settings
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
# Allow unlimited access to local connection from the local root user
olcAccess: to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break

# Load schemas
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema

include: file:///etc/ldap/schema/core.ldif

Конфигурация, что ни на есть, базовая, остальное — на усмотрение администратора. Самый главный вопрос: как же подключиться к такой службе каталогов, не зная ни DN подключения, ни пароля? В Ubuntu (и некоторых других системах) применяется оригинальный подход, когда для подключения к cn=config используется нестандартный интерфейс ldapi:///, а для аутентификации — механизм SASL-аутентификации EXTERNAL вместо простой парольной аутентификации. Обратите внимание на строку 33 приведённого выше LDIF: в ней предоставляется доступ на управление каталогом cn=config пользователю Unix-системы с uid и gid равными нулю, то есть пользователю root. Таким образом, пользователь root, выполнив однажды аутентификацию в системе, получает сквозной беспарольный доступ на редактирование каталога cn=config. Именно поэтому в ориентированных на Ubuntu HOWTO по OpenLDAP везде фигурируют вызовы такого плана:

# ldapmodify -H ldapi:/// -Y EXTERNAL -f /some/file.ldif

Спорить о преимуществах и недостатках такого подхода можно долго. Если он Вас устраивает, можете миновать стадию инициализации каталога cn=config и сразу переходить к работе с модулями, не забывая в дальнейшем указывать в вызовах ldapadd и ldapmodify соответствующие параметры.

Если же, как и было задумано, мы будем инициализировать cn=config с "нуля" и работать с парольной аутентификацией, нам нужно привести slapd в "исходное" состояние. Для этого остановим slapd и переместим (точнее, переименуем) директорию с его настройками:

# service slapd stop
Stopping OpenLDAP: slapd.
# mv /etc/ldap/slapd.d /etc/ldap/slapd.d.init-ubuntu

В принципе, этого достаточно. Но, чтобы уж совсем было красиво, мы можем отключить "лишние" интерфейсы, на которых slapd будет ожидать подключения. Для этого в файле /etc/default/slapd заменим значение переменной SLAPD_SERVICES с "ldap:/// ldapi:///" на "ldap:///" (ожидание подключений на всех сетевых интерфейсах на стандартном порту 389):

#SLAPD_SERVICES="ldap:/// ldapi:///"
SLAPD_SERVICES="ldap:///"

Всё, можно приступать к инициализации каталога cn=config

Pro-LDAP.ru 2013-2014 г. Последнее изменение страницы — 04 апреля 2014 г. Вопросы и предложения принимаются на форуме проекта.