После установки 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