Журнал LinuxFormat - перейти на главную

LXF144:LDAP

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(викификация, оформление, иллюстрация)
 

Текущая версия на 11:19, 25 января 2013

Содержание

[править] Службы с LDAP-аутентификацией

Андрей Андреев продолжает рассказ об OpenLDAP как альтернативе Active Directory. Сегодня речь пойдет об интеграции с ним базовых сетевых служб.

В прошлой статье мы рассматривали вопросы, касающиеся первоначальной установки и настройки службы каталогов OpenLDAP в дистрибутиве CentOS, а также базовые понятия о службах каталогов.Теперь, с учетом сказанного и описанного ранее, можно приступать к более детальному изучению возможностей использования служб каталогов. Под более детальным рассмотрением подразумевается использование различных служб/сервисов, которые будут использовать для своей работы информацию, хранящуюся в OpenLDAP.

Первоначально следует определиться с набором служб/сервисов, которые мы хотим интегрировать c OpenLDAP.

Сервисы/службы:

  • Прокси-сервер
  • Файловый сервер
  • Почтовый сервер
  • Аутентификация

Это только часть списка служб, способных работать с протоколом LDAP. Для реализации их работы определим набор пакетов.

Пакеты:

  • Squid
  • Samba + smbldap-tools
  • Postfix + Dovecot
  • PAM

В данной статье будет рассматриваться установка и настройка перечисленных пакетов на Ubuntu Server 10.04.02 LTS. Это связано с тем, что процесс установки и настройки службы каталогов в Ubuntu Server отличается от тех же манипуляций в CentOS, Debian или Fedora.

Перво-наперво, в Ubuntu нет конфигурационного файла slapd.conf OpenLDAP. Вся настройка производится динамически командой ldapadd. Установка же выполняется следующей командой:

apt-get install slapd ldap-utils

Команды для установки и пример настройки службы каталогов OpenLDAP приводятся в скрипте на диске; вы можете взглянуть на них на досуге. А мы сразу же перейдем к рассмотрению прокси-сервера.

[править] Squid

Squid – кэширующий прокси-сервер, работающий по протоколам HTTP и FTP, Gopfer. Имеет возможность взаимодействия со службой каталогов путем аутентификации через LDAP, что позволяет разграничить доступ к интернет-ресурсам пользователей, которые имеют учетные записи; также позволяет организовать «нарезку» интернет-трафика для различных пользователей.

Установка его выполняется так:

apt-get install squid

Из всех служб проще всего настроить именно эту. Основной конфигурационный файл – /etc/squid/squid.conf. Для использования аутентификации через LDAP в основном конфигурационном файле достаточно расскоментировать строку auth_param basic program, указать параметры LDAP-сервера и добавить правило (acl) с разрешением доступа к ресурсу.

auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b
“dc=yourcompany,dc=com” -D uid=squid,dc=example,dc=com -w
password -f uid=%s ldap.example.com
acl ldap-auth proxy_auth REQUIRED
http_access allow ldap-auth
http_access allow localhost
http_access deny all

Здесь мы указали, что будем использовать модуль squid_ldap_auth с параметрами:

-v – версия протокола LDAP.
-b – ветка дерева каталога с которой начнется поиск пользователя.
-D – пользователь, который будет осуществлять поиск записей (рекомендуется создать для каждой службы своего пользователя).
-w – пароль пользователя для доступа к дереву каталога.
-f – «шаблон» поиска.
ldap.example.com – имя хоста LDAP-cервера.

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

Наша схема /etc/openldap/schema/squid.schema будет выглядеть примерно так:

attributetype ( 1.3.6.1.4.1.1000.1 NAME 'ProxyAccess'
DESC 'Proxy Access'
EQUALITY booleanMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.7)
objectclass ( 1.3.6.1.4.1.1000.200 NAME 'SquidAccess'
  DESC 'Access to Squid Proxy'
  SUP top AUXILIARY
  MUST ProxyAccess )

В схеме определен один атрибут с именем “ProxyAcces” и типом booleanMatch – то есть атрибут может принимать значения либо TRUE, либо FALSE. Также в схеме описан объектный класс “SquidAccess” с обязательным атрибутом “ProxyAccess”. С учетом схемы, строка с модулем squid_ldap_auth будет выглядеть так:

auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b
“dc=yourcompany,dc=com” -D uid=squid,dc=example,dc=com -w
password -f (&(ProxyAccess=TRUE)(uid=%s)) ldap.example.com

Теперь доступ к прокси будут иметь только те пользователи, у которых есть атрибут ProxyAccess со значением TRUE.

[править] Samba

Samba – свободное программное обеспечение, реализующее сетевой протокол SMB/CIFS. Samba может выступать в роли основного контроллера домена (PDC), либо члена уже существующего домена. Она также может быть частью домена Active Directory. Основной конфигурационный файл – /etc/samba/smb.conf. Для простоты настройки будем использовать пакет smbldap-tools.

Установка делается командой:

apt-get install samba samba-doc smbldap-tools

Для работы Samba c LDAP в основном конфигурационном файле необходимо указать следующие параметры LDAP-сервера:

passdb backend = ldapsam:ldap://localhost
ldap suffix = dc=example,dc=com
ldap user suffix = ou=People
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=Manager,dc=example,dc=com
ldap ssl = off
ldap passwd sync = yes
ldap delete dn = no

Еще понадобится настроить smbldap-tools. Настройка проста.

Распаковываем специально подготовленный скрипт:

gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz

Запускаем его и отвечаем на вопросы

perl /usr/share/doc/smbldap-tools/configure.pl

Далее, в вашем любимом редакторе можно открыть конфигурационный файл sambaldap.conf и проверить его правильность.

vim /etc/smbldap-tools/sambaldap.conf

Для корректной работы сервера нам понадобится узнать его локальный идентификатор безопасности (SID, Security Identifier); для этого выполним

net getlocalsid ldap

где ldap – имя хоста с установленными пакетами samba. Полученный SID следует записать в конфигурационный файл smbldap-tools/etc/smbldap-tools/sambaldap.conf.

Теперь можно приступать к созданию начальной структуры каталога, и для этого мы воспользуемся командами smbldap-populate и ldapadd.

smbldap-populate -a admin -e /etc/ldap/sambadb.ldif
ldapadd -x -D cn=Manager,dc=example,dc=com -w secret -f sambadb.ldif

После выполнения команд в службе каталогов OpenLDAP будут храниться записи о корневом элементе (dc=example, dc=com), группах (Domain Admins, Domain Users, Computers и т.д.), пользователях (nobody, admin) и запись sambaDomainName.

Для задания пароля пользователю существует команда smbldap-passwd, и т.к. в начальной структуре каталога записи о паролях отсутствуют, самое время их создать.

smbldap-passwd -a admin

Для добавления пользователей удобно воспользоваться командой smbldap-useradd:

smbldap-useradd -a -P User

На этом этап настройки smbldap-tools закончен; переходим к samba.

Сохраним резервную копию основного конфигурационного файла /etc/samba/smb.conf.

cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Теперь укажем в файле /etc/samba/smb.conf параметры LDAP, параметры домена и расширенные ресурсы. Все конфигурационные файлы и команды, необходимые для настройки, расположены в скрипте ubuntu_ldap.sh на диске; здесь приводятся только основные фрагменты файла /etc/samba/smb.conf.

[global]
server string = SAMBA PDC
workgroup = EXAMPLE
netbios name = LDAP
passdb backend = ldapsam:ldap://localhost
security = user
domain master = yes
admin users = admin
socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
wins support = yes
wins proxy = yes
name resolve order = wins hosts bcast lmhosts
wide links = yes
idmap uid = 10000-20000
idmap gid = 10000-20000
ldap suffix = dc=example,dc=com
ldap user suffix = ou=People
ldap group suffix = ou=Groups
ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
ldap admin dn = cn=admin,dc=sapr,dc=guap,dc=spb,dc=ru
ldap ssl = off
ldap passwd sync = yes
ldap delete dn = no
add machine script = sudo /usr/sbin/smbldap-useradd -t 0 -w “%u”
passwd program = /usr/sbin/smbldap-passwd %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*
domain logons = yes
##=========Шары========================
[homes]
comment = Home Directories
browseable = yes
valid users = %S
writable = yes

В данном конфигурационном скрипте мы указали на то, что samba будет использовать протокол LDAP, а за добавление пользователей и проверку пароля будет отвечать smbldap-tools. Так же указаны администратор samba – пользователь admin (локальный пользователь, который будет перенесен в службу каталогов) и параметры, необходимые для работы.

Перезапускаем службу smbd:

service smbd restart

Для работы связки Samba и LDAP необходимо указать пароль администратора службы каталогов (rootdn) и администратора Samba:

smbpasswd -w secret
smbpasswd -a admin

Перезапускаем службу nmbd и проверяем список групп:

service nmbd restart
net groupmap list

Результатом выполнения команды является список групп домена (Domain Admins, Domain Users, Computers и т.д). Для работы пользователю admin следует дать права администратора домена.

net rpc rights grant “Domain Admins” SeMachineAccountPrivilege
SeTakeOwnershipPrivilege \
SeBackupPrivilege SeRestorePrivilege
SeRemoteShutdownPrivilege SePrintOperatorPrivilege \
SeAddUsersPrivilege SeDiskOperatorPrivilege -U admin%123456

Финальный штрих – вводим наш сервер в домен:


[править] Почтовый сервер

[править] Postfix

Postfix – это агент передачи сообщений (MTA, message transport agent), который занимается пересылкой по протоколу SMTP сообщений от пользовательского почтового агента (MUA, mail user agent), называемого также почтовым клиентом, к удаленному почтовому серверу.

MTA также принимает сообщения от удаленных почтовых серверов и пересылает их другим MTA или доставляет в локальные почтовые ящики. Переслав или доставив сообщение, Postfix заканчивает свою работу. За доставку сообщения конечному пользователю отвечают другие серверы. Например, такие MTA, как серверы POP3 или IMAP, передают сообщения почтовым клиентам – Mutt, Outlook или Apple Mail, с помощью которых пользователь может прочитать их.

С точки зрения современного взгляда на задачу передачи и обработки сообщений Postfix представляет собой самую сердцевину комплекса почтового ПО.

Убедитесь, что порт 25 TCP на вашем сервере ничем не заблокирован. Если у вас установлен межсетевой экран, убедитесь, что его политика разрешает входящие и исходящие соединения с портом 25.

Причина, по которой порт 25 TCP должен быть открыт, заключается в том, что Postfix и другие почтовые серверы прослушивают его в ожидании соединений. Этот порт официально назначен для SMTP агентством IANA (полный список доступен по адресу http://www.iana.org/assignments/port-numbers). Организация IANA является главным регистратором нумерации интернет-протоколах, распределяющим номера портов, протоколов, компаний, параметров, кодов и типов.

Установка – все тем же манером:

apt-get install postfix

Основные конфигурационные файлы, которые мы будем использовать – /etc/postfix/main.cf, /etc/postfix/master.cf.

Как и во всех службах, здесь нам надо указать способы аутентификации. В нашем случае это LDAP. Для этого в файле /etc/postfix/main.cf пропишем строки

local_recipient_maps = $alias_maps, ldap:/etc/postfix/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf

А параметры аутентификации LDAP мы укажем в файлах ldapusers.cf и ldap-aliases.cf.

Файл /etc/postfix/ldap-users.cf содержит

server_host = ldap.lw.lan
search_base = dc=lw,dc=lan
server_port = 389
bind = yes
bind_dn = cn=Manager,dc=lw,dc=lan
bind_pw = secret
query_filter = (mail=%s)

Содержимое файла /etc/postfix/ldap-aliases.cf:

server_host = ldap.lw.lan
search_base = dc=lw,dc=lan
server_port = 389
bind = yes
bind_dn = cn=Manager,dc=lw,dc=lan
bind_pw = secret
query_filter = (mail=%s)
result_attribute = mail
special_result_filter = %s@%d

Файлы содержат стандартные параметры работы с OpenLDAP. В /etc/postfix/ldap-users.cf описываем параметры пользователей, а именно, фильтр поиска пользователей – атрибут mail. Файл /etc/postfix/ldap-aliases.cf содержит параметры для доставки почты; в нем указывается, что почту нужно доставлять на почтовый адрес, указанный в атрибуте mail.

[править] Dovecot

Так как мы собираемся не только отправлять почту, но и принимать ее, для создания почтового сервера нам понадобится Dovecot.

Dovecot – свободный IMAP- и POP3-сервер, разрабатываемый в расчете на безопасность, гибкость настройки и быстродействие. Первый релиз состоялся в 2002 году. Основные особенности сервера:

  • Поддержка форматов почтовых ящиков mbox и Maildir, а также собственные форматы dbox и Cydir.
  • Высокое быстродействие, благодаря индексации содержимого ящиков.
  • Большое количество поддерживаемых механизмов хранения аутентификационной информации (включая LDAP) и самой аутентификации (поддерживается SSL).
  • Собственная реализация SASL. Postfix 2.3+ и Exim 4.64+ могут аутентифицироваться напрямую через Dovecot.
  • Полная поддержка IMAP ACL для гибкой настройки прав пользователей.
  • Поддержка общих ящиков и папок [shared mailboxes and folders].
  • Расширяемость при помощи плагинов.
  • Собственный MDA с поддержкой Sieve.
  • Строгое следование стандартам: Dovecot – один из немногих, кто проходит тест на соответствие всем стандартам IMAP.
  • Возможность модификации индексов с нескольких компьютеров, что позволяет ему работать с NFS и кластерными файловыми системами.
  • Поддерживает различные виды квот.
  • Поддержка различных ОС: Linux, Solaris, FreeBSD, OpenBSD, NetBSD и Mac OS X.
  • Простота настройки.

Установка:

apt-get install dovecot

Основной конфигурационный файл – /etc/dovecot.conf. В нем необходимо найти секцию, описывающую способы аутентификации – auth default, где надо расскомментировать строки, связанные с LDAP.

auth default {
 mechanisms = plain
passdb ldap {
 args = /etc/dovecot-ldap.conf
}
userdb ldap {
 args = /etc/dovecot-ldap.conf
}
user = root
ssl_require_client_cert = no
ssl_username_from_cert = no
}

Здесь мы указали некий файл /etc/dovecot-ldap.conf. Что же хранится в этом файле?

hosts = ldap.example.com
dn = cn=Manager,dc=example,dc=com
dnpass = secret
ldap_version = 3
base = dc=example,dc=com
deref = never
scope = subtree
user_filter = (uid=%u)
pass_filter = (&(objectClass=posixAccount)(uid=%u))
default_pass_scheme = CRYPT

Как вы можете заключить по содержанию файла, в нем хранятся параметры подключения к LDAP-серверу, описание которых мы уже приводили выше, и фильтры поиска записей. Итак, почтовый сервер готов; можно начинать проверять его работу, принцип которой был проиллюстрирован рисунком на предыдущей странице.

[править] PAM

Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) – это набор разделяемых библиотек, дающих возможность интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации. Данный механизм является одной из частей стандартного механизма обеспечения безопасности UNIX-систем.

Здесь необходимо указать, что наша система будет проходить аутентификацию по протоколу LDAP, обращаясь за данными к службе каталогов OpenLDAP.

Установка и конфигурирование:

apt-get install libnss-ldap
auth-client-config -t nss -p lac_ldap
pam-auth-update

Желательно после выполнения настройки PAM выполнить команду reboot.

[править] LDAP­-сервер

На данном этапе наш сервер готов к работе, выполняя роль прокси-сервера, файлового сервера, почтового сервера. Не хватает одного: базы пользователей. Если сервер делается с нуля, то всех пользователей легко и просто задать через графическую систему управления GOsa. Если же сервер является заменой Active Directory (AD), то надо бы выполнить миграцию пользователей. Об этом наш следующий пункт.

[править] Active Directory

А что же с Active Directory? Самое время подумать об этом. Имея настроенный сервер LDAP и Samba, можно выполнить миграцию пользователей AD. Примем за основу настройки Samba, приведенные выше в пункте Samba, и изменим их.

Самое главное – это SID’ы. Если ранее мы использовали локальный SID, то теперь для корректной работы файлового сервера нам понадобится SID сервера с AD.

net rpc getsid -S DOMAIN -U Administrator%password

Полученный SID запишем в /etc/smbldap-tools/sambaldap.conf.

В начале нужно перевести Samba из режима PDC (Primary Domain Controller) в BDC (Backup Domain Controller). За это отвечает параметр domain master, значение которого “yes” для PDC и “no” для BDC. Изменим его значение на “no”. Основные изменения закончены. Теперь введем наш сервер в домен AD:

net ads join -U Administrator%password

Можно приступать к миграции пользователей. Для этого выполним команду

net rpc vampire

Данная команда выполнит миграцию пользователей AD и запись данных в LDAP-сервер. Если же вы не хотите добавлять все записи или есть необходимость отредактировать их, то вам следует сделать запись в ldif-файл. Поcле редактирования останется только добавить содержимое файла в OpenLDAP.

net rpc vampire ldif filename.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f filename.ldif

[править] Итог

В результате мы имеем серверное решение, не уступающее проприетарному, а возможно, и превосходящее его.

Плюсы:

  • Полностью свободное ПО.
  • Неограниченный функционал, т.е. администратор способен настроить службы так, как это ему необходимо, а по возможности и расширить данное решение.

Минусы:

  • Минус один, но в общем решаемый! На данном этапе не реализован механизм групповых политик.

Для решения этой задачи можно воспользоваться репозиторием Samba 4, которая сейчас находится в стадии бета-тестирования. Но пока никто не выдаст вам гарантии того, что после обновления файлового сервера все будет работать так, как положено. Поэтому придется дожидаться появления очередного релиза.

Персональные инструменты
купить
подписаться
Яндекс.Метрика