Михайло Захаров ([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