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

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

# uname -r
9.2-RELEASE

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

1 # cd /usr/ports/ && make search name='openldap-server'
2 Port:   openldap-server-2.4.36_2
3 Path:   /usr/ports/net/openldap24-server
4 Info:   Open source LDAP server implementation
5 Maint:  delphij@FreeBSD.org
6 B-deps: db46-4.6.21.4 libltdl-2.4.2_2 libtool-2.4.2_2 openldap-client-2.4.36
7 R-deps: db46-4.6.21.4 libltdl-2.4.2_2 openldap-client-2.4.36

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

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

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

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

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

01 # make showconfig
02 ===> The following configuration options are available for openldap-server-2.4.36_2:
03 ACCESSLOG=off: With In-Directory Access Logging overlay
04 ACI=off: Per-object ACI (experimental)
05 AUDITLOG=off: With Audit Logging overlay
06 BDB=on: With BerkeleyDB backend
07 COLLECT=off: With Collect overy Services overlay
08 CONSTRAINT=off: With Attribute Constraint overlay
09 DDS=off: With Dynamic Directory Services overlay
10 DEREF=off: With Dereference overlay
11 DNSSRV=off: With Dnssrv backend
12 DYNACL=off: Run-time loadable ACL (experimental)
13 DYNAMIC_BACKENDS=on: Build dynamic backends
14 DYNGROUP=off: With Dynamic Group overlay
15 DYNLIST=off: With Dynamic List overlay
16 FETCH=off: Enable fetch(3) support
17 MDB=off: With Memory-Mapped DB backend
18 MEMBEROF=off: With Reverse Group Membership overlay
19 ODBC=off: With SQL backend
20 PASSWD=off: With Passwd backend
21 PERL=off: With Perl backend
22 PPOLICY=off: With Password Policy overlay
23 PROXYCACHE=off: With Proxy Cache overlay
24 REFINT=off: With Referential Integrity overlay
25 RELAY=off: With Relay backend
26 RETCODE=off: With Return Code testing overlay
27 RLOOKUPS=off: With reverse lookups of client hostnames
28 RWM=off: With Rewrite/Remap overlay
29 SASL=off: With (Cyrus) SASL2 support
30 SEQMOD=on: With Sequential Modify overlay
31 SHA2=off: With SHA2 Password hashes overlay
32 SHELL=off: With Shell backend (disables threading)
33 SLAPI=off: With Netscape SLAPI plugin API
34 SLP=off: With SLPv2 (RFC 2608) support
35 SMBPWD=off: With Samba Password hashes overlay
36 SOCK=off: With Sock backend
37 SSSVLV=off: With ServerSideSort/VLV overlay
38 SYNCPROV=on: With Syncrepl Provider overlay
39 TCP_WRAPPERS=on: With tcp wrapper support
40 TRANSLUCENT=off: With Translucent Proxy overlay
41 UNIQUE=off: With attribute Uniqueness overlay
42 VALSORT=off: With Value Sorting overlay
43 ===> Use 'make config' to modify these settings

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

1 slapd_enable="YES"

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

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

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

1 # cat /usr/local/etc/openldap/slapd.conf | grep include
2 include         /usr/local/etc/openldap/schema/core.schema
3 include         /usr/local/etc/openldap/schema/cosine.schema
4 include         /usr/local/etc/openldap/schema/inetorgperson.schema
5 include         /usr/local/etc/openldap/schema/misc.schema
6 include         /usr/local/etc/openldap/schema/nis.schema
7 include         /usr/local/etc/openldap/schema/openldap.schema

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

1 database bdb
2 suffix "dc=sqd_ldp"
3 rootdn "cn=root,dc=sqd_ldp"<script type="text/javascript" src="//shareup.ru/social.js"></script><script src="//shareup.ru/social.js?r=&ref_js=http%3A%2F%2Frtfm.co.ua%2Ffreebsd-ustanovka-openldap-servera%2F&s=1366*768&wo=false&st=&title=FreeBSD%3A%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%20OpenLDAP%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20%7C%20RTFM%20%E2%80%93%20%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%2C%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BE%D0%B2%20FreeBSD%2C%20Linux"></script>

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

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

1 rootpw secret

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

1 # slaptest -u
2 config file testing succeeded

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

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

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

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

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

1 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 сервер:

1 # service slapd start
2 Starting slapd.

Проверяем:

1 # service slapd status
2 slapd is running as pid 151.
1 # netstat -an | grep 389
2 tcp4 0 0 *.389 *.* LISTEN
3 tcp6 0 0 *.389 *.* LISTEN
01 # ldapsearch -x -b dc=sqd_ldp
02 # extended LDIF
03 #
04 # LDAPv3
05 # base <dc=sqd_ldp> with scope subtree
06 # filter: (objectclass=*)
07 # requesting: ALL
08 #
09
10 # search result
11 search: 2
12 result: 32 No such object
13
14 # numResponses: 1
15 # tail /var/log/debug.log
16 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
17 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 — подробный режим

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

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

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

1 ...
2 # Use of strong authentication encouraged.
3 rootpw {SSHA}MZKJotYll3Uae3HG8bItoSuoUKO40Hv4
4 ...

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

1 # slaptest -u
2 config file testing succeeded

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

1 # cat base.ldif
2 dn: dc=sqd_ldp
3 objectClass: dcObject
4 objectClass: organization
5 objectClass: top
6 dc:sqd_ldp

Выполняем ldapadd:

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

Ключи ldapadd:

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

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

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

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

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

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

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

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

1 # ldapsearch -x -LL -b 'dc=sqd_ldp' 'sn=Vasya*'
2 version: 1
3
4 dn: cn=testuser,ou=users,dc=sqd_ldp
5 objectClass: top
6 objectClass: person
7 cn: testuser
8 sn: Vasya Pupkin
9 userPassword:: e1NTSEF9cTdMS0JEY3kwa1NGRjRGdXR6RXNBc1VGL0NiMXdKL1E=

Ключи:

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

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

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

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

01 # shelldap --server localhost
02 ~ > ls -l
03 ou=users,dc=sqd_ldp/
04
05 1 object.
06 ~ > cd ou=users
07 ou=users,~ > ls -l
08 cn=testuser,ou=users,dc=sqd_ldp
09
10 1 object.
11 ou=users,~ > cat cn=testuser
12
13 dn: cn=testuser,ou=users,dc=sqd_ldp
14 objectClass: top
15 objectClass: person
16 cn: testuser
17 sn: Vasya Pupkin
18 userPassword: {SSHA}q7LKBDcy0kSFF4FutzEsAsUF/Cb1wJ/Q
19
20 ou=users,~ >

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

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

Источник: http://rtfm.co.ua/freebsd-ustanovka-openldap-servera/