Date: 7 Jul 2002
From: Михаил Захаров <zakharov@ipb.redline.ru>
Subject: Руководство по настройке аутентификации пользователей через LDAP.
Руководство по настройке аутентификации пользователей через LDAP.
Михаил Захаров (zakharov@ipb.redline.ru)
Введение.
В крупных организациях увеличение числа пользователей неизбежно ведет к проблемам
администрирования их учетных записей. В этом случае возникает необходимость внедрения единой системы
аутентификации. Один из вариантов такой системы может быть основан на использовании сервера 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-ми строк:
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/nis.schema
Первые три строки подключают схемы LDAP. Формат и структура данных, хранимые в LDAP,
определяются схемами. Порядок подключения схем важен, поскольку схема может использовать значения,
определенные в другой схеме.
Далее (database) указывается тип базы данных, в которой по-настоящему и хранится информация, в нашем случае
это ldbm.
Suffix определяет основу для формирования запроса, корень, к которому мы обращаемся при запросе к
базе банных LDAP. Suffix выбирается при настройке LDAP-сервера и обычно является доменным именем
организации.
Затем следует запись об администраторе (rootdn) и его пароль (rootpw). Необходимо заметить, что
учетная запись администратора действует даже в тех случаях, когда в самой базе данных административная
запись отсутствует или содержит пароль, отличающийся от указанного в rootpw.
Последняя строка определяет каталог, в котором будут находиться файлы базы данных LDBM.
В завершении, в slapd.conf полезно добавить правила, разграничивающие доступ к ресурсам LDAP,
например такие:
access to dn=".*,dc=testdomain,dc=ru" attr=userPassword
by dn="cn=Admin,dc=testdomain,dc=ru" write
by self write
by * auth
access to dn=".*,dc=testdomain,dc=ru"
by dn="cn=Admin,dc=testdomain,dc=ru" write
by self write
by * read
Запускаем сервер LDAP:
/usr/local/libexec/slapd
Теперь можно заполнять базу данных сервера LDAP. Для этого создадим текстовый файл, например,
testdomain.ldif, содержащий записи о нашей организации, администраторе, группе пользователей и, собственно,
одном из пользователей:
Для обеспечения функционирования сетевых служб на FreeBSD обычно устанавливаются свободно-
распространяемые варианты программного обеспечения. Большинство этих программ не могут напрямую
взаимодействовать с LDAP, зато поддерживают возможность проведения аутентификации через модули PAM.
Поскольку в нашем случае, таких программ большинство, с них и начнем.
Прежде всего, модуль PAM, которым мы будем пользоваться, называется pam_ldap. В дистрибутив
FreeBSD этот модуль не входит, поэтому его необходимо установить, используя систему портов или
скомпилировать вручную, забрав с сервера www.padl.com.
Модуль pam_ldap ищет конфигурационный файл ldap.conf. Обычно этот файл должен располагается в
каталоге /etc, но иногда, в зависимости от опций, указанных при компиляции, может находиться и в
/usr/local/etc/.
Наш /etc/ldap.conf будет содержать лишь 3 строки:
BASE dc=testdomain,dc=ru
HOST ldap_server
pam_password clear
Здесь BASE - база для поиска в дереве LDAP;
HOST - IP-адрес или имя хоста, на котором работает 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
Конфигурация Samba (в нашем случае Samba 2.2.4) требует дополнительных комментариев. Во-первых,
хотя Samba и имеет возможность работать с LDAP-серверами напрямую, но этот механизм еще не отработан, и
поэтому мы будем использовать PAM. Во-вторых, исходные тексты должны быть скомпилированы с
поддержкой PAM. По умолчанию, эта опция отключена, поэтому компилируем и устанавливаем программу так:
./configure --with-pam
make
make install
В /etc/pam.conf требуется наличие следующих строк:
Самая простая конфигурация у Qpopper 4.4. В /etc/pam.conf добавляем:
pop3 auth sufficient pam_ldap.so
Кроме того, Qpopper тоже должен быть скомпилирован с поддержкой PAM:
./configure --with-pam
make
make install
Единственный продукт, который работает серверами с LDAP без помощи PAM, это SQUID. Для
аутентификации через LDAP Squid используется собственный модуль - squid_ldap_auth, представляющий
собой внешнюю программу. В дистрибутиве Squid, его исходные тексты находится в каталоге
auth_modules/LDAP.
Скомпилировав и установив squid_ldap_auth, можно приступать к настройке Squid.
В squid.conf указываем, что необходимо использовать наш модуль аутентификации: