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

Подготовка сервера к настройке
Включение модуля LDAP в Nextcloud
    Через веб-интерфейс
    Из командной строки
Настройка модуля
    Через веб-интерфейс
    Из командной строки
Просмотр пользователей

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

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

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

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

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

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

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

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

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

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

* в данном примере мы сервер dmosk.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=dmosk,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.