Translate

неділю, 1 квітня 2018 р.

OpenLDAP Server. Part II: FusionDirectory LDAP Browser

Нещодавно я оновив статтю про установку та налаштування OpenLDAP серверу, де також торкнувся теми підвищення безпеки інсталяції та використання панелі адміністрування phpLDAPadmin. Цього ж разу я хочу приділити увагу іншій веб-інтерфейсу FusionDirectory.

FusionDirectory - програмний комплекс, що забезпечує зручне управління даними в LDAP-каталозі. Це форк проекту Gosa², який відбувся в 2011 році через обмежений доступ до коду та процесу розробки оригінального продукту. Таким чином FusionDirectory хотів залучити в проект сторонніх розробників та покращити документацію.

У 2010 році Gosa² була обрана як фронтенд управління LDAP інфраструктурою німецького міста Мюнхен у межах проекта LiMux. На жаль, проект планують згорнути до 2020 на користь продуктів компанії Microsoft. Та і самій Gosa² пощастило не більше: останній реліз датується 2012 роком, хоча варто визнати, що пакети для її установки і досі присутні в офіційних репозиторіях Ubuntu.


1. INSTALLATION


Проте її форк FusionDirectory і досі відносно активно розвивається: останній реліз з версією 1.2 відбувся влітку 2017 року. Для того, щоб виконання подальших інструкцій в цій статті мало сенс, спочатку необхідно встановити OpenLDAP сервер, про інсталяцію якого я вже писав і згадував. Спершу встановимо пакети-залежності, які потребує FusionDirectory, але не запитує явно:

# apt install make
# cpan -i Archive::Extract

На відміну від Gosa², останні пакети FusionDirectory не присутні в стандартних репозиторіях Ubuntu, тому необхідно додати сторонні:

# cat << EOF > /etc/apt/sources.list.d/fusiondirectory.list
# FusionDirectory
deb http://repos.fusiondirectory.org/fusiondirectory-current/debian-wheezy wheezy main
deb http://repos.fusiondirectory.org/fusiondirectory-extra/debian-jessie jessie main
EOF

Та додамо PGP-ключі репозиторію:

# gpg --keyserver keys.gnupg.net --recv-key 0xD744D55EACDA69FF
# gpg --export -a "FusionDirectory Project Signing Key <contact@fusiondirectory.org>" | apt-key add -

Оновимо індекси пакетів apt та встановимо FusionDirectory:

# apt update
# apt install fusiondirectory fusiondirectory-schema -y

Цей процес відносно довгий, адже FusionDirectory потребує просто силу-силенну різноманітних залежностей. Після установки варто пересвідчитись, що установлено було саме останню версію 1.2.1, а не стару з репозиторію:

# apt show fusiondirectory
Package: fusiondirectory
Version: 1.2-1
Priority: optional
...

Імпортуємо LDAP-схеми необхідні для роботи веб-панелі:

# fusiondirectory-insert-schema

Вивід всіх імпортованих схем можна зробити так:

# fusiondirectory-insert-schema -l
core
cosine
nis
inetorgperson
core-fd
core-fd-conf
ldapns
template-fd

Файли цих схем знаходяться на диску за адресою /etc/ldap/schema/fusiondirectory/. По-замовчуванню з установочними пакетами по залежностям буде встановлений веб-сервер Apache. Ми ж будемо користуватись Nginx і PHP-FPM для обробки динаміки, тому Apache буде зупинено і вимкнено з автозавантаження:

# service apache2 stop
# systemctl disable apache2

# aptitude install nginx php-fpm php7.0-mbstring

Необхідність в пакеті "php7.0-mbstring" з'явиться пізніше, тому його було встановлено на випередження. Опишемо віртуальний хост для обслуговування FusionDirectory панелі:

# vim /etc/nginx/sites-available/fd.conf

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name fd.ipeacocks.info;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;

  root /usr/share/fusiondirectory/html;
  index index.php;

  server_name fd.ipeacocks.info;
  ssl_certificate /etc/nginx/ssl/cert.crt;
  ssl_certificate_key /etc/nginx/ssl/key.key;

  location ~ ^/.*\.php(/|$) {
    expires off; # do not cache dynamic content
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }
}

Отже запити на 80 порт будуть перенаправлені на захищений 443, всі ж динамічні сторінки будуть адресовані сокету сервера PHP-FPM. Сертифікат та ключ відповідно наведеному конфігу мають лежати в директорії /etc/nginx/ssl/, я використовую ту ж пару, що і для активації TLS в openLDAP.

Активуємо віртуальний хост та видалимо дефолтний:

# ln -s /etc/nginx/sites-available/fd.conf /etc/nginx/sites-enabled/fd.conf
# rm /etc/nginx/sites-enabled/default
# systemctl restart nginx

Переходимо за посиланням https://fd.ipeacocks.info і продовжуємо налаштування. Далі все очевидно, просто необхідно дотримуватись вказівок.


Перша сторінка установки пропонує записати автоматично згенерований ID сесії в fusiondirectory.auth:

# echo -n ogs2reu96qdrls9d6fkdvb9g54 > /var/cache/fusiondirectory/fusiondirectory.auth

Далі буде запропонований вибір мови:


Перевірка налаштувань PHP та доступності необхідних модулів:


На наступному етапі установщик запитає параметри адміністративного доступу до бази LDAP:


У полі "Connection URI" я вказав незахищене локальне з'єднання, адже для таких випадків я його і лишив. Всі параметри, які були введені, відповідають значенням з якими було проінстальовано та налаштовано openLDAP у попередній статті. Урешті-решт у віконці "Status" можна перевірити чи параметри коректні.

Як варіант можна користуватись лише захищеним LDAPS з'єднанням (LDAP over TLS, 636 порт), чи STARTTLS (389 порт, як у випадку незахищеного зв'язку). Останній дозволяє ініціювати захищене з'єднання вже після чи під час незахищеного. STARTTLS, на відміну від LDAPS, є стандартизованим в RFC 2830 та ліпшим варіантом. Більш того LDAP over TLS вже оголошений таким, що не підтримується (deprecated).

Але, на жаль, не все так просто. Деякі програмні продукти не вміють працювати з STARTTLS LDAP (наприклад, Jenkins, JXplorer), хоча цей механізм підключення існує вже як 18 років. Навіть деякі плагіни Fusion Directory в таким умовах відмовляються працювати коректно.

Наступна сторінка запитає про структуру збереження записів, а саме під яким іменем OU будуть зберігатись імена користувачів та ACL ролі, яким буде DN запис для кожного користувача (CN, як у випадку з phpLDAPadmin, чи UID), на основі чого буде генеруватись CN-ім'я і т.п. На це варто звернути увагу і змінити у разі необхідності. Праворуч наведені параметри авторизації до панелі FusionDirectory, а саме, що буде виступати у якості логіну (uid, email чи обидва одночасно) та час дії сесії.


Передостання сторінка проведе останні перевірки доступності LDAP-класів, доступу до бази, запропонує створити адмін-користувача 'fd-admin' (його ім'я можна обрати на власний розсуд) та провести міграції бази після змін і т.п.


Далі необхідно завантажити згенерований конфігураційний файл, скопіювати його на сервер в /etc/fusiondirectory/fusiondirectory.conf та виставити безпечні права на доступ до нього:


# fusiondirectory-setup --check-config
Checking FusionDirectory's config file
/etc/fusiondirectory/fusiondirectory.conf exists…
/etc/fusiondirectory/fusiondirectory.conf is not set properly, do you want to fix it ?:  [Yes/No]?
yes


2. USAGE


Наразі панель FusionDirectory готова до використання. Після авторизації від імені користувача 'fd-admin' сторінка буде переадресована на dashboard:


Наразі все готово для створення користувачів. Для цього необхідно перейти в меню "Users and groups" -> "Users" і в випадаючому меню обрати "Create" -> "User":


Наступна сторінка передбачає введення всіх обов'язкових полів із зірочкою. Тут варто звернути увагу на доступність більш численної кількість хеш-функцій для шифрування паролю ніж в phpLDAPadmin, тож можливо варто обрати щось більш безпечне за SSHA (SHA1+salt).



Група створюється майже аналогічним способом:


У групу Jenkins будуть входити користувачі, котрим необхідний доступ до CI/CD системи Jenkins:


І наразі лише 'John Doe' буде входити до неї.

За замовчуванням звичайні користувачі не можуть самостійно змінювати паролі до своїх профілів чи власну інформацію. Виправимо це, призначивши всьому дереву звичайних користувачів 'editowninfos' роль (ACL):




Після чого на кожному етапі необхідно натиснути "OK/Apply" внизу сторінки. Тепер кожен авторизований користувач зможе відредагувати свої дані:


Параметри того, як користувач буде збережений в базі openLDAP можна побачити за допомогою LDAP-браузеру JXplorer чи утилітами командного рядка ldap-utils:


$ ldapsearch -LLL -x -H ldaps://ldap.ipeacocks.info -b 'uid=jdoe,ou=people,dc=ipeacocks,dc=info' -D "cn=admin,dc=ipeacocks,dc=info" -W

dn: uid=jdoe,ou=people,dc=ipeacocks,dc=info
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
cn: John Doe
sn: Doe
givenName: John
jpegPhoto:: /9j/4AAQSkZJRgABAQIAjgCOAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw
 YIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQs
...
 xsg9tcg4PFZrAf5jZD7c//dBgmYZxkGoF2+NMkvFZe7j0BH8JrZTI/ojqG57EHhoCD//Z
uid: jdoe
userPassword:: e1NTSEF9K0l5MXBCRUh3K0w1amFUUUtEY2sxK3dVL1V0WS95R24=

Якщо ж на етапі установки FusionDirectory обрати іншу схему збереження користувачів, а саме в "People and group storage" обрати "People DN attribute" -> "cn" (замість "uid"), то користувач jdoe приблизно виглядатиме так:

$ ldapsearch -LLL -x -H ldaps://ldap.ipeacocks.info -b 'cn=John Doe,ou=people,dc=ipeacocks,dc=info' -D "cn=admin,dc=ipeacocks,dc=info" -W

dn: cn=John Doe,ou=people,dc=ipeacocks,dc=info
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
cn: John Doe
sn: Doe
givenName: John
uid: jdoe
userPassword:: e1NTSEF9aklKYlhidGRUNXphdk1XRFBVL2xmaFRwNjVKUDlwRW4=
jpegPhoto:: /9j/4AAQSkZJRgABAQIAjgCOAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw
 YIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQs
...
 xsg9tcg4PFZrAf5jZD7c//dBgmYZxkGoF2+NMkvFZe7j0BH8JrZTI/ojqG57EHhoCD//Z


3. PLUGINS


Чудовою особливість FusionDirectory є розмаїття доступних плагінів, що значно розширюють можливості програми. Таким чином до веб-панелі можна додати лише те, що потрібно, не загромаджуючи інтерфейс непотрібним функціоналом. Із усім списком плагінів можна ознайомитись на сайті проекту, а я розкажу лише про ті, що використовую сам.

1. Mail. Плагін, що лише додає поле електронної пошти, що буде представлена у вигляді додаткової вкладки у профілі користувача. Установка відбувається наступним чином:

# apt install fusiondirectory-plugin-mail fusiondirectory-plugin-mail-schema

Потім необхідно імпортувати "mail-fd" та "mail-fd-conf" схеми:

# cd /etc/ldap/schema/fusiondirectory/
# fusiondirectory-insert-schema -i mail-fd-conf.schema mail-fd.schema

Після цього з'явиться можливість додавати mail-адресу до профілю будь-якого користувача:


Усі плагіни - це насправді підготовлені LDAP схеми та інтеграція для них в Fusion Directory панелі.

2. SSH. Плагін, що додає поле для збереження публічно RSA-ключа для SSH. Установка майже аналогічна:

# apt install fusiondirectory-plugin-ssh fusiondirectory-plugin-ssh-schema 
# fusiondirectory-insert-schema -i openssh-lpk.schema

Після установки буде доступно дві нові вкладки в профілі користувача і для додавання ключа вони мають бути активовані і заповнені. Перша з них - Unix:


Плагін, що додав цю вкладку був встановлений по залежностях (fusiondirectory-plugin-posix). Якщо ж дозволяти ssh-доступ лише по паролях, то тут також є можливість описати термін дії пароля, мінімальну частоту його зміни та інші політики. Після цього на вкладці SSH користувача з'явиться можливість додати ключ:


Наразі запис користувача в LDAP матиме наступний вигляд:

# ldapsearch -LLL -x -H ldaps://ldap.ipeacocks.info -b 'uid=jdoe,ou=people,dc=ipeacocks,dc=info' -D "cn=admin,dc=ipeacocks,dc=info" -W

dn: uid=jdoe,ou=people,dc=ipeacocks,dc=info
cn: John Doe
sn: Doe
givenName: John
uid: jdoe
userPassword:: e1NTSEF9L3ZjMTBUSTlBUjhMWFVMVmdvNGx1cWV3L0krNllUQlo=
mail: jdoe@ipeacocks.info
gosaMailDeliveryMode: []
homeDirectory: /home/jdoe
gecos: John Doe
loginShell: /bin/bash
uidNumber: 1101
gidNumber: 1101
shadowLastChange: 17621
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: gosaMailAccount
objectClass: posixAccount
objectClass: shadowAccount
objectClass: ldapPublicKey
sshPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDB6n9K78fB+4HzwqgwLQkd94ba
 ...
 7sLjvuaMhLuM7RqryOqEddqLeZnksJ6hippNUoC9esgJSBWrUSCTRenjurPDtqK2ZN7BS55Z3LG0e
 OsonJqBB jdoe@ipeacocks.info
jpegPhoto:: /9j/4AAQSkZJRgABAQIAjgCOAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBw
 YIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQs
 ...
 xsg9tcg4PFZrAf5jZD7c//dBgmYZxkGoF2+NMkvFZe7j0BH8JrZTI/ojqG57EHhoCD//Z

Тобто для опису користувача тепер задіяні нові класи "posixAccount", "shadowAccount" та "ldapPublicKey", що надають нові поля і можливості.

3. Audit. Плагін, що забезпечує журналювання всіх операцій над LDAP базою. Установимо його та імпортуємо нову схему:

# apt install fusiondirectory-plugin-audit fusiondirectory-plugin-audit-schema
# fusiondirectory-insert-schema -i audit-fd-conf.schema audit-fd.schema


4. Ldapdump. Дозволяє перегляд інформації профілю кожного користувача в текстовій LDIF формі.

# apt install fusiondirectory-plugin-ldapdump


5. Ldapmanager. Плагін, що надає можливості експорту та імпорту всього дерева чи окремих користувачів в форматі LDIF чи CSV.

# apt install fusiondirectory-plugin-ldapmanager



Посилання:
https://www.theo-andreou.org/?p=1539
https://documentation.fusiondirectory.org/
https://www.slideshare.net/benoitmortier/presentation-fusion-directorylinuxtag2013-21886261
https://www.tux.in.ua/articles/3079
https://www.techworld.com.au/article/382193/open_source_fusiondirectory_forked_from_gosa_project/
https://www.digitalocean.com/community/tutorials/how-to-encrypt-openldap-connections-using-starttls

Немає коментарів:

Дописати коментар