Задача проста: Нужно адаптировать работу Webинтерфейса для управления LDAP сервером к сервису slapd. Да есть такая обертка, имя ей phpldapadmin. С ее помощью я смогу в удобном виде создавать группы, учетные записи, включать в группу учетные записи и т. д. Вообще последующая цель — это чтобы в локальной сети был сервис по типу службы каталогов Active Directory, но на Ubuntu 18.04 Server через который все мои сервисы, такие как: Redmine, OwnCloud, GLPI и т.д которыми я пользуюсь в повседневности могли авторизоваться централизованно. А не как сейчас для каждой системы, свой логин и свой пароль.

Работает!!! от 19.05.2019 23:57

Шаг №1: Подготавливаю систему Ubuntu 18.04 Server для последующего использования (образ который использовал: ubuntu-18.04.2-server-amd64.iso)

Шаг №2: Устанавливаю необходимые компоненты, т. е. OpenLDAP, Apache2 и т.д.

  • Administrator password: 712mbddr@
  • Confirm password: 712mbddr@

Создаваемый пароль выше — это для учетной записи cn=admin в Вашем OpenLDAP-сервисе.

Шаг №3: Затем запускаю режим конфигурирования разворачиваемого LDAPсервера:

  • BDB → База данных Беркли
  • HDB → Иерархическая база данных Беркли
  • MDB → обновления данных никогда не перезаписывают существующие данные; вместо этого обновления производят запись в новые страницы, таким образом создаётся новая версия базы данных. Те, кто выполняет чтение базы данных, когда бы они не производили доступ, всегда видят снимок базы данных в том состоянии, в котором она находилась перед началом транзакции на чтение, таким образом, они полностью изолированы от тех, кто производит запись. Из-за такой изоляции доступы на чтение не требуют блокировок, представление базы данных для них всегда самосогласовано.

Чтобы протестировать LDAP-соединение нужна утилита ldapwhoami:

anonymous → данный ответ, есть результат, поскольку команда ldapwhoami была запущена без аутентификации на сервере LDAP.

(если нужно использовать вторую версию протокола, то в конфигурационном файле slapd.conf нужно будет добавить опцию: allow bind_v2)

Чтобы в последствии найти конфигурационный файл slapd.conf:

Теперь проверяю, что доступ к развернутому LDAPсерверу присутствует:

если в выводе присутствует строки содержимого, а не сообщение об ошибке, то значит LDAP-сервер работает, в противном случае, нужно проверить, а запущен ли сервис LDAP-сервера:

Шаг №4: Далее устанавливаю сам phpLdapAdmin (после Административный интерфейс по управлению LDAP-сервером будет через URL вида: http://IP&DNS/phpldapadmin). Установку из дефолтных репозитариев Ubuntu 18.04 Server не произвожу, т. к. идут многочисленные ошибки при авторизации которые либо патчатся определенными строками, но после порождают еще ошибки и так вечный круг.

Шаг №5: Открываю браузер и обращаюсь к текущему серверу на которой документирую шаги по разворачиванию Webоснастки phpldapadmin (Version 1.2.3 на момент написания данной заметки) on Ubuntu 18.04 Server: http://IP&DNS/phpldapdmin && http://172.33.33.6/phpldapadmin, вижу Web-оснастку, по сути такую же как я раньше смотрел что есть phpldapadmin на Ubuntu Trusty Server:

Стартовая страница управления OpenLDAP имя которой PHPLDAPADMIN

в левом фрейме нажимаю «Войти» и указываю идентификационные данные:

если видите надпись «Внимание: Соединение с сервером нешифровано.» не стоит об этом волноваться, т. к. мой сервис slapd работает по порт 389, как и развернутая служба каталогов Active Directory на Windows. Да, обмен данными идет без шифрования, по умолчанию. Пока оставляю так, главное чтобы все заработало, после поправим.

  • Login DN: cn=admin,dc=polygon,dc=local
  • Пароль: 712mbddr@

и нажимаю «Авторизация», в случае успеха и отсутствия ошибок «Аутентификация на сервере выполнена успешно и произведен вход на сервер»

Вход в домен polygon.local на OpenLDAP выполнен успешно.

В левой части где представлена структура домена: dc=polygon,dc=local спускаемся чуть ниже и видим строку с именем «Create new entry here» («Создать новый») нажимаем по ней, затем выбираем шаблон «Templates» («Шаблоны») — Generic: Organizational Role произойдет перекидывание на мастер создания объекта где нужно заполнять следующие поля:

  • Organisational Unit: IT

и нажимаю кнопку «Create Object» («Создать LDAP-запись») — “Commit” («Подтвердить»)

После перехожу в данный контейнер IT и внутри него по аналогии создаю учетную запись : -> «Create a child entry«: («Создать потомка”) шаблон («Templates«) – «Generic: User Account» («Общее: Пользователь«), но вот что заметил, мастер сообщает что в данном шаблоне не предопределен атрибут [gidNumber]

Error trying to get a non-existant value (appearance,password_hash)

This template uses a selection list for attribute [gidNumber], however the selection list is empty.
You may need to create some dependancy entries in your LDAP server so that this attribute renders with values. Alternatively, you may be able to define the appropriate selection values in the template file.

, т.е. при создании пользователя параметр “GID Number” никак нельзя предопределить, а это должен быть числовой идентификатор. Кстати говоря в Ubuntu Trusty при установке пакета phpldapadmin из дефолтных репозитариев ошибка была один в один, а значит и решается также:

Пробую снова и все та же ошибка.

На заметку: Механизм манипуляции данными LDIF —  хранит записи в текстовых файлах в формате LDIF и использует файловую систему для создания древовидной структуры базы данных.

Ладно, а если создавать пользователей, группы, через консоль командной строки, возможно это дело в данной оснастке и в ней что-то по-дефолту не так:

На основе схемы (LDIF файла → текстовый формат, описывающий представление содержимого каталога LDAP) создаю пользователя в данном домене Polygon.local:

А теперь назначаю созданному пользователю, пароль через консоль:

Создаю LDIF файл для новой группы:

А вот что еще, теперь если уже через Web-интерфейс создавать пользователя то проблем уже нет никаких, ошибки касательно отсутствия атрибута gidNumber уже больше нет.

Чтобы получить информацию по пользователю alektest в домене:

Чтобы создать группу и добавить в нее учетную запись через Webинтерфейс управления нужно использовать шаблон: Generic: Posix Group

  • GID Number: уже генерируется сам, в моем случае это уже 504
  • Group: group4
  • Users: отмечаем учетные записи галочкой все имеющие место быть в домене какие нужно добавить в группу.

а после нажимаю Create Object – Commit и все. Информационное сообщение в самом верху явное тому подтверждение: Creation successful! DN: cn=group4,ou=IT,dc=polygon,dc=local has been created.

Но можно из без ручного создания, к примеру:

  • Внутри ou=IT — Создать потомка - «Общее: Группа POSIX»
  • Внутри ou=IT — Создать потомка - «Общее: Пользователь» и указываем созданную группу выше и учетная запись создастся без каких-либо ошибок. Вот все должно быть сделано по порядку, а в обратном порядке и получаем ошибку отсутствия аттрибута gidNumber.

Работает. На этом у меня всё, дальше буду связывать сервисы через LDAP этого сервера с ролью OpenLDAP, с уважением автор блога Олло Александр aka ekzorchik.

От ekzorchik

Всем хорошего дня, меня зовут Александр. Я под ником - ekzorchik, являюсь автором всех написанных, разобранных заметок. Большинство вещей с которыми мне приходиться разбираться, как на работе, так и дома выложены на моем блоге в виде пошаговых инструкции. По сути блог - это шпаргалка онлайн. Каждая новая работа где мне случалось работать вносила новые знания и нюансы работы и соответственно я расписываю как сделать/решить ту или иную задачу. Это очень помогает. Когда сам разбираешь задачу, стараешься ее приподнести в виде структурированной заметки чтобы было все наглядно и просто, то процесс усвоения идет в гору.