Настройка интеграции Nextcloud с LDAP

Используемые термины: Nextcloud , Active Directory , FreeIPA , Linux .

Для хранения пользователей Nextcloud можно использовать как внутреннюю базу, так и внешнюю, например, сервер каталогов (LDAP). Так как реализации последнего могут быть разные, мы рассмотрим настройку для Active Directory и FreeIPA. Также мы выполним конфигурирование как в веб-интерфейсе, так и из командной строки.

Подготовка системы

1. Предполагается, что у нас уже есть настроенный сервер Nextcloud, например, по одной из инструкций:

2. Также необходимо убедиться в наличие модуля php-ldap. В противном случае в процессе настройки мы можем получить ошибку the library ldap is not available .

Чтобы посмотреть наличие модуля можно выполнить команду на сервере:

php -m | grep ldap

Если мы получим в ответ пустую строку, то необходимо установить пакет php-ldap и перезапустить службу, обрабатывающую скрипты php.

а) На Linux CentOS:

yum install php-ldap

systemctl restart php-fpm

systemctl restart httpd

* в данном примере мы перезапускаем и php-fpm , и httpd . В вашей системе может использоваться только один сервис.

б) На Linux Ubuntu:

apt install php-ldap

Если у нас установлена не нативная для репозитория версия php, то при установке расширения нужно добавлять в названии версию, например:

apt install php7.4-ldap

systemctl restart php7.4-fpm

systemctl restart apache2

* в данном примере мы перезапускаем и php7.4-fpm , и apache2 . В вашей системе может использоваться только один сервис. Имя для сервиса php7.4-fpm может быть другим — это зависит от версии PHP.

Посмотреть версию php можно командой:

php -v

Однако, в системе может быть установлено несколько версий PHP. Полный список можно посмотреть командой:

update-alternatives —list php

3. У нас должна быть учетная запись на сервере LDAP с правами чтения (DN user). От данной учетной записи будет выполняться подключение к серверу каталогов.

В моем примере будет создана запись с именем bind .

Включение модуля (приложения) интеграции с LDAP

По умолчанию, после установки Nextcloud приложение для интеграции с LDAP установлено, но не активировано. Рассмотрим 2 способа его включения.

Графический интерфейс

Переходим к списку приложений:

Переходим к управлению приложениями в Nextcloud

Находим LDAP user and group backend :

Находим приложение для интеграции с LDAP

Справа от приложения кликаем по Включить :

Включаем приложение

Командная строка

Из командной строки мы можем управлять Nextcloud с помощью утилиты occ, которая находится в каталоге самого портала.

Для включения приложения интеграции LDAP вводим команду…

а) на CentOS / Red Hat / Fedora:

sudo -u apache php /var/www/nextcloud/occ app:enable user_ldap

б) на Ubuntu / Debian:

sudo -u www-data php /var/www/nextcloud/occ app:enable user_ldap

* где в приведенных 2-х командах /var/www/nextcloud — путь, в котором установлен nextcloud.
* обе команды аналогичны, за исключением пользователя, от которого они запускаются. В CentOS apache , а в Ubuntu www-data .

Настройка интеграции

Рассмотрим также 2 способа — с помощью веб-интерфейса и командной строки.

Графический интерфейс

Переходим к настройкам, кликнув по значку пользователя и выбрав Настройки :

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

Выбираем подраздел Интеграция LDAP / AD :

Переходим в раздел настроек интеграции с LDAP

В открывшемся окне, на вкладке Сервер добавляем имя сервера (можно задать просто имя домена). После нажимаем кнопку Определить порт — мы должны увидеть порт для подключения к каталогу (как правило, 389 или 636):

Прописываем имя и порт сервера ldap

* в данном примере мы задали имя сервера (домена) remontka.local . Обратите внимание, что не все реализации LDAP позволяют системе определить порт — в таком случае, просто пропишем его вручную.

Ниже вводим данные для учетной записи, которая была нами подготовлена ранее — после кликаем по Сохранить учетные данные :

Указываем пользователя dn user для привязки к ldap

* как говорилось выше, для связки с ldap была создана запись bind . В разных реализациях LDAP могут быть разные требования для указания учетной записи. Например, во FreeIPA необходимо указать uid=bind,cn=users,cn=accounts,dc=remontka,dc=local .

Для базы поиска пользователей и групп можно просто кликнуть по Определить базу поиска DN — тогда будет определен корень домена. Или можно ввести самому конкретное подразделение:

Настраиваем корень для поиска объектов

* в моем примере данные из AD будут искаться в организационном юните Пользователи , который находится в корне домена remontka.local . Для других реализаций ldap определение может не работать — вводим вручную. Также, база должна быть соответствующей, например, для FreeIPA это cn=users,cn=accounts,dc=remontka,dc=local .

Нажимаем Проверить базу поиска DN :

Проверяем базу поиска объектов

Если наши настройки верны, мы должны увидеть фразу «Конфигурация в порядке»:

Мы должны получить сообщение об успешной настройке

Нажимаем Продолжить — мы должны перейти на вкладку Пользователи :

Переходим на вкладку пользователи

На данной вкладке можно ничего не трогать, или настроить дополнительные фильтры. После кликаем по кнопке Проверить настройки и пересчитать пользователей :

Проверяем, что система может найти пользователей в ldap

* в моем примере было найдено 388 пользователей.

В нижней части мы должны увидеть Конфигурация в порядке . Кликаем по Продолжить :

Мы должны увидеть сообщение, что конфигурация в порядке

Мы окажемся на странице Учетные данные :

Переходим на вкладку с учетными данными

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

Настройка поля для логина пользователей

* в данном примере мы оставляем значение по умолчанию — имена пользователя ldap.

Ниже мы можем проверить учетную запись, введя ее в специальное поле и нажав Проверить настройки :

Можно проверить пользователя

… если учетная запись найдена, мы увидим сообщение Пользователь найден и настройки проверены :

При успешной проверке мы получим сообщение, что пользователь найден

Внизу проверим, чтобы конфигурация была в порядке и нажимаем Продолжить :

Также должны увидеть сообщение о корректной настройке

На последней вкладке можно задать фильтры для групп или оставить по умолчанию.

Интеграция настроена. Пользователи будут загружаться из каталога ldap, но их идентификаторы будут отображаться в виде UID — это произвольные набор цифр и букв и его использовать не удобно. Чтобы изменить атрибут для имени nextcloud, кликаем по ссылке Эксперт :

Переходим к экспертным настройкам

Задаем атрибут из ldap, который мы будем использовать для внутреннего имени системы:

Вводим атрибут для отображения логина пользователя

* в данном примере мы задали атрибут sAMAccountName . Он характерен для логина в Active Directory. Для FreeIPA указываем uid .

Командная строка

Для дальнейшего удобства, определим переменную с пользователем, от которого работает веб-сервер.

а) для CentOS / Red Hat:

webuser=apache

б) для Ubuntu / Debian:

webuser=www-data

Теперь создаем конфигурацию:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:create-empty-config

Мы должны увидеть в ответ что-то на подобие:

Created new configuration with configID s01

* в данном примере создана конфигурация с идентификатором s01 — последующие команды будут вводиться с данным ID.

Посмотреть информацию о созданной конфигурации можно командой:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:show-config

Теперь задаем настройки.

Указываем ldap-сервер для подключения и порт:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapHost «remontka.local»

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapPort «389»

* в данном примере мы сервер remontka.local и порт 389 (не зашифрованные запросы к ldap).

Задаем пользователя, от которого будем выполнять подключения к каталогу:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapAgentName «bind»

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapAgentPassword «bind»; history -d $((HISTCMD-1))

* мы указали, что подключение будет выполняться от пользователя bind с паролем bind . Дополнительная команда history -d $((HISTCMD-1)) удалить из истории строку с паролем.

Задаем область поиска учетных записей:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapBase «ou=Пользователи,dc=remontka,dc=local»

Задаем фильтры пользователя, поля для логина и класса объекта:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapLoginFilter «(&(|(objectclass=person))(uid=%uid))»

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapUserFilter «(|(objectclass=person))»

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapUserFilterObjectclass «person»

Указываем поле для атрибута электронной почты:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapEmailAttribute «mail»

Проверяем конфигурацию:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:test-config s01

Мы должны увидеть:

The configuration is valid and the connection could be established!

Если же мы увидим ошибку, смотрим лог и устраняем проблемы:

tail /var/www/nextcloud/data/nextcloud.log

Активируем конфигурацию:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapConfigurationActive «1»

Пользователи будут загружаться из каталога ldap, но их идентификаторы будут отображаться в виде UID — это произвольные набор цифр и букв и его использовать не удобно. Чтобы изменить атрибут для имени nextcloud, вводим:

sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapExpertUsernameAttr «sAMAccountName»

Список пользователей

Чтобы посмотреть список пользователей, кликаем по изображению аккаунта и выбираем Пользователи :

Переходим к списку пользователей

Система должна подгрузить пользователей из ldap.

EnglishRussianUkrainian