Настройка postfix+dovecot+ldap
Введение
Исходные данные для настройки: связка postfix+dovecot+ldap настраивалась
для друх операционных и двух разнотипных задач. Одна - это домашняя машина
с Fedora и сервер клиента CentOS. 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
|
|