Thank you for reading this post, don't forget to subscribe!
Для хранения пользователей Nextcloud можно использовать как внутреннюю базу, так и внешнюю, например, сервер каталогов (LDAP)
Подготовка системы
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-get install php-ldap
systemctl restart php7.4-fpm
systemctl restart apache2
* в данном примере мы перезапускаем и php7.4-fpm, и apache2. В вашей системе может использоваться только один сервис. Имя для сервиса php7.4-fpm может быть другим — это зависит от версии PHP.
3. У нас должна быть учетная запись на сервере LDAP с правами чтения (DN user). От данной учетной записи будет выполняться подключение к серверу каталогов.
В моем примере будет создана запись bind.
Включение модуля (приложения) интеграции с LDAP
По умолчанию, после установки Nextcloud приложение для интеграции с LDAP установлено, но не активировано. Рассмотрим 2 способа его включения.
Графический интерфейс
Переходим к списку приложений:
Находим LDAP user and group backend:
Справа от приложения кликаем по Включить:
Командная строка
Из командной строки мы можем управлять 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 способа — с помощью веб-интерфейса и командной строки.
Графический интерфейс
Переходим к настройкам, кликнув по значку пользователя и выбрав Настройки:
Выбираем подраздел Интеграция LDAP / AD:
В открывшемся окне, на вкладке Сервер добавляем имя сервера (можно задать просто имя домена). После нажимаем кнопку Определить порт — мы должны увидеть порт для подключения к каталогу (как правило, 389 или 636):
* в данном примере мы задали имя сервера (домена) test.local. Обратите внимание, что не все реализации LDAP позволяют системе определить порт — в таком случае, просто пропишем его вручную.
Ниже вводим данные для учетной записи, которая была нами подготовлена ранее - после кликаем по Сохранить учетные данные:
* как говорилось выше, для связки с ldap была создана запись bind. В разных реализациях LDAP могут быть разные требования для указания учетной записи. Например, во FreeIPA необходимо указать uid=bind,cn=users,cn=accounts,dc=test,dc=local.
Для базы поиска пользователей и групп можно просто кликнуть по Определить базу поиска DN — тогда будет определен корень домена. Или можно ввести самому конкретное подразделение:
* в моем примере данные из AD будут искаться в организационном юните Пользователи, который находится в корне домена test.local. Для других реализаций ldap определение может не работать — вводим вручную. Также, база должна быть соответствующей, например, для FreeIPA это cn=users,cn=accounts,dc=test,dc=local.
Нажимаем Проверить базу поиска DN:
Если наши настройки верны, мы должны увидеть фразу «Конфигурация в порядке»:
Нажимаем Продолжить — мы должны перейти на вкладку Пользователи:
На данной вкладке можно ничего не трогать, или настроить дополнительные фильтры. После кликаем по кнопке Проверить настройки и пересчитать пользователей:
* в моем примере было найдено 388 пользователей.
В нижней части мы должны увидеть Конфигурация в порядке. Кликаем по Продолжить:
Мы окажемся на странице Учетные данные:
Мы можем задать поле, которое будем использовать в качестве логина:
* в данном примере мы оставляем значение по умолчанию — имена пользователя ldap.
Ниже мы можем проверить учетную запись, введя ее в специальное поле и нажав Проверить настройки:
… если учетная запись найдена, мы увидим сообщение Пользователь найден и настройки проверены:
Внизу проверим, чтобы конфигурация была в порядке и нажимаем Продолжить:
На последней вкладке можно задать фильтры для групп или оставить по умолчанию.
Интеграция настроена. Пользователи будут загружаться из каталога ldap, но их идентификаторы будут отображаться в виде UID — это произвольные набор цифр и букв и его использовать не удобно. Чтобы изменить атрибут для имени nextcloud, кликаем по ссылке Эксперт:
Задаем атрибут из ldap, который мы будем использовать для внутреннего имени системы:
* в данном примере мы задали атрибут, характерный для логина 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 "test.local"
sudo -u ${webuser} php /var/www/nextcloud/occ ldap:set-config s01 ldapPort "389"
* в данном примере мы сервер test.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=test,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