Maint Laboratory

Лаборатория Maint

 
    Главная    Программы    Библиотеки    Документация    Услуги    Контакты  

Настройка postfix+dovecot+ldap

Введение

  Исходные данные для настройки: связка postfix+dovecot+ldap настраивалась для друх операционных и двух разнотипных задач. Одна - это домашняя машина с Fedora 9 и сервер клиента CentOS 5.0. Postfix, ldap установлены "родные" для ОС, dovecot - пересобирал, из-за неудобного, с моей точки зрения, расположения конфигурационного файла(вместо /etc/dovecot.conf - /etc/dovecot/dovecot.conf). Из-за одновременной настройки для двух разнотипных задач, некоторые настройки могут показаться странными. Но это оправдано, в моем случае ;-).

1. Часть первая LDAP

  Начнем с конфигурации ldap.conf. Много думать не потребовалось:
URI ldap://127.0.0.1/
BASE dc=example,dc=ru

  Теперь перейдем к файлу sldap.conf. Я даю, только изменения, которые я произвел, на базе стандартного файла конфигурации. Сначала потребуется vmail.scheme. Достаточно легко находиться в google. На всякий случай, даю свою ссылку, можно скачать здесь .

include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/dyngroup.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/ppolicy.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/vmail.schema

  Далее определяем тип базы данных. Во всех примерах, которые я нашел в googlе, определяется только ldbm. Для Fedora 9 и CentOS 5 я взял bdb.

database bdb
suffix "dc=example,dc=ru"
rootdn "cn=root,dc=example,dc=ru"
password-hash {crypt}

  Указанный в password-hash способ шифрования пароля можно посмотреть в документации к вашей системе. Далее я наткнулся, на то, что в Fedora 9 нет файла DB_CONFIG, который необходим для пересборки и инициализации базы данных. При первом запуске, ldap ругается. Не знаю, где в Fedora 9, но в CentOS 5 он был. (Вы можете его взять здесь) Недолго думая я перенес его в каталог /var/lib/ldap Fedora. Наверное существует более простой способ нахождения этого файла ;-). В примере у меня указан администратор ldap как root (cn=root). Но вообще то этого делать не стоит. Хотя и можно (работают же некоторые из под root в текущей работе).

rootpw {crypt}xxxxxxxxxxxxx

Пароль для администратора ldap. Его можно сделать следующей командой:

slappasswd -h {указать способ шифровки пароля, который вы выбрали в password-hash}.

  Причем, способ шифровки указывается именно в фигурных скобках. Это я говорю специально, т.к. долго пытался понять, откуда ошибка при выполнении достаточно простой команды.
  Поскольку ldap, это все же база данных, следует определить индексы. Для не сведующих в работе баз данных, сообщаю, что индексы необходимы для ускорения поиска в базах. К стандартным индексам я добавил необходимые для работы с почтой.

index mailBox eq index status eq

  Эти поля определены в vmail.schema. Не включив эту схему, вы будете получать ошибку при инициализации базы. Теперь нужно описать доступ к информации в базе данных. Указываем, что к аттрибуту userPassword себе(под кем Вы находитесь в системе) разрешена запись, анонимам предлагается зарегистрироваться, остальным отказ.

access to attrs=userPassword
  by self write
  by anonymous auth
  by * none

Доступ к остальной информации: себе - писать, анонимам читать, остальным ничего.

access to *   by self write   by anonymous read   by * none

  Существуют более изощренные способы разграничения доступа, в зависимости от параноидальности администратора. Свои настройки я приводить не буду. В конце концов, параноидальность это дело личное, что-то вроде любви, и ни кого кроме обладателя не касается ;-)
  Запускаем LDAP. В RH - подобных системах это лучше делать из каталога /etc/rc.d/init.d. Собственно команда ldap start. В каталоге (папке, директории) /var/lib/ldap формируется база данных. Пока это только структура, общая схема базы, без конкретного наполнения. Производим начальное заполнение базы. Привожу пример файла init.ldif:

dn: dc=example,dc=ru
dc: example
objectClass: dcObject
objectClass: top
objectClass: organization
o: Example OOO
o: example.ru

dn: cn=root,dc=example,dc=ru
objectClass: top
objectClass: organizationalRole
cn: root
description: Example LDAP manager

dn: ou=People,dc=example,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: People
description: Stuff area

dn: ou=Group,dc=example,dc=ru
objectClass: top
objectClass: organizationalUnit
ou: Group
description: Groups of users

Опять указан администратор ldap как root.Поменяйте на свое имя. Занесение данных в базу производится командой:

ldapadd -xWD cn=root,dc=example,dc=ru -h localhost -f init.ldif

  Не забудьте про смену имени root. Дальнейшее заполнение базы достаточно трудоемкий процесс. И очень творческий, для любителей copy/paste. Или любителей попрограммировать утилитки на 1 раз. Во первых нужно занести в базу группы, во вторых пользователей. Можно этого и не делать, для имеющихся пользователей в системе, если вы собираетесь раздавать почту только новым виртуальным пользователям. У меня стояла своя задача. Почта должна приходить всем, кто уже есть в системе, в том числе мне. Нашел в google MigrationTools .После правки наименования организации, домена и т.п. импортировал имеющиеся группы и пользователей. Получил три файла:

groups.ldif

dn: cn=root,ou=Group,dc=example,dc=ru
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0

dn: cn=bin,ou=Group,dc=example,dc=ru
objectClass: posixGroup
objectClass: top
cn: bin
userPassword: {crypt}x
gidNumber: 1
memberUid: daemon
memberUid: root
... и т.д

users.ldif

dn: uid=root,ou=People,dc=example,dc=ru
uid: root
cn: root
sn: root
mail: root@example.ru
mailRoutingAddress: root@example.ru
mailHost: example.ru
objectClass: inetLocalMailRecipient
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}x
shadowLastChange: 13949
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root

dn: uid=bin,ou=People,dc=example,dc=ru
uid: bin
cn: bin
sn: bin
mail: bin@example.ru
mailRoutingAddress: bin@example.ru
mailHost: example.ru
objectClass: inetLocalMailRecipient
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}x
shadowLastChange: 13949
shadowMax: 99999
shadowWarning: 7
loginShell: /sbin/nologin
uidNumber: 1
gidNumber: 1
homeDirectory: /bin
gecos: bin
... и т.д

mail.ldif

dn: mailBox=root@example.ru,dc=example,dc=ru
mailBox: root@example.ru
status: enabled
objectClass: mailAccount
base: billing
userPassword: {crypt}x

dn: mailBox=bin@example.ru,dc=example,dc=ru
mailBox: bin@example.ru
status: enabled
objectClass: mailAccount
base: billing
userPassword: {crypt}x
... и т.д

  Заполнение базы LDAP для работы с почтой можно считать завершенной. Заполнение, несколько, избыточно. Т.е. группы и пользователей можно было и не заносить. Пункт в mail.ldif base: billing, можно было не включать, у кого авторизация и обслуживание пользователей не идет через биллинговую систему. Все. Осталось только занести данные в LDAP.

ldapadd -xWD cn=root,dc=example,dc=ru -h localhost -f groups.ldif
ldapadd -xWD cn=root,dc=example,dc=ru -h localhost -f users.ldif
ldapadd -xWD cn=root,dc=example,dc=ru -h localhost -f mail.ldif


[Продолжение следует...]

 
  [ Главная ]    [ Программы ]    [ Библиотеки ]    [ Документация ]    [ Услуги]     [ Контакты ]