Настройка аутентификации доменных пользователей в Nextcloud

Мы предоставляем услуги удаленного администрирования серверов

Настройка аутентификации доменных пользователей в Nextcloud

Обновлено и опубликовано Опубликовано:

Используемые термины: NextcloudActive Directory, FreeIPALinux.

Для хранения пользователей 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-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):

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

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

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

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

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

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

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