Посібник з налаштування аутентифікації користувачів за допомогою ldap

Михайло Захаров ([email protected])

У великих організаціях збільшення числа користувачів неминуче веде до проблем адміністрування їх облікових записів. У цьому випадку виникає необхідність впровадження єдиної системи аутентифікації. Один з варіантів такої системи може бути заснований на використанні сервера LDAP.

Для побудови такої системи на FreeBSD (FreeBSD-4.4-Release) мною було використано наступне вільно-яке розповсюджується програмне забезпечення:

Перед початком заздалегідь хочу зробити кілька важливих зауважень і застережень. По-перше, пропоноване керівництво ставиться до жанру quick start. і наведені тут варіанти конфігурації не є ідеальним рішенням проблеми аутентифікації, це лише модель роботи системи аутентифікації, побудованої на LDAP. По-друге, проводити зміни в pam.conf потрібно обережно, оскільки можлива ситуація при якій жоден користувач просто не зможе пройти аутентифікацію жодним методом. І, нарешті, по-третє, після установки сервера LDAP, слід переконатися, що бібліотеки liblber. * І libldap. * Знаходяться в каталогах / usr / lib, а файли disptmpl.h, lber * .h, ldap * .h і srchpref .h розташовуються в каталозі / usr / include. Це позбавить вас від помилок компіляції і лінкування клієнтського програмного забезпечення.

Налаштування сервера LDAP.

Як сервер LDAP будемо налаштовувати OpenLDAP-2.0.23. Всі конфігураційні файли OpenLDAP знаходяться в каталозі / usr / local / etc / openldap. Тут, перш за все, цікавий файл slapd.conf, в якому вказуються настройки сервера. У нашому випадку цей файл повинен складатися як мінімум з наступних 8-ми рядків:

Перші три рядки підключають схеми LDAP. Формат і структура даних, що зберігаються в LDAP, визначаються схемами. Порядок підключення схем важливий, оскільки схема може використовувати значення, певні в іншій схемі.

Далі вказується тип бази даних, в якій по-справжньому і зберігається інформація, в нашому випадку це ldbm.

Suffix визначає основу для формування запиту, корінь, до якого ми звертаємося при запиті до бази банних LDAP. Suffix вибирається при налаштуванні LDAP-сервера і зазвичай є доменним ім'ям організації.

Останній рядок визначає каталог, в якому будуть знаходитися файли бази даних LDBM.

На завершення, в slapd.conf корисно додати правила, що розмежовують доступ до ресурсів LDAP, наприклад такі:

access to dn = ". *, dc = testdomain, dc = ru" attr = userPassword

by dn = "cn = Admin, dc = testdomain, dc = ru" write

access to dn = ". *, dc = testdomain, dc = ru"

by dn = "cn = Admin, dc = testdomain, dc = ru" write

Запускаємо сервер LDAP:

Тепер можна заповнювати базу даних сервера LDAP. Для цього створимо текстовий файл, наприклад, testdomain.ldif, що містить записи про нашу організацію, адміністратора, групі користувачів і, власне, одному з користувачів:

Клієнти LDAP.

Для забезпечення функціонування мережевих служб на FreeBSD зазвичай встановлюються вільно-поширювані варіанти програмного забезпечення. Більшість цих програм не можуть безпосередньо взаємодіяти з LDAP, зате підтримують можливість проведення аутентифікації через модулі PAM. Оскільки в нашому випадку, таких програм більшість, з них і почнемо.

Перш за все, модуль PAM, яким ми будемо користуватися, називається pam_ldap. У дистрибутив FreeBSD цей модуль не входить, тому його необхідно встановити, використовуючи систему портів або скомпілювати вручну, забравши з сервера www.padl.com.

Модуль pam_ldap шукає конфігураційний файл ldap.conf. Зазвичай цей файл повинен розташовується в каталозі / etc, але іноді, в залежності від опцій, зазначених при компіляції, може перебувати і в / usr / local / etc /.

Наш /etc/ldap.conf буде містити лише 3 рядки:

Тут BASE база для пошуку в дереві LDAP;

pam_password вказує, що будуть використовуватися незашифровані паролі. Це зроблено для простоти, на практиці розумніше користуватися шифрованими паролями. Однак, в цьому випадку необхідно, щоб паролі, збережені в LDAP, теж були шифрувати. Зрозуміло, і запис rootpw в файлі /usr/local/etc/slapd.conf, теж рекомендується зашифрувати. Для генерації паролів, в тому числі і шифрованих, можна скористатися утилітою ldappasswd з комплекту OpenLDAP.

Основний конфігураційний файл PAM знаходиться в каталозі / etc і називається pam.conf. Він складається з правил описують методи проведення аутентифікації для різних сервісів. Для наших сервісів записи в pam.conf можуть бути такими:

Перше, що ми хочемо, це організувати доступ по login:

login auth sufficient pam_ldap.so

login auth sufficient pam_skey.so

login auth requisite pam_cleartext_pass_ok.so

login auth required pam_unix.so try_first_pass

login account required pam_unix.so

login password required pam_permit.so

login session required pam_permit.so

Для FTP записи виглядають простіше:

ftpd auth sufficient pam_ldap.so

ftpd auth sufficient pam_skey.so

ftpd auth requisite pam_cleartext_pass_ok.so

ftpd auth required pam_unix.so try_first_pass

OpenSSH будуть потрібні наступні правила:

sshd auth sufficient pam_ldap.so

sshd auth sufficient pam_skey.so

sshd auth required pam_unix.so try_first_pass

sshd account required pam_unix.so

sshd password required pam_permit.so

sshd session required pam_permit.so

У /etc/pam.conf потрібна наявність наступних рядків:

samba auth required pam_ldap.so

samba session required pam_ldap.so

Найпростіша конфігурація у Qpopper 4.4. У /etc/pam.conf додаємо:

pop3 auth sufficient pam_ldap.so

Крім того, Qpopper теж повинен бути скомпільовано з підтримкою PAM:

Єдиний продукт, який працює серверами з LDAP без допомоги PAM, це SQUID. Для аутентифікації через LDAP Squid використовується власний модуль squid_ldap_auth, що представляє собою зовнішню програму. У дистрибутиві Squid, його вихідні тексти знаходиться в каталозі auth_modules / LDAP.

Скомпілювавши і встановивши squid_ldap_auth, можна приступати до настройки Squid.

У squid.conf вказуємо, що необхідно використовувати наш модуль аутентифікації:

authenticate_program / usr / local / squid / libexec / squid / squid_ldap_auth -b dc = testdomain, dc = ru ldap_server

Далі для перевірки, додамо в squid.conf найпростіший ACL:

acl password proxy_auth REQUIRED

http_access allow password

http_access deny all

Схожі статті