LDAP (англ. Lightweight Directory Access Protocol — «облегчённый протокол доступа к каталогам») — это сетевой протокол для доступа к службе каталогов X.500, разработанный IETF как облегчённый вариант разработанного ITU-T протокола DAP. LDAP — относительно простой протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей.

Установка

Ставить будем из портов.

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

В опциях установки я выбрал TCP_WRAPPERS, BDB, SEQMOD, SYNCPROV, SMBPWD, DYNAMIC_BACKENDS.

После установки нам сообщится, что конфигурационный файл — /usr/local/etc/openldap/slapd.conf, и что сервер по умолчанию запускается от пользователя ldap.

Настройка

Добавляем в /etc/rc.conf следующие строчки:

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://192.168.0.1/ ldap://127.0.0.1"'
slapd_sockets="/var/run/openldap/ldapi"

Далее, открываем и редактируем файл /usr/local/etc/openldap/slapd.conf:

# Подгружаем схемы (это стандартный набор)
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
# А эти берем
#include                /usr/local/etc/openldap/schema/samba.schema
#include                /usr/local/etc/openldap/schema/dnszone.schema
#include                /usr/local/etc/openldap/schema/dhcp.schema

pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

# Подгружаем модуль bdb
modulepath      /usr/local/libexec/openldap
moduleload      back_bdb

# Всякие политики безопасности
access to attrs=userPassword
   by self write
   by anonymous auth
   by * none

access to *
   by self write
   by anonymous read
   by * none

#######################################################################
# BDB database definitions
#######################################################################

database        bdb
suffix          "dc=pravo4u,dc=ru"
rootdn          "cn=root,dc=pravo4u,dc=ru"
# Создается с помощью slappasswd
rootpw          secret
# Данная директория должна существовать ДО запуска slapd.
# Рекомендуется выставить права 700.
directory       /var/db/openldap-data
# Поддерживаем следующие индексы
index   objectClass     eq
index   cn              eq

Следуем совету, данному в конфиге — выставляем права на директорию /var/db/openldap-data:

# chmod 700 /var/db/openldap-data

Если сейчас запустить slapd, то в логах (/var/log/debug.log) будет примерно следующее сообщение:

Aug  6 12:04:28 server slapd[71856]: bdb_db_open: warning - no DB_CONFIG file found in directory /var/db/openldap-data: (2). Expect poor performance for suffix "dc=pravo4u,dc=ru".

Эта ошибка говорит, что у нас не установлены никакие параметры для базы данных bdb. Из-за чего может сильно страдать производительность. Чтобы избавить от этой ошибки, надо скопировать файл DB_CONFIG.example из папки /usr/local/etc/openldap в папку /var/db/opeldap-data (это та папка, которая указана в конфигурационном файле ldap).

# cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap/DB_CONFIG

Все. Теперь можно запускать службу ldap.

Первым делом, что нам надо сделать — это создать базовые группы и саму запись о домене. Делается это путем создания *.ldif файла, который будет загружен в ldap.

Файл main.ldif должен примерно следующий вид:

dn: dc=pravo4u,dc=ru
objectClass: dcObject
objectClass: organization
objectClass: top
dc: pravo4u
o: pravo4u

dn: ou=users,dc=pravo4u,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: users

dn: ou=groups,dc=pravo4u,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: ou=computers,dc=pravo4u,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: computers

И добавляем все это дело в ldap:

# ldapadd -x -D "cn=root,dc=pravo4u,dc=ru" -w password -f main.ldif

-x означает, что мы используем простую авторизацию, вместо SASL
-D dn — используем DN для подключения к ldap
-w пароль — вводим пароль
-f файл — файл, который надо обработать

После этого файл main.ldif можно удалить.

Упрощаем администрирование

Можно, конечно же, добавлять записи точно так же как это было сделано в примере выше, но гораздо проще использовать для этого веб-интерфейс. Тем более, такие есть в наличии… Я предпочитаю GOsa. Ставим из портов:

# cd /usr/ports/sysutils/gosa
# make install clean

К сожалению, не все так просто. Я нажил себе 4 часа мучений, пытаясь сделать так, чтобы gosa заработал. Сначала я даже пытался написать инструкцию. Но потом плюнул на это дело. Скажу лишь, что для GOsa требуется огромное количество различных зависимостей, надо копировать кучу схем для ldap, редактировать файл php.ini и httpd.conf… И этим дело не ограничивается.