Ключевые слова:ldap, auth, bsd, pam, ssh, pop3, squid, samba, (найти похожие документы)
Date: 7 Jul 2002
From: Михаил Захаров <[email protected]>
Subject: Руководство по настройке аутентификации пользователей через LDAP.
Руководство по настройке аутентификации пользователей через LDAP.
Михаил Захаров ([email protected])
Введение.
В крупных организациях увеличение числа пользователей неизбежно ведет к проблемам
администрирования их учетных записей. В этом случае возникает необходимость внедрения единой системы
аутентификации. Один из вариантов такой системы может быть основан на использовании сервера LDAP.
Для построения такой системы на FreeBSD (FreeBSD-4.4-Release) мною было использовано следующее
свободно-распространяемое программное обеспечение:
OpenLDAP-2.0.23 - www.openldap.org
OpenSSH-2.3.0 - www.openssh.org
Samba-2.2.4 - www.samba.org
Squid-2.4-Stable6 - www.squid-cache.org
Qpopper-4.0.4 - www.eudora.com/qpopper
pam_ldap-1.5.0 - www.padl.com
Перед началом заранее хочу сделать несколько важных замечаний и предостережений. Во-первых,
предлагаемое руководство относится к жанру 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
database ldbm
suffix "dc=testdomain,dc=ru"
rootdn "cn=Admin,dc=testdomain,dc=ru"
rootpw adminpassword
directory /usr/local/var/openldap-ldbm
Первые три строки подключают схемы 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, содержащий записи о нашей организации, администраторе, группе пользователей и, собственно,
одном из пользователей:
dn: dc=testdomain,dc=ru
objectclass: dcObject
objectclass: organization
o: testdomain
dc: testdomain
dn: cn=Admin,dc=testdomain,dc=ru
objectclass: organizationalRole
cn: Admin
dn: ou=Users,dc=testdomain,dc=ru
ou: Users
objectclass: top
objectclass: organizationalUnit
dn: uid=zmey,ou=Users,dc=testdomain,dc=ru
uid: zmey
cn: Mikhail E. Zakharov
objectclass: account
objectclass: posixAccount
objectclass: top
objectclass: uidObject
loginshell: /bin/tcsh
uidnumber: 1000
gidnumber: 1000
homedirectory: /home/zmey
gecos: Mikhail E. Zakharov,,,,
userpassword: topsecret
Итак, OpenLDAP настроен. Удостоверимся, что все работает правильно, проверим записи, находящиеся
на сервере:
ldapsearch -x -b "dc=testdomain,dc=ru" "(objectclass=*)"
Ответ сервера должен быть следующим:
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# Admin, testdomain, ru
dn: cn=Admin,dc=testdomain,dc=ru
objectClass: organizationalRole
cn: Admin
# Users, testdomain, ru
dn: ou=Users,dc=testdomain,dc=ru
ou: Users
objectClass: top
objectClass: organizationalUnit
# zmey, Users, testdomain, ru
dn: uid=zmey,ou=Users,dc=testdomain,dc=ru
uid: zmey
cn: Mikhail E. Zakharov
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: uidObject
loginShell: /bin/tcsh
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/zmey
gecos: Mikhail E. Zakharov,,,,
# search result
search: 2
result: 0 Success
# numResponses: 4
# numEntries: 3
Клиенты LDAP.
Для обеспечения функционирования сетевых служб на 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
Для 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
Конфигурация Samba (в нашем случае Samba 2.2.4) требует дополнительных комментариев. Во-первых,
хотя Samba и имеет возможность работать с LDAP-серверами напрямую, но этот механизм еще не отработан, и
поэтому мы будем использовать PAM. Во-вторых, исходные тексты должны быть скомпилированы с
поддержкой PAM. По умолчанию, эта опция отключена, поэтому компилируем и устанавливаем программу так:
./configure --with-pam
make
make install
В /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:
./configure --with-pam
make
make install
Единственный продукт, который работает серверами с 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
Здесь -b dc=testdomain,dc=ru - суффикс LDAP, ldap_server - IP-адрес или DNS-имя сервера LDAP. Путь
usr/local/squid/libexec/squid/ взят по умолчанию.
Далее для проверки, добавим в squid.conf простейший ACL:
acl password proxy_auth REQUIRED
http_access allow password
http_access deny all
Лучше использовать другой клиент .. не TheBat. так как с ним действительно проблеммы при подключении к LDAP серверу.. (поиск юзерей просто не возможен.)
>Лучше использовать другой клиент .. не TheBat. так как с ним действительно
>проблеммы при подключении к LDAP серверу.. (поиск юзерей просто не возможен.)
>
как прикрутить LDAP к Оутгглюку, чтобы видна была адресная книга???
ТОЛЬКО ПОДРОБНЕЕ ПЛИЗ!!! А ТО никак не пойму...
Ваапсчета, к Батке мона прикрутить LDAP, для этаго:
1. Создаем Адресную книгу.
2. в закладке LDAP прописываем адрес сервера аутентификации и порт,
Базу поиска заполняем примерно так: dc=Домен,dc=ru
Максимальное число совпадений ставим хотябы и 100
прописываем аутентификацию (любого юзверя из домена)
ИМХО, в статье забыли сказать, что после всех этих махинаций с testdomain.ldif нужно сделать ldapadd -x -D "cn=Admin,dc=testdomain,dc=ru" -W -f testdomain.ldif ну или что-то в таком духе.
Коллеги, а не подскажет ли кто... Такая проблема - странно работает хелпер squid_ldap_auth, при попытке проверить его на работу с AD.
Запускаю из командной строки, как прописано в мане -
./squid_ldap_auth -u cn -b "cn=Users,dc=loniir-org,dc=net" 172.16.1.1
После этого, если набрать логин и пароль администратора домена - то ответ ОК, и запись в логах контроллера домена есть. Если же заходить другим пользователем, то ответ ERR Success, никаких следов в логах не остаётся. В чём тут может быть заковыка?
Всё хорошо, а никто не подскажет как можно заблокировать выход в инет с определённого IP определённым пользователям (squid + пользователи авторизируются через ldap)?
Например - я подключаюсь через Rdesktop к виндовзному ПК, выхожу в инет через браузер авторизируясь с логином:login и паролем:login_pass. И меня пускает в инет. А например пользователю с логином:pupkin и паролем:pupkin_pass чтоб не был разрешён выход в инет, хотя с других ПК пусть выходит...