После установки OpenLDAP в Ubuntu он, согласно философии этой системы, должен быть пригоден к использованию, то есть сразу быть готовым принимать и обслуживать запросы клиентов. Для этого он должен, как минимум, быть запущен, а значит должна быть какая-то начальная конфигурация. И она, естественно, есть, причём сразу же, "из коробки", это динамическая конфигурация cn=config. Разумеется, возникает она не из воздуха, LDIF инициализации можно найти в файле /usr/share/slapd/slapd.init.ldif:
# Global config:dn: cn=configobjectClass: olcGlobalcn: 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 serverolcArgsFile: /var/run/slapd/slapd.args# Read slapd.conf(5) for possible valuesolcLogLevel: none# The tool-threads parameter sets the actual amount of cpu's that is used# for indexing.lcToolThreads: 1# Frontend settingsdn: olcDatabase={-1}frontend,cn=configobjectClass: olcDatabaseConfigobjectClass: olcFrontendConfigolcDatabase: {-1}frontend# The maximum number of entries that is returned for a search operationolcSizeLimit: 500# Allow unlimited access to local connection from the local root userolcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * breakolcAccess: {1}to dn.base="" by * readolcAccess: {2}to dn.base="cn=subschema" by * read# Config db settingsdn: olcDatabase=config,cn=configobjectClass: olcDatabaseConfigolcDatabase: config# Allow unlimited access to local connection from the local root userolcAccess: to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth manage by * break# Load schemasdn: cn=schema,cn=configobjectClass: olcSchemaConfigcn: schemainclude: 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