Технологические вопросы крупных внедрений
29.12.2022
В данной статье будет рассмотрена установка и настройка OpenLDAP (https://ru.wikipedia.org/wiki/OpenLDAP) в качестве альтернативы Active Directory для Linux окружения. Все Linux окружение построено на базе операционной системы Linux, семейства Ubuntu версии 22.04 (LTS). Отличия с другими дистрибутивами минимальны и касаются, в основном, настройки параметров самой операционной системы (например, настройка сетевых интерфейсов).
Настроенный сервер OpenLDAP вы сможете использовать для доменной аутентификации в платформе 1С:Предприятие без использования Active Directory.
В статье будут задействованы несколько компьютеров. Четыре из них используются для отдельных серверов, будь то сервер имен или сервер 1С:Предприятие. Пятый используется в качестве клиентского компьтера с графическим интерфейсом.
Используемый домен: da-test.ru
Параметры сети:CIDR: 10.0.2.0
Маска: 255.255.255.0Роль хоста | Адрес хоста | IP-адрес |
---|---|---|
Сервер имен (DNS) | ns1.da-test.loc | 10.0.2.1 |
Сервер OpenLDAP и Kerberos | da1.da-test.loc | 10.0.2.2 |
Сервер 1С:Предприятие | app1.da-test.loc | 10.0.2.3 |
Сервер PostgreSQL | dbms1.da-test.loc | 10.0.2.4 |
Клиентский компьютер, с графическим интерфейсом | pc1.da-test.loc | 10.0.2.5 |
Перед тем, как перейти к настройке окружения, необходимо на каждом компьютере выполнить команду:
Копировать в буфер обменаsudo hostnamectl set-hostname <имя хоста>.da-test.ru
Где <имя хоста> - это короткое имя компьютера (например, ns1 или da1).
В данной статье настройка сервера имен производится на отдельном компьютере с помощью реализации dns-сервера под названием bind9
https://ru.wikipedia.org/wiki/BINDДля начала устанавливаем сам сервер dns:
Копировать в буфер обменаsudo apt install bind9 bind9utils bind9-doc
Открываем файл настроек bind:
sudo nano /etc/default/named
И после добавляем опцию принудительного использования адресного пространства IPv4 (добавим параметр -4 в конец значения OPTIONS):
Копировать в буфер обменаOPTIONS="-u bind -4"
В данной статье протокол IPv6 не используется, так как предполагается использование локальной сети предприятия, для которой будет достаточно адресного пространства IPv4.
Для применения настроек перезапускаем bind:
Копировать в буфер обменаsudo systemctl restart bind9
Открываем файл настроек опций bind:
Копировать в буфер обменаsudo nano /etc/bind/named.conf.options
Перед блоком options создаем новый блок ACL (список контроля доступа, https://ru.wikipedia.org/wiki/ACL) под псевдонимом trusted. В нем нужно определить список клиентов или подсеть целиком, из которых вы будете разрешать рекурсивные DNS-запросы.
Копировать в буфер обменаcl "trusted" { 10.0.2.1 # ns1.da-test.loc; 10.0.2.0/24; };
Далее, в секции options, после параметра directory добавьте:
Копировать в буфер обменаrecursion yes; # разрешить использование рекурсивных запросов allow-recursion { trusted; }; # разрешить рекурсивные запросы для доверетильных клиентов (для acl "trusted") listen-on { 10.0.2.1; }; # ip-адрес dns-сервера (адрес текущего сервера) allow-transfer { none; }; # disable zone transfers by default forwarders { 8.8.8.8; 8.8.4.4; };
Обратите внимание на блок переадресации ("forwarders"). Он включает в себя два IP-адреса: 8.8.8.8 и 8.8.4.4. Этот блок определяет адреса переадресации (специальный механизм, который BIND использует для уменьшения трафика по ссылкам на внешние dns-серверы).
Далее сохраните и закройте файл. Правки в файле конфигурации нужны для того, что только ваши доверенные серверы могли запрашивать ваш dns-сервер для внешних доменов.sudo nano /etc/bind/named.conf.local
zone "da-test.loc" { type primary; file "/etc/bind/zones/db.da-test.loc"; # путь к файлу описания forward зоны }; zone "2.0.10.in-addr.arpa" { type primary; file "/etc/bind/zones/db.2.0.10"; # Файл подсети 10.0.2.0/24 (reverse) };
Теперь нужно создать сам файл forward зоны. В этом файле вы определяете записи для прямого поиска dns. То есть, когда сервер имен получает запрос имени, например, app1.da-test.loc, он будет искать в файле forward-зоны соответствующий ip-адрес для компьютера с именем app1.
Файл нужно инициализировать в директории зон. Так как директории еще не существует, то ее нужно создать.В соответствии с конфигурационным файлом named.conf.local, это местоположение должно быть /etc/bind/zones:
Копировать в буфер обменаsudo mkdir /etc/bind/zones
Файл зоны будем содавать не с нуля, а с помощью базового файла:
Копировать в буфер обменаsudo cp /etc/bind/db.local /etc/bind/zones/db.da-test.loc
После копирования файла откроем его в редакторе:
sudo nano /etc/bind/zones/db.da-test.loc
@ IN SOA ns1.da-test.loc. admin.da-test.loc. (
@ IN NS localhost. @ IN A 127.0.0.1 @ IN AAAA ::1
; NS-записи IN NS ns1.da-test.loc.
; Серверы имен - A-записи ns1.da-test.loc. IN A 10.0.2.1 ; 10.0.2.0/24 - A-записи da1.da-test.loc. IN A 10.0.2.2 app1.da-test.loc. IN A 10.0.2.3 dbms1.da-test.loc. IN A 10.0.2.4 pc1.da-test.loc. IN A 10.0.2.5
$TTL 604800 @ IN SOA ns1.da-test.loc. admin.da-test.loc. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; ; NS-записи IN NS ns1.da-test.loc. ; Серверы имен - A-записи ns1.da-test.loc. IN A 10.0.2.1 ; 10.0.2.0/24 - A-записи da1.da-test.loc. IN A 10.0.2.2 app1.da-test.loc. IN A 10.0.2.3 dbms1.da-test.loc. IN A 10.0.2.4 pc1.da-test.loc. IN A 10.0.2.5
Файл reverse-зоны мы будем создавать также с помощью копирования файла:
sudo cp /etc/bind/db.127 /etc/bind/zones/db.2.0.10
sudo nano /etc/bind/zones/db.2.0.10
@ IN SOA ns1.da-test.loc. admin.da-test.loc. (
@ IN NS localhost. 1.0.0 IN PTR localhost.
IN NS ns1.da-test.loc.
2.1 IN PTR ns1.da-test.loc. ; 10.0.2.1 2.2 IN PTR da1.da-test.loc. ; 10.0.2.2 2.3 IN PTR app1.da-test.loc. ; 10.0.2.3 2.4 IN PTR dbms1.da-test.loc. ; 10.0.2.4 2.5 IN PTR pc1.da-test.loc. ; 10.0.2.5
$TTL 604800 @ IN SOA ns1.da-test.loc. admin.da-test.loc. ( 3 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; Серверы имен - NS-записи IN NS ns1.da-test.loc. ; PTR-записи 2.1 IN PTR ns1.da-test.loc. ; 10.0.2.1 2.2 IN PTR da1.da-test.loc. ; 10.0.2.2 2.3 IN PTR app1.da-test.loc. ; 10.0.2.3 2.4 IN PTR dbms1.da-test.loc. ; 10.0.2.4 2.5 IN PTR pc1.da-test.loc. ; 10.0.2.5
sudo named-checkconf
Если в конфигурационных файлах нет синтаксических ошибок, вывод команды будет пустым. При возникновении проблем с конфигурационными файлами, внимательно прочтите сообщение об ошибке и попробуйте проанализировать конфигурационные файлы на предмет ошибок. Затем повторно выполните named-checkconf когда обнаруженные ошибки будут исправлены.
С помощью команды named-checkzone можно проверить правильность настройки файлов зоны. Первый аргумент указывает на имя зоны, а второй на соответствующий файл зоны, которые должны быть определены в named.conf.local.
Например, чтобы проверить настройку домена da-test.loc для forward-зоны, выполните следующую команду:
sudo named-checkzone da-test.loc /etc/bind/zones/db.da-test.loc
Output zone da-test.loc/IN: loaded serial 3 OK
sudo named-checkzone 2.0.10.in-addr.arpa /etc/bind/zones/db.2.0.10
Если в конфигурационных файлов ошибок не обнаружено, то пришло время перезапустить службу bind.
Копировать в буфер обменаsudo systemctl restart bind9
Также не забудьте, если у вас настроен брандмауэр UFW, то нужно открыть доступ к BIND с помощью команды:
Копировать в буфер обменаsudo ufw allow Bind9
Ваш основной DNS-сервер теперь настроен и готов отвечать на DNS-запросы.
Прежде чем все серверы и клиентские компьютеры в доверенном ACL смогут запрашивать ваш DNS-сервер, вы должны настроить каждый из них на использование ns1.da-test.loc в качестве сервера имен.
Предполагается, что ваши хосты работают под управлением операционных систем семейства Ubuntu, вам нужно будет найти, какое устройство связано с вашей частной сетью. Вы можете сделать это, запросив частную подсеть с помощью команды:
Копировать в буфер обменаip address
Запустите следующую команду на каждой из ваших клиентских машин, заменив выделенную подсеть своей собственной:
Копировать в буфер обменаip address show to 10.0.2.0/24
Результатом будет вывод:
Копировать в буфер обмена2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 10.0.2.5/24 metric 100 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 511sec preferred_lft 511sec
На основании вывода результата команды можно определить, что частным интерфейсом является enp0s3. Далее в этом разделе будем ссылаться на enp0s3 как на основной частный интерфейс.
В Ubuntu 22.04 сеть настраивается с помощью Netplan, с помощью которой можно создавать конфигурацию сети и применять ее к совместимому серверному сетевому программному обеспечению. Чтобы настроить dns, вам необходимо написать конфигурационный файл Netplan.
Создадим новый файл в /etc/netplan, который будет называться 00-private-nameservers.yaml:
Копировать в буфер обменаsudo nano /etc/netplan/00-private-nameservers.yaml
После чего добавим текст следующего содержания:
Копировать в буфер обменаnetwork: version: 2 ethernets: enp0s3: # Частный сетевой интерфейс nameservers: addresses: - 10.0.2.1 # IP-адрес для for ns1.da-test.loc search: [ da-test.loc ] # Зона DNS
Сохраните и закройте файл настроек.
Затем запустим Netplan с проверкой возможности использовать новый файл конфигурации. Это делается с помощью команды: Копировать в буфер обменаsudo netplan try
При возникновении проблем с работой в сети, Netplan в таком случае автоматически откатит изменения по истечении тайм-аута:
Копировать в буфер обменаOutput Warning: Stopping systemd-networkd.service, but it can still be activated by: systemd-networkd.socket Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 120 seconds
Теперь проверьте, что система видит сервер имен, чтобы определить, была ли применена ваша конфигурация DNS:
Копировать в буфер обменаsudo resolvectl status
Прокрутите вниз, пока не найдете раздел для вашего интерфейса частной сети. Сначала должны быть перечислены частные IP-адреса для ваших DNS-серверов, за которыми следуют служебная информация. Ваш домен должен быть указан в разделе DNS:
Копировать в буфер обменаLink 2 (enp0s3) Current Scopes: DNS Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported DNS Servers: 10.0.2.1 DNS Domain: da-test.loc
Создание такого конфигурационного файла нужно сделать для каждого хоста в сети, который должен использовать настроенный сервер имен.
Осталось только проверить работу разыменования для сервера имен.С помощью команды nslookup, мы можем проврить доступность сервера имен.
Для начала можно использовать прямой поиск. Копировать в буфер обменаnslookup app1
При запросе app1, его имя расширяется до app1.da-test.loc поскольку параметр Search установлен для поиска поддомена da-test.loc (в соответствии с ранее настроенным 00-private-nameservers.yaml), и DNS-запросы будут пытаться выполнить поиск в этом поддомене, прежде чем искать хост в другом месте. Команда вернет вывод, подобный следующему:
Копировать в буфер обменаServer: 10.0.2.1 Address: 10.0.2.1#53 Name: app1.da-test.loc Address: 10.0.2.3
Чтобы протестировать обратный поиск, запросите сервер имен с частным IP-адресом app1:
Копировать в буфер обменаnslookup 10.0.2.3
В результате в окне терминала будет выведен примерно следующий результат:
Копировать в буфер обмена3.2.0.10.in-addr.arpa name = app1.da-test.loc.2.0.10.in-addr.arpa.
На этом настройка сервера имен закончена.
passwd
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
После нужно установить необходимые пакеты
Копировать в буфер обменаsudo apt-get install slapd ldap-utils krb5-kdc-ldap sudo-ldap
Во время установки Вам будет предложено задать некоторые настройки:
Пароль учётной записи admin для доступа к конфигурации OpenLDAP - укажите свой
Название области Kerberos (realm) - DA-TEST.LOCСервер Kerberos для нашей области - da1.da-test.loc
Управляющий сервер области - da1.test.loc.Если во время установки была допущена ошибка, вы сможете исправить неточность позже.
Прежде чем продолжить, убедитесь, что нужные пакеты установились:
Копировать в буфер обменаdpkg --get-selections|egrep '(slapd|ldap-utils|krb5-kdc-ldap|sudo-ldap)' krb5-kdc-ldap install ldap-utils install slapd install sudo-ldap install
mkdir ~/ldap cd ~/ldap
Теперь удалим установленные по умолчанию конфигурации службы OpenLDAP (slapd) вместе с базой данных:
Копировать в буфер обменаsudo systemctl stop slapd sudo rm -rf /etc/ldap/slapd.d sudo rm -rf /var/lib/ldap
После этого добавим пустую директорию, где будет храниться новая конфигурация:
Копировать в буфер обменаmkdir /etc/ldap/slapd.d
Теперь можно приступать к настройке OpenLDAP. Создадим файл init-ldap-config.ldif:
Копировать в буфер обменаnano init-ldap-config.ldif
После чего добавим в него текст:
Копировать в буфер обменаdn: cn=config objectClass: olcGlobal cn: config olcPidFile: /var/run/slapd/slapd.pid olcArgsFile: /var/run/slapd/slapd.args dn: olcDatabase={0}config,cn=config objectClass: olcDatabaseConfig olcDatabase: {0}config olcAccess: to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage dn: cn=schema,cn=config objectClass: olcSchemaConfig cn: schema
Первым делом в файле мы определили корневую запись DIT (Directory Information Tree, https://en.wikipedia.org/wiki/Directory_information_tree), cn=config. Далеее, с помощью директив olcPidFile и olcArgsFile указали расположения, где будут записаны идентфиикатор процесса службы каталогов вместе с его аргументами запуска.
В разделе olcDatabase указывааем служебную базу данных конфигурации cn=config. Мы так же добавили правило доступа olcAccess (ACL, Access Control List), разрешающее управлять ею от имени пользователя root (uid=0, gid=0) с помощью механизма SASL EXTERNAL.И в конце файла мы добавляем в конфигурацию контейнер для наборов схем данных (olcSchemaConfig).
Теперь инициализируем конфигурацию: Копировать в буфер обменаsudo slapadd -n 0 -F /etc/ldap/slapd.d -l init-ldap-config.ldif _#################### 100.00% eta none elapsed none fast! Closing DB...
Далее проверим состояние применения конфигурации:
Копировать в буфер обменаsudo slaptest -uF /etc/ldap/slapd.d config file testing succeeded
Исправим права доступа, разрешив пользователю openldap управлять файлами и директориями в /etc/ldap/slapd.d:
Копировать в буфер обменаsudo chown -R openldap:openldap /etc/ldap/slapd.d sudo chmod 750 /etc/ldap/slapd.d
Так как в начале статьи для сервера имен установили использование только IPv4, то укажем службе каталогов использовать только этот протокол. Для этого в файле /etc/default/slapd зададим SLAPD_OPTIONS="-4".
Копировать в буфер обменаSLAPD_OPTIONS="-4"
Для того, чтобы мы смогли видеть события службы каталогов в системном журнале в виде отдельного файла, настроим rsyslog.
Для этого добавляем следующий текст /etc/rsyslog.conf после инструкции $IncludeConfig: Копировать в буфер обмена# Файл журнала службы каталогов /var/log/slapd.log if $programname == 'slapd' then /var/log/slapd.log & ~
Теперь создадим файл для журнала службы каталогов и назначим ему права доступа.
Копировать в буфер обменаsudo touch /var/log/slapd.log sudo chmod 0640 /var/log/slapd.log sudo chown syslog:adm /var/log/slapd.log
Затем перезапустим rsyslog, чтобы изменения вступили в силу:
Копировать в буфер обменаsudo systemctl restart rsyslog
Далее настраиваем правила ротации логов службы каталогов. Для этого создаем файл конфигурации /etc/logrotate.d/slapd и добавляем в него текст:
Копировать в буфер обмена/var/log/slapd.log { daily missingok rotate 7 compress delaycompress notifempty }
Делаем проверку настройки ротации:
Копировать в буфер обменаsudo logrotate -df /etc/logrotate.conf
И запускаем службу каталогов:
Копировать в буфер обменаsudo systemctl start slapd * Starting OpenLDAP slapd [ OK ]
Выполним проверку записи в журнал событий:
Копировать в буфер обменаsudo tail /var/log/slapd.log ... slapd starting
Проверим статус запуска службы (по умолчанию служба работает на порту 389):
Копировать в буфер обменаsudo ss -tan | grep 389 LISTEN 0 128 *:389 *:* sudo ss -xa | grep ldap u_str LISTEN 0 128 /var/run/slapd/ldapi 44345 * 0
И в конце проверим текущую конфигурацию каталога:
Копировать в буфер обменаsudo ldapsearch -QLLL -Y EXTERNAL -H ldapi:/// -b 'cn=config' dn dn: cn=config dn: cn=schema,cn=config dn: olcDatabase={-1}frontend,cn=config dn: olcDatabase={0}config,cn=config
Теперь нам нужно подключить динамические модули. Первый - это mdb, механизм базы данных. Второй - monitor. Он нужен для создания и динамической поддержки ветки с информацией о текущем статусе службы каталогов.
Создадим файл switch-dynamic-modules.ldif и добавим в него текст: Копировать в буфер обменаdn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /usr/lib/ldap olcModuleLoad: back_mdb.la olcModuleLoad: back_monitor.la
Далее применем содержимое файла в конфигурацию:
Копировать в буфер обменаsudo ldapadd -QY EXTERNAL -H ldapi:/// -f switch-dynamic-modules.ldif adding new entry "cn=module,cn=config"
Теперь нам нужно установить набор схем данных. Набор схем данных - это удобное хранилище для содержания объектных классов и атрибутов из одной предметной области. Но перед установкой нужно наборы схем из пакетов krb5-kdc-ldap и sudo-ldap перевести в формат LDIF.
Для начала скопируем их во временный каталог: Копировать в буфер обменаzcat /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz > ~/ldap/kerberos.schema cp /usr/share/doc/sudo-ldap/schema.OpenLDAP ~/ldap/sudo.schema
Далее создадим файл convert-schema-to-ldif.sh и добавим в него текст:
Копировать в буфер обмена#!/bin/bash SCHEMAD=~/ldap tmpd=`mktemp -d` pushd ${tmpd} >>/dev/null echo '' > convert.dat for schema in ${SCHEMAS} ; do echo include ${SCHEMAD}/${schema} >> convert.dat done mkdir output slaptest -f convert.dat -F ./output if [ $? -ne 0 ] ; then echo "slaptest conversion failed" exit fi for schema in ${SCHEMAS} ; do fullpath=${SCHEMAD}/${schema} schema_name=`basename ${fullpath} .schema` schema_dir=`dirname ${fullpath}` ldif_file=${schema_name}.ldif find . -name *${schema_name}.ldif -exec mv '{}' ./${ldif_file} \; sed -i "/dn:/ c dn: cn=${schema_name},cn=schema,cn=config" ${ldif_file} sed -i "/cn:/ c cn: ${schema_name}" ${ldif_file} sed -i '/structuralObjectClass/ d' ${ldif_file} sed -i '/entryUUID/ d' ${ldif_file} sed -i '/creatorsName/ d' ${ldif_file} sed -i '/createTimestamp/ d' ${ldif_file} sed -i '/entryCSN/ d' ${ldif_file} sed -i '/modifiersName/ d' ${ldif_file} sed -i '/modifyTimestamp/ d' ${ldif_file} sed -i '/^ *$/d' ${ldif_file} mv ${ldif_file} ${schema_dir} done popd >>/dev/null rm -rf $tmpd
После чего сделаем его исполняемым и запустим:
Копировать в буфер обменаchmod +x convert-schema-to-ldif.sh SCHEMAS='kerberos.schema sudo.schema' convert-schema-to-ldif.sh config file testing succeeded
На выходе должны получить два набора схем данных в формате LDIF:
Копировать в буфер обменаls ~/ldap | egrep '(kerberos.ldif|sudo.ldif)' kerberos.ldif sudo.ldif
Переместим их в каталог к остальным наборам схем и поправим права доступа:
Копировать в буфер обменаsudo mv ~/ldap/{kerberos.ldif,sudo.ldif} /etc/ldap/schema sudo chown root:root /etc/ldap/schema/{kerberos.ldif,sudo.ldif} sudo chmod 0644 /etc/ldap/schema/{kerberos.ldif,sudo.ldif}
Создадим LDIF-файл include-schemas.ldif с необходимыми нам наборами схем данных. Внимание! Порядок их следования в файле важен! Атрибуты наборов схем иерархически связаны и требуют их объявления с соблюдением иерархии. В include-schemas.ldif добавим текст:
Копировать в буфер обменаinclude: file:///etc/ldap/schema/core.ldif include: file:///etc/ldap/schema/cosine.ldif include: file:///etc/ldap/schema/inetorgperson.ldif include: file:///etc/ldap/schema/collective.ldif include: file:///etc/ldap/schema/corba.ldif include: file:///etc/ldap/schema/duaconf.ldif include: file:///etc/ldap/schema/openldap.ldif include: file:///etc/ldap/schema/dyngroup.ldif include: file:///etc/ldap/schema/java.ldif include: file:///etc/ldap/schema/misc.ldif include: file:///etc/ldap/schema/nis.ldif include: file:///etc/ldap/schema/ppolicy.ldif include: file:///etc/ldap/schema/kerberos.ldif include: file:///etc/ldap/schema/sudo.ldif
В конце файла мы указываем получившиеся в результате конвертации наборы схем kerberos.ldif и sudo.ldif.
Теперь можем инициализировать наборы схем: Копировать в буфер обменаsudo ldapadd -QY EXTERNAL -H ldapi:/// -f include-schemas.ldif adding new entry "cn=core,cn=schema,cn=config" adding new entry "cn=cosine,cn=schema,cn=config" adding new entry "cn=inetorgperson,cn=schema,cn=config" adding new entry "cn=collective,cn=schema,cn=config" adding new entry "cn=corba,cn=schema,cn=config" adding new entry "cn=duaconf,cn=schema,cn=config" adding new entry "cn=openldap,cn=schema,cn=config" adding new entry "cn=dyngroup,cn=schema,cn=config" adding new entry "cn=java,cn=schema,cn=config" adding new entry "cn=misc,cn=schema,cn=config" adding new entry "cn=nis,cn=schema,cn=config" adding new entry "cn=ppolicy,cn=schema,cn=config" adding new entry "cn=kerberos,cn=schema,cn=config" adding new entry "cn=sudo,cn=schema,cn=config"
Теперь мы можем перейти к созданию базы данных, в которой служба каталогов будет хранить информацию.
Для начала создадим пароль администратора службы каталогов. С помощью утилиты slappasswd создадим хэш пароля, который необходимо будет запомнить: Копировать в буфер обменаslappasswd -h '{SSHA}' New password: Re-enter new password: {SSHA}gP24e9Cs4FFw5yHw7PcohG1ekQGtFBD
Создаем конфигурационный LDIF-файл init-db.ldif для базы данных добавляем в него текст olcRootPW:
Копировать в буфер обменаdn: olcDatabase=mdb,cn=config objectClass: olcMdbConfig olcDatabase: mdb olcSuffix: dc=da-test,dc=ru olcDbDirectory: /var/lib/ldap olcDbMaxsize: 1073741824 olcRootDN: cn=admin,dc=da-test,dc=ru olcRootPW: {SSHA}gP24e9Cs4FFw5yHw7PcohG1ekQGtFBD olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * break olcAccess: {1}to attrs=userPassword by self write by anonymous auth olcAccess: {2}to * by self read dn: olcDatabase=monitor,cn=config objectClass: olcDatabaseConfig olcDatabase: monitor
В качестве параметра olcRootPW подставьте ранее скопированный хэш пароля с префиксом {SSHA}.
В атрибуте olcDbDirectory мы указали путь к каталогу бузы данных. Атрибут обязательный и требует существование каталога на момент загрузки в базу данных.Механизм mdb требует указания максимального размера базы данных (olcDbMaxsize). Он задается в байтах и должен быть больше её ожидаемого размера, даже с учётом прироста. В файловой системе должно быть достаточно свободного места для размещения базы данных такого размера.
В атрибут olcRootDN мы записываем DN администратора базы данных.Для пользователя, указанного в атрибуте olcRootDN, задавать правило в ACL не нужно, он обладает полным доступом к данным в базе.
Далее добавляем три правила доступа (olcAccess) для базы данных mdb:Доступ ко всей базе данных:
- разрешить доступ пользователю root с использованием механизма SASL EXTERNAL.- продолжить анализ ACL, если нет совпадений с субъектами доступа, указанными с помощью директивы by.
Доступ к атрибуту userPassword:- разрешить доступ для смены пароля самим пользователем.
- разрешить доступ для аутентификации.Доступ к остальной базе данных:
- разрешить пользователям просматривать свои записи (важно для аутентификации через nslcd, раздел 5).С помощью механизма monitor включаем мониторинг базы данных (добавляем базу данных monitor).
Далее для нашей базы данных необходимо создать каталог и задать ему права доступа:
Копировать в буфер обменаsudo mkdir /var/lib/ldap sudo chown openldap:openldap /var/lib/ldap sudo chmod 0700 /var/lib/ldap
Теперь загружаем конфигурацию базы данных:
Копировать в буфер обменаsudo ldapadd -QY EXTERNAL -H ldapi:/// -f init-db.ldif adding new entry "olcDatabase=mdb,cn=config" adding new entry "olcDatabase=monitor,cn=config"
Проверим корректность всех ACL и, заодно, наличие всех добавленных данных:
Копировать в буфер обменаsudo ldapsearch -QLLL -Y EXTERNAL -H ldapi:/// -b 'cn=config' dn olcAccess dn: cn=config dn: cn=module{0},cn=config dn: cn=module{1},cn=config dn: cn=schema,cn=config dn: cn={0}core,cn=schema,cn=config dn: cn={1}cosine,cn=schema,cn=config dn: cn={2}inetorgperson,cn=schema,cn=config dn: cn={3}collective,cn=schema,cn=config dn: cn={4}corba,cn=schema,cn=config dn: cn={5}duaconf,cn=schema,cn=config dn: cn={6}openldap,cn=schema,cn=config dn: cn={7}dyngroup,cn=schema,cn=config dn: cn={8}java,cn=schema,cn=config dn: cn={9}misc,cn=schema,cn=config dn: cn={10}nis,cn=schema,cn=config dn: cn={11}kerberos,cn=schema,cn=config dn: cn={12}sudo,cn=schema,cn=config dn: olcDatabase={-1}frontend,cn=config 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 dn: olcDatabase={0}config,cn=config olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" manage dn: olcDatabase={1}mdb,cn=config olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" manage by * break olcAccess: {1}to attrs=userPassword,userPKCS12 by self write by anonymous auth olcAccess: {2}to attrs=shadowLastChange by self write olcAccess: {3}to dn.subtree="cn=kerberos,ou=services,dc=pacman,dc=loc" by dn.e xact="cn=krbadmin,ou=users,dc=pacman,dc=loc" manage olcAccess: {4}to * by dn.base="cn=nssproxy,ou=users,dc=pacman,dc=loc" read by self read dn: olcDatabase={2}monitor,cn=config
Убедимся, что учётная запись администратора имеет доступ к службе каталогов:
Копировать в буфер обменаsudo ldapwhoami -WD cn=admin,dc=da-test,dc=ru Enter LDAP Password: dn:cn=admin,dc=da-test,dc=ru
Отредактируем файл /etc/ldap/ldap.conf. Это нужно только для того, чтобы использовать короткие имена и не печатать fqdn полностью
Копировать в буфер обменаBASE dc=da-test,dc=ru URI ldap://da1.da-test.ru # TLS_CACERT /etc/ssl/certs/rootca.crt # TLS_REQCERT demand TIMELIMIT 15 TIMEOUT 20
Основные настройки выполнены. Теперь осталось добавить службу каталогов в автозапуск:
Копировать в буфер обменаsudo systemctl enable slapd
nano init-units.ldif
И добавим в него текст:
Копировать в буфер обменаdn: dc=da-test,dc=ru dc: example objectClass: top objectClass: domain dn: ou=users,dc=da-test,dc=ru ou: Users objectClass: top objectClass: organizationalUnit description: Пользователи организации dn: ou=groups,dc=da-test,dc=ru ou: Groups objectClass: top objectClass: organizationalUnit description: Группы организации
Теперь применим конфигурацию для службы каталогов:
Копировать в буфер обменаsudo ldapmodify -a -xZZWD cn=admin,dc=da-test,dc=ru -f 4-users+groups.ldif Enter LDAP Password: adding new entry "dc=da-test,dc=ru" adding new entry "ou=users,dc=da-test,dc=ru" adding new entry "ou=groups,dc=da-test,dc=ru"
Убедимся, что организационные единицы были созданы
Копировать в буфер обменаldapsearch -xZZLLLWD cn=admin,dc=da-test,dc=ru Enter LDAP Password: dn: dc=da-test,dc=ru dc: example objectClass: top objectClass: domain dn: ou=users,dc=da-test,dc=ru ou: Users objectClass: top objectClass: organizationalUnit description: Пользователи организации dn: ou=groups,dc=da-test,dc=ru ou: Groups objectClass: top objectClass: organizationalUnit description: Группы организации
Когда основные единицы созданы, добавим еще несколько групп:
- sysadmin - группа системных администраторов;- nssproxy - группа, которая будет использоваться для опроса сервера вместо анонимного запроса;
- tester - группа для тестирования различных механизмов.Для добавления этих групп создадим новый LDIF-файл с именем init-groups.ldif и содержимым:
Копировать в буфер обменаdn: cn=sysadmin,ou=groups,dc=da-test,dc=ru cn: sysadmin objectClass: top objectClass: posixGroup gidNumber: 1100 description: Системные администраторы dn: cn=nssproxy,ou=groups,dc=da-test,dc=ru cn: nssproxy objectClass: top objectClass: posixGroup gidNumber: 801 description: Служебная группа опроса сервера dn: cn=test.group,ou=groups,dc=da-test,dc=ru cn: tester objectClass: top objectClass: posixGroup gidNumber: 1101 description: Группа для тестирования
Затем применяем LDIF в корневой каталог:
Копировать в буфер обменаsudo ldapmodify -a -xZZWD cn=admin,dc=da-test,dc=ru -f init-groups.ldif Enter LDAP Password: adding new entry "cn=sysadmin,ou=groups,dc=da-test,dc=ru" adding new entry "cn=nssproxy,ou=groups,dc=da-test,dc=ru" adding new entry "cn=testing,ou=groups,dc=da-test,dc=ru"
После создания групп, как правило, нужно создать пользователей для них:
- user1 - основной пользователь, под которым мы будем работать;
- nssproxy - пользователь, который будет использоваться для опроса сервера без необходимости выполнения анонимного запроса.- tester - как и одноименная группа, этот пользователь будет использоваться для проверки применяемых настроек.
Создаем еще один конфигурационный файл с именем init-users.ldif, в которои мы опишем новых пользователей
Копировать в буфер обменаdn: cn=user1,ou=users,dc=da-test,dc=ru uid: user1 gecos: User #1 objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}EdXkkdLF2JaWE4TkgDxmHwgXjqRHC1Dw shadowLastChange: 15140 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1100 gidNumber: 1100 homeDirectory: /home/user1 dn: cn=nssproxy,ou=users,dc=da-test,dc=ru uid: nssproxy gecos: Network Service Switch Proxy User objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}EdXkkdLF2JaWE4TkgDxmHwgXjqRHC1Dw shadowLastChange: 15140 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/false uidNumber: 801 gidNumber: 801 homeDirectory: /home/nssproxy dn: cn=tester,ou=users,dc=da-test,dc=ru uid: tester gecos: Tester objectClass: top objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword: {SSHA}EdXkkdLF2JaWE4TkgDxmHwgXjqRHC1Dw shadowLastChange: 15140 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 1101 gidNumber: 1101 homeDirectory: /home/tester
Обратите внимание, что пользователи связаны с группами с помощью атрибута gidNumber
Теперь добавьте пользователей в каталог с помощью команды: Копировать в буфер обменаsudo ldapmodify -a -xZZWD cn=admin,dc=da-test,dc=ru -f init-users.ldif Enter LDAP Password: adding new entry "cn=user1,ou=users,dc=da-test,dc=ru" adding new entry "cn=nssproxy,ou=users,dc=da-test,dc=ru" adding new entry "cn=tester,ou=users,dc=da-test,dc=ru"
Далее нужно установить пароли для всех пользователей. Обратите внимание, что сначала будет предложено дважды ввести пароль изменяемой записи пользователя, а затем пароль администратора службы каталогов:
Копировать в буфер обменаsudo ldappasswd -xZZWD cn=admin,dc=da-test,dc=ru -S cn=user1,ou=users,dc=da-test,dc=ru New password: Re-enter new password: Enter LDAP Password: sudo ldappasswd -xZZWD cn=admin,dc=da-test,dc=ru -S cn=nssproxy,ou=users,dc=da-test,dc=ru New password: Re-enter new password: Enter LDAP Password: sudo ldappasswd -xZZWD cn=admin,dc=da-test,dc=ru -S cn=tester,ou=users,dc=da-test,dc=ru New password: Re-enter new password: Enter LDAP Password:
Если теперь посмотреть журнал /var/log/slapd.log, то можно увидеть строки, говорящие об изменении записи:
Копировать в буфер обмена... slapd[5319]: conn=1022 op=1 PASSMOD id="cn=nssproxy,ou=users,dc=da-test,dc=ru" new slapd[5319]: conn=1022 op=1 RESULT oid= err=0 text= ...
Для того, чтобы пользователь nssproxy имел доступ к информации каталога, необходимо поправить ACL базы данных с пользователями и группами.
Этого можно добиться с помощью изменения ACL, чтобы предоставить доступ пользователю nssproxy на чтение атрибутов учётных записей.Создадим конфигурационный файл init-nssproxy.ldif и добавим следующий текст:
Копировать в буфер обменаdn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external ,cn=auth" manage by * break - add: olcAccess olcAccess: {1}to attrs=userPassword by self write by anonymous auth - add: olcAccess olcAccess: {2}to * by self read by dn.base="cn=nssproxy,ou=users,dc=da-test,dc=ru" read
После чего сохраним файл и загрузим LDIF-файл с изменениями:
Копировать в буфер обменаsudo ldapmodify -xZZWD cn=admin,dc=da-test,dc=ru -f init-nssproxy.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Теперь нужно проверить, можно ли просматривать информацию в каталоге от имени nssproxy. Для этого выполним запрос с использованием его учётных данных. Результатом запроса должно быть всё DIT (Directory Information Tree).
Копировать в буфер обменаldapsearch -xZZLLLWD cn=nssproxy,ou=users,dc=da-test,dc=ru "(objectClass=*)" Enter LDAP Password: dn: dc=da-test,dc=ru ...
Не забудьте проверить, что другие учётные записи пользователей не имеют доступа к DIT:
Копировать в буфер обменаldapsearch -xZZLLLWD cn=pablo,ou=users,dc=da-test,dc=ru "(objectClass=*)" Enter LDAP Password: No such object (32)
С помощью OpenSSL в этом разделе будет создан импровизированный удостоверяющий центр и с последующей настройкой TLS.
Идея сертификата - это наличие третьей стороны, которой доверяют две другие стороны информационного обмена. Предполагается, что таких третьих сторон немного, и их открытые ключи всем известны каким-либо способом, например, хранятся в операционной системе или публикуются в журналах. Таким образом, подлог открытого ключа третьей стороны легко выявляется.Для начала создадим централизованную инфраструктуру открытых ключей (PKI). Для этого сгенерируем пару закрытый ключ/корневой сертификат УЦ. Сертификат УЦ также будет подписан этим же закрытым ключом (т. е. станет самоподписанным).
После сгенерируем новый закрытый ключ для службы каталогов и создадим для неё сертификат, подписанный закрытым ключом УЦ. При этом клиентские рабочие станции должны знать только корневой сертификат. Используя его, они могут установить безопасное соединение с любым сервером, который имеет закрытый ключ и соответствующий ему сертификат, подписанный УЦ.Такие пары ключей и сертификатов можно создавать для множества задач. Например, при использовании публикаций веб-сайтов на веб-сервере с использованием HTTPS.
УЦ рекомендуется настраивать на отдельном компьютере, не имеющем подключения к сети. Но в рамках этой статьи, для того чтобы упростить процесс настройки, УЦ будет размещен на сервере службы каталогов.Первым делом создадим директорию для УЦ (CA) и следом установим безопасные права доступа. Затем зададим значение umask таким, чтобы вновь создаваемые файлы имели права доступа чтения и записи только для создавшего их пользователя:
Копировать в буфер обменаsudo mkdir /root/CA sudo chmod u=rwx,g=,o= /root/CA sudo cd /root/CA sudo umask 066
В конфигурационном файле /etc/ssl/openssl.cnf в секции [ CA_default ] поменяем значение директивы dir = ./demoCA на dir = ./. В этом же разделе директивой default_days задаётся срок действия выпускаемых сертификатов. Можете поменять её значение по своему усмотрению.
Файлы index.txt и serial будут выступать в качестве базы данных, чтобы отслеживать статус выпущенных закрытых ключей и сертификатов.
Создадим структуру каталогов и файлов для УЦ:
Копировать в буфер обменаsudo mkdir certs crl newcerts private sudo chmod 700 private sudo touch index.txt sudo echo 1000 > serial
Сгенерируем закрытый ключ УЦ с длиной 4096 бит. Он должен храниться особенно бережно. Поэтому защитим его при помощи шифра AES. Вам будет предложено ввести пароль для доступа к новому закрытому ключу. Скопируйте его и сохраните в надежном месте. Без этого пароля выпустить новые сертификаты не получится.
Копировать в буфер обменаsudo openssl genrsa -aes256 -out private/rootca.key 4096
Поменяем права доступа к новому ключу, чтобы случайно его не удалить:
Копировать в буфер обменаsudo chmod 400 private/rootca.key
Откроем конфигурационный файл OpenSSL (openssl.cnf) и найдем секции [ usr_cert ] и [ v3_ca ]. Убедитесь, что в них присутствуют следующие директивы:
Копировать в буфер обмена[ usr_cert ] # Эти расширения будут добавлены при подписывании запроса УЦ. basicConstraints=CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_ca ] # Расширения для типового УЦ subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = CA:true keyUsage = cRLSign, keyCertSign
Теперь мы можем выпустить корневой сертификат УЦ, подписав его закрытым ключом rootca.key. Так как это сертификат УЦ, используем расширение v3_ca:
Копировать в буфер обмена[ usr_cert ] # Эти расширения будут добавлены при подписывании запроса УЦ. basicConstraints=CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_ca ] # Расширения для типового УЦ subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = CA:true keyUsage = cRLSign, keyCertSign
В качестве алгоритма хэширования используем SHA-2 (подвид SHA-256). Мы также указываем количество дней, в течении которых сертификат будет действителен.
С помощью модификатора subj заносим в сертификат информацию: Копировать в буфер обменаC - Country Name (страна) - RU ST - State or Province Name (штат или провинция) - Moscow L - Locality Name (город) - Moscow O - Organization Name (наименование организации) - MyCompany OU - Organizational Unit Name (наименование подразделения) - IT CN - Common Name (имя субъекта или FQDN сервера) - ca-server emailAddress - Email Address (адрес электронной почты) - admin@da-test.ru
Чтобы посмотреть содержимое сертификата выполните следующую команду:
Копировать в буфер обменаsudo openssl x509 -in certs/rootca.crt -noout -text
УЦ готов к выпуску сертификата для сервера службы каталогов.
Как правило, закрытые ключи клиентов УЦ не должны храниться в самом УЦ. Клиент может сам сформировать ключевую пару и прислать в УЦ лишь запрос на подпись (Certificate Signing Request, CSR). Запрос содержит открытый ключ. В тестовых целях мы будем создавать все ключи и хранить их в одном месте. В организации, которая серьёзно подходит к проблемам безопасности, такой процесс работы может быть неприемлемым.Создадим закрытый ключ для сервера службы каталогов в директории /root/CA:
Копировать в буфер обменаsudo openssl genrsa -out private/da1.da-test.ru.key 4096 sudo chmod 400 private/da1.da-test.ru.key
Сгенерируем запрос на подпись сертификата. Наименование организации (MyCompany) должно совпадать с наименованием в корневом сертификате УЦ. В качестве Common Name укажем FQDN сервера службы каталогов:
Копировать в буфер обменаsudo openssl req -sha256 -new -key private/da1.da-test.ru.key -out certs/da1.da-test.ru.csr -subj /C=RU/ST=Moscow/L=Moscow/O=MyCompany/OU=IT/CN=da1.da-test.ru/emailAddress=admin@da-test.ru
Следующим шагом должно быть платное подписание запроса CSR существующим доверенным УЦ (например, Verisign). Но не обязательно использовать платные сервисы УЦ, если у вас нет корпоративного CA, или это просто тестовая конфигурация. В тестовых целях мы можем подписать запрос с помощью собственного УЦ:
Копировать в буфер обменаsudo openssl ca -extensions usr_cert -notext -md sha256 -keyfile private/rootca.key -cert certs/rootca.crt -in certs/da1.da-test.ru.csr -out certs/da1.da-test.ru.crt sudo chmod 444 certs/da1.da-test.ru.crt
Далее создадим директорию для ключевой информации сервера и поместим туда получившиеся файлы:
Копировать в буфер обменаsudo mkdir /etc/ldap/ssl sudo chown openldap:openldap /etc/ldap/ssl sudo chmod 0500 /etc/ldap/ssl sudo cp certs/da1.da-test.ru.crt private/da1.da-test.ru.key /etc/ldap/ssl
После установим права доступа для ключевой информации:
Копировать в буфер обменаsudo chown openldap:openldap /etc/ldap/ssl/{da1.da-test.ru.crt,da1.da-test.ru.key} sudo chmod 0400 /etc/ldap/ssl/{da1.da-test.ru.crt,da1.da-test.ru.key}
И в конце поместим корневой сертификат в каталог с сертификатами операционной системы и зададим для него права доступа:
Копировать в буфер обменаsudo cp certs/rootca.crt /etc/ssl/certs/ sudo chmod 0644 /etc/ssl/certs/rootca.crt
Запрос CSR больше не требуется. Вы можете удалить его на свое усмотрение:
Копировать в буфер обменаsudo rm -rf certs/da1.da-test.ru.csr
Каталог /root/CA теперь выполняет роль удостоверяющего центра. Аналогичным образом его можно создать на другой машине, тогда нужно будет копировать секретные ключи и подписанные сертификаты по сети с помощью scp или через съёмный носитель. Хорошей практикой считается хранение этой директории на отдельном носителе и монтировать его только для выпуска новых сертификатов. Сам носитель можно хранить в защищенном месте, например, в сейфе. Процесс создания новых пар ключ-сертификат в будущем будет состоять из трёх этапов:
- генерация секретного ключа и запроса на подписание сертификата;- подписание сертификата с помощью закрытого ключа УЦ (rootca.key);
- перемещение новых секретного ключа и подписанного сертификата в директории, где они будут использоваться.Осталось только настроить OpenLDAP на работу с TLS. Для этого вернёмся во временный каталог:
Копировать в буфер обменаcd ~/ldap
И создадим конфигурационный файл init-tls-config.ldif для внесения в каталог конфигурации TLS и добавим в него:
Копировать в буфер обменаdn: cn=config add: olcTLSVerifyClient olcTLSVerifyClient: never - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/ssl/da1.da-test.ru.crt - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/ssl/da1.da-test.ru.key - add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt
Этими настройками мы указываем службе slapd, где лежит сертификат и ключ, где лежит корневой сертификат УЦ. С помощью olcTLSVerifyClient: never указываем, что от клиентов требовать наличие сертификата не нужно.
Теперь загрузим конфигурацию TLS в службу каталогов: Копировать в буфер обменаsudo ldapmodify -QY EXTERNAL -H ldapi:/// -f init-tls-config.ldif modifying entry "cn=config"
После загрузки сервер OpenLDAP должен поддерживать расширения TLS. Чтобы проверить это, выполним команду:
Копировать в буфер обменаsudo ldapsearch -QLLLY EXTERNAL -H ldapi:/// -b cn=config -s base | grep -i tls olcTLSCertificateFile: /etc/ldap/ssl/da1.da-test.ru.crt olcTLSCertificateKeyFile: /etc/ldap/ssl/da1.da-test.ru.key olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt olcTLSVerifyClient: never
Вновь отредактируем конфигурационный файл /etc/ldap/ldap.conf и включим поддержку TLS:
Копировать в буфер обменаBASE dc=example,dc=com URI ldap://da1.da-test.ru TLS_CACERT /etc/ssl/certs/rootca.crt TLS_REQCERT demand TIMELIMIT 15 TIMEOUT 20
Обычно для конфигурации cn=config перезагрузка службы не требуется, но, чтобы созданная ключевая информация была применена, придётся это сделать:
Копировать в буфер обменаsudo systemctl restart slapd
Осталось проверить соединение с сервером с использованием TLS (модификатор -ZZ). Для этого выполним запрос с использованием DN администратора:
Копировать в буфер обменаsudo ldapsearch -xZZLLLWD cn=admin,dc=da-test,dc=ru -b cn=config -s base Enter LDAP Password: dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/slapd/slapd.args olcPidFile: /var/run/slapd/slapd.pid olcTLSCACertificateFile: /etc/ssl/certs/rootca.crt olcTLSCertificateFile: /etc/ldap/ssl/da1.da-test.ru.crt olcTLSCertificateKeyFile: /etc/ldap/ssl/da1.da-test.ru.key olcTLSVerifyClient: never
Обратите внимание, что в запросе ldapsearch нам не пришлось указывать имя хоста (-H ldap://da1.da-test.ru). Всё потому что оно указано в файле /etc/ldap/ldap.conf. Что касается TLS, то во время инициирования соединения клиент (на данном этапе клиентский запрос выполняет сам сервер) получает от сервера его подписанный сертификат (da1.da-test.ru.crt). Клиент может ничего не знать о сервере, но у него есть сертификат CA (rootca.crt), с помощью которого и проверяется сервер.
Для начала установим необходимые пакеты:
Копировать в буфер обменаsudo apt-get install ldap-utils libnss-ldapd libpam-ldapd
При установке будут предложены некоторые настройки. Далее мы еще будем вносить в конфигурацию изменения, но это нужно сделать, чтобы все пакеты установились правильно:
Копировать в буфер обменаURI сервера LDAP: ldap://da1.da-test.ru; База поиска сервера LDAP: dc=da-test,dc=ru; Имена настраиваемых служб: group,netgroup,passwd,shadow.
Прежде чем делать запросы к LDAP-серверу, проверим параметры клиента в /etc/ldap/ldap.conf:
Копировать в буфер обменаBASE dc=da-test,dc=ru URI ldap://da1.da-test.ru TLS_CACERT /etc/ssl/certs/rootca.crt TLS_REQCERT demand TLS_CRLFILE /etc/ssl/rootca.crl TIMELIMIT 15 TIMEOUT 20
Конечно, для того, чтобы всё заработало, сертификат нашего Certificate Authority (rootca.crt) и CRL-файл (rootca.crl) должны быть на месте (нужно их будет скопировать с сервера УЦ, если вы еще этого не сделали).
Проверим работоспособность простым запросом. В результате должен быть вывод (в статье отображен сокращенный вид): Копировать в буфер обмена$ ldapsearch -xZZLLLWD cn=nssproxy,ou=users,dc=da-test,dc=ru Enter LDAP Password: dn: dc=da-test,dc=ru ...
Изменим конфигурацию локальной службы имён LDAP в файле /etc/nslcd.conf. Для начала измените значение директивы bindpw на пароль записи cn=nssproxy,ou=users,dc=da-test,dc=ru, который мы задавали ранее:
Копировать в буфер обменаuid nslcd gid nslcd uri ldap://da1.da-test.ru base dc=da-test,dc=ru binddn cn=nssproxy,ou=users,dc=da-test,dc=ru bindpw <Пароль пользователя nssproxy> rootpwmoddn cn=admin,dc=da-test,dc=ru base group ou=groups,dc=da-test,dc=ru base passwd ou=users,dc=da-test,dc=ru base shadow ou=users,dc=da-test,dc=ru bind_timelimit 5 timelimit 10 idle_timelimit 60 ssl start_tls tls_reqcert allow tls_cacertfile /etc/ssl/certs/rootca.crt nss_initgroups_ignoreusers bin,daemon,games,lp,mail,nobody,nslcd,root,sshd,sync,uucp nss_initgroups_ignoreusers sys,man,news,proxy,www-data,backup,list,irc,gnats,landscape
Описание использованных директив:
Теперь поменяем права доступа к nslcd.conf, потому что теперь в нём хранится информация для аутентификации:
Копировать в буфер обменаsudo chmod 600 /etc/nslcd.conf sudo chown nslcd:nslcd /etc/nslcd.conf
Проверим содержимое /etc/nsswitch.conf:
Копировать в буфер обменаpasswd: compat ldap group: compat ldap shadow: compat ldap hosts: files dns networks: files protocols: db files services: db files ethers: db files rpc: db files netgroup: nis ldap
Убедимся в том, что служба nslcd запускается при старте системы и перезапустим ее:
Копировать в буфер обменаsudo systemctl enable nslcd sudo systemctl restart nslcd
Проверим, что в системе клиентской станции отсутствует учётная запись с именем nssproxy. Следующая команда должна выполняться без результата:
Копировать в буфер обменаgrep nssproxy /etc/passwd
И убедимся, что кэширующий служба службы имён загружается при старте системы и перезапустим ее:
Копировать в буфер обменаsudo systemctl enable nscd sudo systemctl restart service nscd Теперь сделаем запросы к LDAP-серверу, используя настроенную систему: getent passwd tester tester:x:1101:1101:Tester Tester:/home/tester:/bin/bash getent group tester tester:*:1101:
Для того, чтобы проверить доступность информации о пароле потребуется выполнить getent от имени пользователя root:
Копировать в буфер обменаgetent shadow tester
tester:*:15140:0:99999:7:::0
Вышеприведённые результаты команд означают, что система рабочей станции может осуществлять поиск по данным пользователей и групп в каталоге OpenLDAP.
Для того, чтобы домашние директории пользователей создавались автоматически, отредактируем файл настроек домашней сессии PAM: Копировать в буфер обменаsudo nano /etc/pam.d/common-session
Добавим в него текст:
Копировать в буфер обменаsession required pam_mkhomedir.so skel=/etc/skel umask=0002
Далее выполним команду:
Копировать в буфер обменаsu - tester
Мы должны получить приглашение командной строки пользователя tester.
Теперь попробуем зайти на клиентскую рабочую станцию по сети с использованием ssh под учётной записью tester.Служба ssh по умолчанию должна работать с поддержкой PAM (и, соответственно, поддерживать аутентификацию через LDAP). Но на всякий случай приведём добавим текст в /etc/ssh/sshd_config:
Копировать в буфер обменаAddressFamily inet AllowGroups sysadmin tester SyslogFacility AUTHPRIV PasswordAuthentication yes AllowTcpForwarding no ClientAliveInterval 120 ClientAliveCountMax 2
Обратите внимание на строку с директивой AllowGroups. С помощью неё мы ограничиваем список групп пользователей, которые могут быть аутентифицированы через ssh..
Проверим работу с использованием любого другого компьютера. Например, выполним на компьютере сервера имен: Копировать в буфер обменаssh tester@da-test.ru Password: tester@da-test.ru:~$
Если появляется приглашение командной строки, значит всё в порядке!
Осталось проверить вывод службы каталогов в /var/log/slapd.log на наличие ошибок. Например, там могут быть следующие строки: Копировать в буфер обменаda1 slapd[2109]: <= mdb_equality_candidates: (objectClass) not indexed da1 slapd[2109]: <= mdb_equality_candidates: (uid) not indexed
С помощью следующей команды мы можем убедиться, что в каталоге пока нет никаких индексов:
Копировать в буфер обменаsudo ldapsearch -xZZLLLWD cn=admin,dc=da-test,dc=ru -b olcDatabase={1}mdb,cn=config olcDbIndex Enter LDAP Password: dn: olcDatabase={1}mdb,cn=config
Для решения проблемы, надо создать индексы для атрибутов из журнала /var/log/slapd.log.
Для этого создадим ещё один LDIF-файл init-account-indexes.ldif и добавим в него текст: Копировать в буфер обменаdn: olcDatabase={1}mdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: default pres,eq - add: olcDbIndex olcDbIndex: uid - add: olcDbIndex olcDbIndex: cn,sn pres,eq,sub - add: olcDbIndex olcDbIndex: objectClass eq - add: olcDbIndex olcDbIndex: memberUid eq - add: olcDbIndex olcDbIndex: uniqueMember eq - add: olcDbIndex olcDbIndex: uidNumber - add: olcDbIndex olcDbIndex: gidNumber eq
Далее загрузим конфигурацию в каталог:
Копировать в буфер обменаsudo ldapadd -xZZWD cn=admin,dc=da-test,dc=ru -f init-account-indexes.ldif Enter LDAP Password: modifying entry "olcDatabase={1}mdb,cn=config"
Проверим результат изменений:
Копировать в буфер обменаsudo ldapsearch -xZZLLLWD cn=admin,dc=da-test,dc=ru -b olcDatabase={1}mdb,cn=config olcDbIndex Enter LDAP Password: dn: olcDatabase={1}mdb,cn=config olcDbIndex: default pres,eq olcDbIndex: uid olcDbIndex: cn,sn pres,eq,sub olcDbIndex: objectClass eq olcDbIndex: memberUid eq olcDbIndex: uniqueMember eq olcDbIndex: uidNumber olcDbIndex: gidNumber eq
После этих изменений в журнале /var/log/slapd.log не должно быть ошибок.
sudo apt-get install krb5-kdc krb5-pkinit krb5-admin-server wamerican libsasl2-modules-gssapi-mit
В разделе "4. Настройка OpenLDAP" была установилена схема Kerberos для OpenLDAP сервера. Чтобы проверить, что схема установлена, выполните:
Копировать в буфер обменаsudo ldapsearch -QLLLY EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn | grep -i kerberos dn: cn={11}kerberos,cn=schema,cn=config
В ней содержится много объектов. Чтобы посмотреть их все, используйте следующую команду:
Копировать в буфер обменаsudo ldapsearch -QLLLY EXTERNAL -H ldapi:/// -b cn={11}kerberos,cn=schema,cn=config | grep NAME | cut -d' ' -f5 | sort
Она должна вернуть список объектов. Если новых атрибутов Kerberos LDAP нет, то kdb5_ldap_util(8) выдаст следующую ошибку:
Копировать в буфер обменаkdb5_ldap_util: Kerberos Container create FAILED: No such object while creating realm 'DA-TEST.RU'
Итак, у нас есть набор схемы данных и объекты, в котором отсутствует контейнер для принципалов Kerberos:
Создадим этот контейнер вместе с пользователем и группой, которые будут использоваться Kerberos для взаимодействия с сервером OpenLDAP. Для этого создадим и установим LDIF-файл init-kerberos.ldif: Копировать в буфер обмена# Создание контейнера для Kerberos dn: cn=kerberos,ou=services,dc=da-test,dc=ru cn: kerberos objectClass: top objectClass: krbContainer # Создание группы krbadmin dn: cn=krbadmin,ou=groups,dc=da-test,dc=ru objectClass: top objectClass: posixGroup cn: krbadmin gidNumber: 800 description: Kerberos administrator's group. # Создание пользователя krbadmin dn: cn=krbadmin,ou=users,dc=da-test,dc=ru objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: posixAccount objectClass: top cn: krbadmin givenName: Kerberos Administrator mail: kerberos.admin@da-test.ru sn: krbadmin uid: krbadmin uidNumber: 800 gidNumber: 800 homeDirectory: /home/krbadmin loginShell: /bin/false displayname: Kerberos Administrator
Далее загружаем конфигурационный файл в сервер каталогов:
Копировать в буфер обменаsudo ldapadd -xZZWD cn=admin,dc=da-test,dc=ru -f ~/ldap/9.1-kerberos.ldif Enter LDAP Password: adding new entry "cn=kerberos,ou=services,dc=da-test,dc=ru" adding new entry "cn=krbadmin,ou=groups,dc=da-test,dc=ru" adding new entry "cn=krbadmin,ou=users,dc=da-test,dc=ru"
Теперь зададим пароль для пользователя krbadmin. Рекомендуетя сохранить пароль в надежном месте.
Копировать в буфер обменаsudo ldappasswd -xZZWSD "cn=admin,dc=da-test,dc=ru" "cn=krbadmin,ou=users,dc=da-test,dc=ru"
Когда пароль будет установлен, создадим конфигурационный файл Kerberos /etc/krb5.conf и добавим в него текст:
Копировать в буфер обмена[logging] default = SYSLOG:INFO:LOCAL1 kdc = SYSLOG:NOTICE:LOCAL1 admin_server = SYSLOG:WARNING:LOCAL1 [libdefaults] default_realm = DA-TEST.RU dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] DA-TEST.RU = { kdc = da1.da-test.ru admin_server = da1.da-test.ru default_domain = da-test.ru database_module = openldap_ldapconf } [domain_realm] .da-test.ru = DA-TEST.RU da-test.ru = DA-TEST.RU [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false } [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kerberos_container_dn = cn=kerberos,ou=services,dc=da-test,dc=ru ldap_kdc_dn = cn=krbadmin,ou=users,dc=da-test,dc=ru ldap_kadmind_dn = cn=krbadmin,ou=users,dc=da-test,dc=ru ldap_service_password_file = /etc/krb5.d/stash.keyfile ldap_servers = ldapi:/// ldap_conns_per_server = 5 }
Теперь создадим список контроля доступа (ACL) администратора Kerberos. ACL и ACL OpenLDAP - это не одно и то же. Создадим файл /etc/krb5kdc/kadm5.acl и добавим в него содержимым:
Копировать в буфер обмена*/admin@DA-TEST.RU *
Далее изменим файл /etc/krb5kdc/kdc.conf:
Копировать в буфер обмена[kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] DA-TEST.RU = { #master_key_type = aes256-cts acl_file = /etc/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /etc/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
Создаем скрытую директорию для пароля. В файле /etc/krb5.conf она указана в переменной ldap_service_password_file:
Копировать в буфер обменаsudo mkdir /etc/krb5.d sudo chmod u=rwx,g=,o= /etc/krb5.d
Извлечем пароль пользователя krbadmin, c помощью kdb5_ldap_util:
Копировать в буфер обменаsudo kdb5_ldap_util -D "cn=admin,dc=da-test,dc=ru" stashsrvpw -f /etc/krb5.d/stash.keyfile cn=krbadmin,ou=users,dc=da-test,dc=ru
Вам будет предложено ввести мастер-пароль базы данных. Внимание! Вам нужно обязательно сохранить этот пароль!
Далее в терминале выполните следующую команду для добавления записей Kerberos в базу данных OpenLDAP:
Копировать в буфер обменаsudo kdb5_ldap_util -D "cn=admin,dc=da-test,dc=ru" create -subtrees "cn=kerberos,ou=services,dc=da-test,dc=ru" -r DA-TEST.RU -s
Эта команда создаст необходимые записи в cn=kerberos,ou=services,dc=da-test,dc=ru.
Новые записи Kerberos для OpenLDAP можно посмотреть с помощью команды: Копировать в буфер обменаsudo ldapsearch -QLLLY EXTERNAL -H ldapi:/// -b cn=kerberos,ou=services,dc=da-test,dc=ru dn
Далее дадим права доступа на чтение/запись администратору Kerberos к поддереву cn=kerberos,ou=services,dc=da-test,dc=ru. Никакой другой пользователь не должен иметь доступа к этой информации, кроме администратора каталога.
Создаем еще один конфигурационный файл init-kerberos-acl.ldif и добавляем в него текст: Копировать в буфер обменаdn: olcDatabase={1}mdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * break olcAccess: {1}to attrs=userPassword,userPKCS12 by self write by anonymous auth olcAccess: {2}to attrs=shadowLastChange by self write olcAccess: {3}to dn.subtree="cn=kerberos,ou=services,dc=da-test,dc=ru" by dn.exact="cn=krbadmin,ou=users,dc=da-test,dc=ru" manage olcAccess: {4}to * by dn.base="cn=nssproxy,ou=users,dc=da-test,dc=ru" read by self read
И после этого загружаем конфигурационный файл в сервер каталогов:
Копировать в буфер обменаsudo ldapmodify -QY EXTERNAL -H ldapi:/// -f init-kerberos-acl.ldif
Проверим, что новые ACL работают. Администраторы должны иметь доступ к поддереву cn=kerberos,ou=services,dc=da-test,dc=ru. Пользователь nssproxy не должен обнаружить само существование контейнера Kerberos, а krbadmin должен не только видеть контейнер, но и иметь для него права на чтение/запись. Кроме этого, нужно убедиться, что обычные пользователи всё ещё могут использовать сервер OpenLDAP для аутентификации и что они могут менять пароли самостоятельно.
С помощью запроса к cn=kerberos,ou=services,dc=da-test,dc=ru от имени krbadmin мы можем получить параметры контейнера: Копировать в буфер обменаsudo ldapsearch -xZZLLLWD cn=krbadmin,ou=users,dc=da-test,dc=ru -b cn=kerberos,ou=services,dc=da-test,dc=ru dn
Следующая команда должна завершиться с ошибкой No such object (32):
Копировать в буфер обменаsudo ldapsearch -xZZLLLWD cn=nssproxy,ou=users,dc=da-test,dc=ru -b cn=kerberos,ou=services,dc=da-test,dc=ru dn
Теперь c любого другого хоста (например, app1.da-test.ru) убедимся, что пользователь, учётная запись которого хранится на сервере каталогов, может менять свой пароль:
Копировать в буфер обменаsu - tester passwd (current) LDAP Password: Новый пароль : Повторите ввод нового пароля : passwd: password updated successfully
Возвращаемя на хост, на котором расположена служба каталогов, и настраиваем журналирование событий с помощью правки конфигурации rsyslog (все строки добавляются в конец файлоа /etc/rsyslog.conf):
Копировать в буфер обмена... # Журнал krb5-kdc в /var/log/krb5kdc.log: if $programname == 'krb5kdc' then /var/log/krb5kdc.log & ~ # Журнал krb5-admin-server в /var/log/kadmind.log: if $programname == 'kadmind' then /var/log/kadmind.log & ~
После сразу же создаем файлы этих журналов и зададим для них права доступа:
Копировать в буфер обменаsudo touch /var/log/{krb5kdc,kadmind}.log sudo chmod 0640 /var/log/{krb5kdc,kadmind}.log sudo chown syslog:adm /var/log/{krb5kdc,kadmind}.log
И настраиваем параметры ротации этих логов. Для этого создаем два конфигурационных файла:
Копировать в буфер обменаsudo namo /etc/logrotate.d/krb5kdc
После чего добавляем текст:
Копировать в буфер обмена/var/log/krb5kdc.log { daily missingok rotate 7 compress delaycompress notifempty }
И для службы krb5-admin-server:
Копировать в буфер обменаsudo nano /etc/logrotate.d/kadmind
В этот файл добавляем текст:
Копировать в буфер обмена/var/log/kadmind.log { daily missingok rotate 7 compress delaycompress notifempty }
Далее перезапускаем службу rsyslog, чтобы изменения вступили в силу. Добавим службы krb5-kdc и krb5-admin-server в автозапуск, а после запустим их:
Копировать в буфер обменаsudo systemctl restart rsyslog sudo systemctl enable krb5-kdc sudo systemctl enable krb5-admin-server sudo systemctl start krb5-kdc sudo systemctl start krb5-admin-server
Проверим, что службы запустились и работают на необходимых портах (krb5kdc - 88, kadmind - 464 и 749):
Копировать в буфер обменаss -tan | egrep ':88|:464|:749' LISTEN 0 2 *:749 *:* LISTEN 0 5 *:464 *:* LISTEN 0 5 *:88 *:*
Далее необходимо создать принципал для локального сервера. Затем принципала для пользователя tester.
Запускаем утилиту kadmin: Копировать в буфер обменаsudo su - kadmin.local Authenticating as principal admin/admin@DA-TEST.RU with password.
Далее создаём принципала хоста для текущего сервера:
Копировать в буфер обменаkadmin.local: addprinc -randkey host/da1.da-test.ru@DA-TEST.RU WARNING: no policy specified for host/da1.da-test.ru@DA-TEST.RU; defaulting to no policy Principal "host/da1.da-test.ru@DA-TEST.RU" created
После создания принципала сервера мы можем добавить его в набор ключей Kerberos (/etc/krb5.keytab):
Копировать в буфер обменаkadmin.local: ktadd host/da1.da-test.ru@DA-TEST.RU Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab. Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/etc/krb5.keytab. Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type des3-cbc-sha1 added to keytab FILE:/etc/krb5.keytab. Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type arcfour-hmac added to keytab FILE:/etc/krb5.keytab. Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type des-hmac-sha1 added to keytab FILE:/etc/krb5.keytab. Entry for principal host/da1.da-test.ru@DA-TEST.RU with kvno 2, encryption type des-cbc-md5 added to keytab FILE:/etc/krb5.keytab.
Следующим шагом создадим принципал для пользователя user1 и зададим для него пароль:
Копировать в буфер обменаkadmin.local: addprinc user1@DA-TEST.RU WARNING: no policy specified for user1@DA-TEST.RU; defaulting to no policy Enter password for principal "user1@DA-TEST.RU": Re-enter password for principal "user1@DA-TEST.RU": Principal "user1@DA-TEST.RU" created.
Теперь создадим принципал пользователя с правами администратора. С помощью файла /etc/krb5kdc/kadm5.acl, пользователи с префиксом /admin имеют права администратора на доступ к области Kerberos. Это значит, что они могут создавать и удалять записи пользователей и политики доступа.
Копировать в буфер обменаkadmin.local: addprinc user1/admin@DA-TEST.RU WARNING: no policy specified for user1/admin@DA-TEST.RU; defaulting to no policy Enter password for principal "user1/admin@DA-TEST.RU": Re-enter password for principal "user1/admin@DA-TEST.RU": Principal "user1/admin@DA-TEST.RU" created.
Проверим список текущих принципалов в области DA-TEST.RU:
Копировать в буфер обменаkadmin.local: get_principals K/M@DA-TEST.RU krbtgt/DA-TEST.RU@DA-TEST.RU kadmin/admin@DA-TEST.RU kadmin/changepw@DA-TEST.RU kadmin/history@DA-TEST.RU kadmin/da1.da-test.ru@DA-TEST.RU host/da1.da-test.ru@DA-TEST.RU user1@DA-TEST.RU user1/admin@DA-TEST.RU
С помощью команды getprinc можно посмотреть подробную информацию о принципале host/da1.da-test.ru@DA-TEST.RU:
Копировать в буфер обменаkadmin.local: getprinc host/da1.da-test.ru@DA-TEST.RU Principal: host/da1.da-test.ru@DA-TEST.RU Expiration date: [never] Last password change: [] Password expiration date: [none] Maximum ticket life: 1 day 00:00:00 Maximum renewable life: 0 days 00:00:00 Last modified: [] Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 6 Key: vno 2, aes256-cts-hmac-sha1-96, no salt Key: vno 2, aes128-cts-hmac-sha1-96, no salt Key: vno 2, des3-cbc-sha1, no salt Key: vno 2, arcfour-hmac, no salt Key: vno 2, des-hmac-sha1, no salt Key: vno 2, des-cbc-md5, no salt MKey: vno 1 Attributes: Policy: [none] kadmin.local: exit
Теперь проверим содержимое /etc/krb5.keytab:
Копировать в буфер обменаsudo klist -ek /etc/krb5.keytab Keytab name: FILE:/etc/krb5.keytab KVNO Principal ---- --------------------------------------------------------------- 2 host/da1.da-test.ru@DA-TEST.RU (aes256-cts-hmac-sha1-96) 2 host/da1.da-test.ru@DA-TEST.RU (aes128-cts-hmac-sha1-96) 2 host/da1.da-test.ru@DA-TEST.RU (des3-cbc-sha1) 2 host/da1.da-test.ru@DA-TEST.RU (arcfour-hmac) 2 host/da1.da-test.ru@DA-TEST.RU (des-hmac-sha1) 2 host/da1.da-test.ru@DA-TEST.RU (des-cbc-md5)
Как мы можем видеть, это список ключей шифрования, доступные для da1.da-test.ru.
С настройкой kerberos почти все закончено, только осталась ещё проблема, которую надо поправить. Эта проблема связана с ошибкой в журнале /var/log/slapd.log: Копировать в буфер обменаmdb_equality_candidates: (krbPrincipalName) not indexe
Для ее исправления создадим LDIF-файл init-kerberos-indexes.ldif, который внесёт поправки в индексы:
Копировать в буфер обменаdn: olcDatabase={1}mdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: krbPrincipalName eq - add: olcDbIndex olcDbIndex: ou eq
После этого внеснем правки в конфигурацию сервера каталогов:
Копировать в буфер обменаsudo ldapadd -QY EXTERNAL -H ldapi:/// -f init-kerberos-indexes.ldif
После загрузки конфигурации ошибка должна быть устранена.