Nextcloud с LDAP

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