Чтиво: установка сервера часть 027
Настройка и использование LDAP. Часть I.
Уже много статей написано на эту тему (даже на русском языке), но
именно с этого мне нужно начать, чтобы постепенно подойти к вопросу о
настройке почтовой системы.
Итак, ресурсы:
http://linux.yaroslavl.ru/docs/howto/ldap-howto/index.html
http://www.ldapzone.spb.ru/docs/ldap_art.phtml
http://www.ldapzone.spb.ru/docs/andrek.phtml
Говорить об использовании LDAP буду на примере настройки DNS.
Немного скажу о том что такое LDAP(Lightweight Directory Access
Protocol) - это служба каталогов, система хранения данных (storage) в
виде дерева, широко используется в текущее время в ОС Windows,
конкретно при реализации Active Directiory. Удобно тем, что всю
информацию о какой-либо системе можно представить в виде дерева со
структурой каталогов, внутри которых могут опять находится опять же
каталоги или же сами объекты. Например, информацию о компьютерной
системе можно представить следующим образом:
|
|-- admins
| |
| |-- MailAdmins
| |-- DNSAdmins
| |-- ...
|
|-- users
| |
| |-- user1
| |-- user2
| |-- OtherGroup
| | |
| | |-- user3
| | |-- user4
| | |-- ...
| |
| |-- ...
|
|-- services
| |
| |-- postfix
| |-- courier
| |-- bind
|
|-- hosts
|
|-- 127.0.0.1
|-- 192.168.2.1
|-- 192.168.2.11
|-- ...
У каждого объекта могут быть атрибуты (соответствующие классу/ам,
которому/ым принадлежит объект). Например, у пользователя такими
атрибутами являются: пароль доступа, почтовый акаунт, uid и gid и т.д.,
у хоста же - MAC-адрес, доменное имя.
Таким образом LDAP удобно использовать как ЕДИНОЕ место для
хранения информации, которая многократно может использоваться в
системе. Например, информация о пользователе может использоваться при
входе в сеть, при входе в компьютер, при получении почты, в системе
учета трафика (билинговой системе) и т.д. Т.е. каждая программа,
использующая эти схожие данные, должна иметь собственную базу данных,
что порождает избыточность и сложность администрирования. LDAP же
позволяет решить данную проблему (конечно, при правильном подходе к
данному вопросу), тем более что на данный момент производители
вышеперечисленных сервисов стараются включить (или уже включили) в свои
продукты поддержку LDAP.
В Linux за работу с LDAP отвечает пакет openldap (у меня версия
openldap-2.0.27-8)
В установке ничего сложного:
$ rpm -ihv openldap-2.0.27-8.i386.rpm
$ rpm -ihv openldap-servers-2.0.27-8.i386.rpm
$ rpm -ihv openldap-clients-2.0.27-8.i386.rpm
$ rpm -ihv openldap-devel-2.0.27-8.i386.rpm
devel-пакет я устанавливаю, что бы сделать возможной сборку других
программ с поддержкой LDAP.
Основой работы LDAP являются схемы - файлы описывающие классы
объектов, которыми может оперировать LDAP и их атрибуты. В стандартной
сборке openldap поставляется несколько ldap-схем
(/etc/openldap/schema/), достаточных для типичной работы сервера, но я
для большего понимания работы ldap и настройки системы конкретно под
себя, я создал свою схему. В качестве дополнительного пособия по
созданию схемы я использовал уже готовые схемы и набор rfc из комплекта
документации, поставляемой с openldap.
begin koal.schema # # Атрибуты объектов
# # Число перед "NAME" - OID - идентификатор объекта (?)
#
# Синоним акаунта почты, наследуется от "mail"
attributetype ( 1.3.6.1.4.1.10018.1.1.2 NAME 'mailAlias'
SUP mail )
# Адрес пересылки почты, наследуется от "mail"
attributetype ( 1.3.6.1.4.1.10018.1.1.3 NAME 'mailForward'
SUP mail )
# Квота на почтовый ящик, новый атрибут с OID (после SYNTAX),
# соответствующим числовому целому типу. SINGLE-VALUE, говорит о том,
# что атрибут может принимать, только одно значение (по умолчанию
# несколько (multi))
attributetype ( 1.3.6.1.4.1.10018.1.1.4 NAME 'mailQuota'
DESC 'A number that represents the quota on a mailbox'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
# Относительный путь до файла почтового ящика, строковый тип с длиной в
# 256 символов, нечувствительный к регистру
attributetype ( 1.3.6.1.4.1.10018.1.1.5 NAME 'mailBox'
DESC 'The relative path to the mailbox for a mail account in a non-default
location'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
# Абсолютный путь до почтовой директории, наследуется от "mailDirectory"
attributetype ( 1.3.6.1.4.1.10018.1.1.6 NAME 'mailDirectory'
SUP homeDirectory )
# Строка, содержащая правила доступа к почтового ящику.
attributetype ( 1.3.6.1.4.1.10018.1.1.7 NAME 'mailAccess'
DESC 'Access string'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
# Имя почтового домена
attributetype ( 1.3.6.1.4.1.10018.1.1.8 NAME 'mailDomain'
DESC 'A virtual mail domain'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
# Строка, содержащая транспорт почтовой системы
attributetype ( 1.3.6.1.4.1.10018.1.1.9 NAME 'mailTransport'
DESC 'transport for domain'
EQUALITY caseIgnoreIA5Match
SUBSTR caseIgnoreIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
# # Классы объектов
# # Класс, описывающий объект почтового акаунта, наследуется от класса
# "top", тип класса обычный (т.е. можно делать объекты данного класса,
# бывает еще абстрактный, от которого можно только наследовать, объект
# обязательно при создании ДОЛЖЕН содержать поля, перечисленные в MUST,
# и МОЖЕТ содержать поля, перечисленные в MAY
objectclass ( 1.3.6.1.4.1.10018.1.2.1 NAME 'mailAccount'
SUP top
STRUCTURAL
DESC 'mail account'
MUST ( mail $ mailAccess $ mailBox $ mailDirectory )
MAY ( mailAlias $ mailQuota $ mailForward ) )
# Класс, описывающий объекты получателей почты
objectclass ( 1.3.6.1.4.1.10018.1.2.2 NAME 'mailRecipient'
SUP top
STRUCTURAL
DESC 'mail account for forward'
MUST ( mailAlias $ mailAccess $ mailForward ) )
# Класс, описывающий объекты транспорта почтовой системы
objectclass ( 1.3.6.1.4.1.10018.1.2.3 NAME 'mailDomainTransport'
SUP top
STRUCTURAL
DESC 'Domain mail aliasing/transporting entry'
MUST ( mailDomain )
MAY ( mailTransport $ description ) )
end koal.schema за настройку работы сервера отвечает конфигурационный файл
/etc/openldap/slapd.conf
begin slapd.conf # Подключаем файлы схем
# Стандартные схемы
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
# Моя схема
include /etc/openldap/schema/koal.schema
# Схема для обеспечения работы DNS (взята с сайта проекта соединяющего
# bind и ldap: http://www.venaas.no/ldap/bind-sdb/dnszone-schema.txt
include /etc/openldap/schema/dnszone.schema
# Секция ACL (access control list) разграничивающая правила доступа к
# элементам LDAP. Важен порядок в котором задаются правила. (ОСНОВНАЯ
# ОШИБКА ПРИ КОНФИГУРИРОВАНИИ)
# Дать возможность менять пароль авторизированным пользователям и
# администраторам
access to attr=userPassword
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by self write
by anonymous auth
# Дать доступ на запись ко всем элементам ldap администраторам из ветки
# cn=admin,dc=karavay-shops,dc=ru
access to *
by dn=".*,cn=admin,dc=karavay-shops,dc=ru" write
by * none
# Определение нового экземпляра базы данных на основе LDBM
database ldbm
# Основной суффикс данного экземпляра БД. Корневой объект root. Все
# запросы, заканчивающиеся на suffix будут переданы данному
# экземпляру БД
suffix "dc=karavay-shops,dc=ru"
# Отличительное имя, которое не подлежит контролю доступа или
# административным ограничениям при операциях в этой базе данных. Не
# требуется, чтобы отличительное имя ссылалось на элемент каталога.
# Иными словами - администратор данной БД, на которого не действую ACL
rootdn "cn=admin,dc=karavay-shops,dc=ru"
# Пароль администратора, можно указывать прямым текстом, или же
# сгенерировать с помощью утилиты slappasswd. Этот пароль используется
# даже в том случае, если у данного объекта в базе установлен другой
# пароль.
rootpw {SSHA}jeNRk8wLw4DYLdl+x+S8Z0dLECzYythQ
# Каталог, в котором находятся файлы, содержащие базу данных LDBM и
# связанные с ними индексные файлы
directory /var/lib/ldap
end slapd.conf Запуск ldap сервера можно организовать командой
$ /sbin/service ldap start
Также необходимо проверить запускается ли сервер автоматически при
старте системы:
$ /sbin/chkconfig --list ldap
И, если необходимо, включить автозапуск
$ /sbin/chkconfig --level 2345 ldap on
C уважением, Kolotov Alexandr aka mr. Эбола
отвечать: akmypo***@m*****.ru
ICQ: 100349254
| Registered Linux user # 236664 |
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.linux.kirovlug-list@subscribe.ru
Отписаться: mailto:comp.soft.linux.kirovlug--unsub@subscribe.ru
http://subscribe.ru/ mailto:ask@subscribe.ru