FreeBSD: установка OpenLDAP сервера

Автор: | 19/10/2013

openldap_logoУстановка будет выполняться на систему:

# uname -r
9.2-RELEASE

Выполняем поиск:

# cd /usr/ports/ && make search name='openldap-server'
Port:   openldap-server-2.4.36_2
Path:   /usr/ports/net/openldap24-server
Info:   Open source LDAP server implementation
Maint:  [email protected]
B-deps: db46-4.6.21.4 libltdl-2.4.2_2 libtool-2.4.2_2 openldap-client-2.4.36
R-deps: db46-4.6.21.4 libltdl-2.4.2_2 openldap-client-2.4.36
WWW:    http://www.OpenLDAP.org/

Приступаем к конфигурированию и установке

# cd /usr/ports/net/openldap24-server/
# make config-recursive
# make install clean

В окне конфигурации оставляем всё по-умолчанию, в случае необходимости можно будет пересобрать пакет, выполив повторное конфигрирование:

# cd /usr/ports/net/openldap24-server && make rmconfig && make config-recursive

Должна получиться такая конфигурация:

# make showconfig
===> The following configuration options are available for openldap-server-2.4.36_2:
ACCESSLOG=off: With In-Directory Access Logging overlay
ACI=off: Per-object ACI (experimental)
AUDITLOG=off: With Audit Logging overlay
BDB=on: With BerkeleyDB backend
COLLECT=off: With Collect overy Services overlay
CONSTRAINT=off: With Attribute Constraint overlay
DDS=off: With Dynamic Directory Services overlay
DEREF=off: With Dereference overlay
DNSSRV=off: With Dnssrv backend
DYNACL=off: Run-time loadable ACL (experimental)
DYNAMIC_BACKENDS=on: Build dynamic backends
DYNGROUP=off: With Dynamic Group overlay
DYNLIST=off: With Dynamic List overlay
FETCH=off: Enable fetch(3) support
MDB=off: With Memory-Mapped DB backend
MEMBEROF=off: With Reverse Group Membership overlay
ODBC=off: With SQL backend
PASSWD=off: With Passwd backend
PERL=off: With Perl backend
PPOLICY=off: With Password Policy overlay
PROXYCACHE=off: With Proxy Cache overlay
REFINT=off: With Referential Integrity overlay
RELAY=off: With Relay backend
RETCODE=off: With Return Code testing overlay
RLOOKUPS=off: With reverse lookups of client hostnames
RWM=off: With Rewrite/Remap overlay
SASL=off: With (Cyrus) SASL2 support
SEQMOD=on: With Sequential Modify overlay
SHA2=off: With SHA2 Password hashes overlay
SHELL=off: With Shell backend (disables threading)
SLAPI=off: With Netscape SLAPI plugin API
SLP=off: With SLPv2 (RFC 2608) support
SMBPWD=off: With Samba Password hashes overlay
SOCK=off: With Sock backend
SSSVLV=off: With ServerSideSort/VLV overlay
SYNCPROV=on: With Syncrepl Provider overlay
TCP_WRAPPERS=on: With tcp wrapper support
TRANSLUCENT=off: With Translucent Proxy overlay
UNIQUE=off: With attribute Uniqueness overlay
VALSORT=off: With Value Sorting overlay
===> Use 'make config' to modify these settings

Добавляем LDAP в автозапуск. В файл /etc/rc.conf добавляем строку:

slapd_enable="YES"

Переходим к настройке демона slapd:

# vim /usr/local/etc/openldap/slapd.conf

Можно сразу подключить набор готовых схем:

# cat /usr/local/etc/openldap/slapd.conf | grep include
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
include         /usr/local/etc/openldap/schema/misc.schema
include         /usr/local/etc/openldap/schema/nis.schema
include         /usr/local/etc/openldap/schema/openldap.schema

Изменяем при необходимости такие строки:

database bdb
suffix "dc=sqd_ldp"
rootdn "cn=root,dc=sqd_ldp"

Можно задать несколько суффиксов, определив их каждый в отдельной строке.

Пока оставляем пароль для администратора как есть:

rootpw secret

Сохраняем файл, и проверяем корректность настроек:

# slaptest -u
config file testing succeeded

Делаем тестовый запуск, что бы сервер создал необходимые каталоги:

# service slapd status
slapd is not running.
# service slapd start
Starting slapd.
# service slapd status
slapd is running as pid 41527.
# service slapd stop
Stopping slapd.
Waiting for PIDS: 41527.

Копируем файл конфигурации базы:

# cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG
# chown ldap:ldap /var/db/openldap-data/DB_CONFIG

Иначе будет ошибка вида:

Oct 19 14:34:25 sqd_ldp slapd[1994]: bdb_db_open: warning - no DB_CONFIG file found in directory /var/db/openldap-data: (2). Expect poor performance for suffix "dc=sqd_ldp".

Запускаем LDAP сервер:

# service slapd start
Starting slapd.

Проверяем:

# service slapd status
slapd is running as pid 151.
# netstat -an | grep 389
tcp4 0 0 *.389 *.* LISTEN
tcp6 0 0 *.389 *.* LISTEN
# ldapsearch -x -b dc=sqd_ldp
# extended LDIF
#
# LDAPv3
# base <dc=sqd_ldp> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1
# tail /var/log/debug.log
Oct 19 15:25:03 sqd_ldp slapd[2227]: @(#) $OpenLDAP: slapd 2.4.36 (Oct 18 2013 19:50:28) $      root@sqd_ldp:/usr/ports/net/openldap24-server/work/openldap-2.4.36/servers/slapd
Oct 19 15:25:04 sqd_ldp slapd[2228]: slapd starting

В одной из рекомендаций сказано, что в случае выполнения любых команд LDAP-а, начинающихся с префикса slapd – сам демон slapd обязательно должен быть выключен, а при использовании команд с префиксом ldap – всегда должен быть запущен. Иначе может быт ьповреждена вся база.

Исключение – это команда slappasswd.

Создадим пароль для пользователя root с помощью утилиты slappasswd. Поддерживаются такие ключи:

-h – тип используемого хеширования, поддерживаются значения {CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA} и {CLEARTEXT};
-s – “секретная последовательность”, т.е. сам пароль, хеш которого надо получить
-T – полный путь к файлу с паролем, который необходимо захешировать;
-v – подробный режим

Примеры выполнения:

// используем CLEARTEXT, т.е. без кодирования пароля
$ slappasswd -h {CLEARTEXT}
New password:
Re-enter new password:
test
// зададим пароль test, тип хеширования не указываем - по-умолчанию будет использован SSHA
$ slappasswd -s test
{SSHA}MZKJotYll3Uae3HG8bItoSuoUKO40Hv4
// генерируем хеш пароля test с помощью MD5
$ slappasswd -s test -h {MD5}
{MD5}CY9rzUYh03PK3k6DJie09g==

Возвращаемся к файлу конфигурации сервера, и редактируем строку rootpw:

...
# Use of strong authentication encouraged.
rootpw {SSHA}MZKJotYll3Uae3HG8bItoSuoUKO40Hv4
...

Сохраняем файл, и выполняем проверку корректности настроек:

# slaptest -u
config file testing succeeded

Теперь добавим в нашу базу записи. Начинаем с добавления записи о самом каталоге sqd_ldp:

# cat base.ldif
dn: dc=sqd_ldp
objectClass: dcObject
objectClass: organization
objectClass: top
dc:sqd_ldp

Выполняем ldapadd:

# ldapadd -x -D "cn=root,dc=sqd_ldp" -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=sqd_ldp"

Ключи ldapadd:

-x: не использовать sasl;
-D: имя пользователя, под которым выполняем запрос;
-W: запросить ввод пароля;
-f file: имя файла из которого брать информацию о добавляемом объекте.

Если вы хотите полностью удалить все записи, и добавить заново – можно просто очистить каталог /var/db/openldap-data/:

# rm -rf /var/db/openldap-data/*
# service slapd restart
Stopping slapd.
Waiting for PIDS: 2228.
Starting slapd.

Создаём файл users.ldif, в который добавим описание новой группы (ou – Organizational unit) “users“:

# cat users.ldif
dn: ou=users,dc=sqd_ldp
objectClass: top
objectClass: organizationalUnit
ou: users
# ldapadd -x -D "cn=root,dc=sqd_ldp" -W -f users.ldif
Enter LDAP Password:
adding new entry "ou=users,dc=sqd_ldp"

Добавим в эту группу запись о пользователе:

# cat testuser.ldif
dn: cn=testuser,ou=users,dc=sqd_ldp
objectClass: top
objectClass: person
cn: testuser
sn: Vasya Pupkin
userPassword: {SSHA}q7LKBDcy0kSFF4FutzEsAsUF/Cb1wJ/Q
# ldapadd -x -D "cn=root,dc=sqd_ldp" -W -f testuser.ldif
Enter LDAP Password:
adding new entry "cn=testuser,ou=users,dc=sqd_ldp"

Проверим, поискав в базе запись при помощи ldapsearch:

# ldapsearch -x -LL -b 'dc=sqd_ldp' 'sn=Vasya*'
version: 1

dn: cn=testuser,ou=users,dc=sqd_ldp
objectClass: top
objectClass: person
cn: testuser
sn: Vasya Pupkin
userPassword:: e1NTSEF9cTdMS0JEY3kwa1NGRjRGdXR6RXNBc1VGL0NiMXdKL1E=

Ключи:

-x: не использовать sasl;
-LL : ограничение отображаемой информации, может быть -L или -LLL;
-b 'dn' : искать, начиная с конкретного объекта dn;
'filter' : фильтр поиска, можно использовать шаблоны и логические выражения, в данном случае – ищем совпадения по sn в котором встречается запись о Vasya с любым продолжением.

Для работы с LDAP из консоли существует утилита shelldap, которая позволяет просматривать каталоги, редактировать записи, сохраняет историю команд и другие удобные вещи:

# cd /usr/ports/net/shelldap && make BATCH=yes install clean

Пример работы в нём:

# shelldap --server localhost
~ > ls -l
ou=users,dc=sqd_ldp/

1 object.
~ > cd ou=users
ou=users,~ > ls -l
cn=testuser,ou=users,dc=sqd_ldp

1 object.
ou=users,~ > cat cn=testuser

dn: cn=testuser,ou=users,dc=sqd_ldp
objectClass: top
objectClass: person
cn: testuser
sn: Vasya Pupkin
userPassword: {SSHA}q7LKBDcy0kSFF4FutzEsAsUF/Cb1wJ/Q

ou=users,~ >

Из GUI-утилит имеется JXplorer – написанный на Java LDAP-браузер. Пакеты есть под любые операционные системы – *BSD, Windows, Solaris, Linux  и т.д.

Так же, имеется пакет phpLDAPadmin, представляющий из себя веб-интерфейс для работы с LDAP.

Полезные ссылки

http://www.openldap.org
http://www.openldap.org
http://www.openldap.org
http://www.lissyara.su
http://www.computerperformance.co.uk
http://xgu.ru
Крупнейший в рунете сборник документации по LDAP – http://pro-ldap.ru
http://noc.kspu.kr.ua
http://www.secure-computing.net