|
Postfix: как превратить системных пользователей в виртуальных
Перевод настроенного по умолчанию почтового сервера (адресаты основного
домена postfix - системные пользователи сервера) на обслуживание только
виртуальных доменов удобнее производить сразу - это займет несколько часов.
Однако иногда возникает необходимость поэтапного перевода, без остановки
почтовой системы.
Эти рекомендации описывают постепенный перевод системных
пользователей
в виртуальные пользователи основного домена postfix как этап перевода
этого домена в виртуальный.
Для опытных администраторов
Технология перевода основана на использовании
специального класса адресатов postfix
«fallback» -
для принадлежащих к основному домену postfix, но не имеющим системной
учетной записи. Для доставки
почты таким адресатам локальный агент доставки (LDA) POP3/IMAP сервера настраивается как программа (fallback_command) или транспорт
postfix (fallback_transport).
При использовании POP3/IMAP сервера dovecot как fallback_transport он
настраивается так же, как и виртуальный транспорт (см. документацию на dovecot),
однако в командной строке вместо "-d ${recipient}" необходимо
писать "-d ${user}".
Для недостаточно опытных администраторов
Для перевода системных пользоватетей в
виртуальные (не имеющих системной учетной записи) понадобится POP3/IMAP сервер,
имеющий в своем составе
LDA и способный работать как с системными пользователями, так и со своей базой
пользователей (текстовая, SQL, LDAP и т.п.).
Строго говоря, LDA от POP3/IMAP сервера требуется только на время перевода
юзеров в виртуальные - когда основной домен postfix сам станет виртуальным,
LDA можно отключить - почту можно доставлять встроенным виртуальным
транспортом postfix.
Перевод системных пользователей в виртуальные удобен для кардинальной перестройки
почтовой системы (например, на хранение базы виртуальных пользователей в
БД LDAP или SQL, изменение типа хранилища почты - из mbox в Maildir или dbm,
перенос хранилища почты в другую директорию и т.п.).
Примеры настройки приводятся для моей концигурации:
- POP3/IMAP-сервер - dovecot
- Почта хранится в Maildir
- Почтовая директория - ~/mail/inbox/
- Список виртуальных пользователей postfix - текстовый файл (БД формата hash)
- Список паролей dovecot - текстовый файл, схема
паролей - CRYPT (пароли задаются утилитой htpasswd из комплекта веб-сервера
apache)
До перевода агентом доставки для системных пользователей был dovecot LDA:
main.cf:
mailbox_command = /usr/local/libexec/dovecot/deliver
Подготовка к переводу:
- В системе создается пользователь - владелец директории с виртуальными
почтовыми ящиками.
- В POP3/IMAP сервере создается отдельная БД виртуальных пользователей
(текстовая, SQL или LDAP)
с GID и UID владельца «виртуальных» ящиков.
- Postfix настраивается для использования этой БД в качестве списка получателей.
Если он не может напрямую работать с БД, необходим список
получателей - текстовой файл («выжимка» из этой БД).
На примере моей почтовой системы:
Пусть ящики виртуальных пользователей принадлежат системному пользователю
virtual и хранятся в директории /home/virtual/<domain.ru>/<username>/mail/inbox.
Тогда:
- Создаете системного пользователя virtual, запоминаете его UID и GID
(допустим, 5000).
Блокируете возможность входа в систему с такой учетной записью.
-
Создаете файл со списком получателей для postfix (назовем его usermap),
генерируете hash-БД из него, создаете пустой файл паролей (password)
для dovecot:
# cd /home/virtual
# touch usermap
# postmap usermap
# touch password
- В файле main.cf в переменную local_recipient_maps добавляете
hash:/home/virtual/usermap.
-
В настройки dovecot (файл dovecot.conf)
описываете файл /home/virtual/password как базу паролей,
создаете базу данных типа "static":
passdb passwd-file {
args = /home/virtual/password
}
userdb static {
args = uid=5000 gid=5000 home=/home/virtual/<domain.ru>/%n
}
- Объявляете dovecot LDA как fallback_transport:
В файл master.cf:
# Dovecot LDA
dovecot unix - n n - - pipe
flags=DRhu user=virtual:virtual argv=/usr/local/libexec/dovecot/deliver -d ${user}
В файл main.cf:
dovecot_destination_recipient_limit = 1
fallback_transport = dovecot
Обращаю внимание, что в командной строке для запуска deliver указано
"-d ${user}", а не "-d ${recipient}", как в документации на Dovecot.
- Перезапускаем dovecot и postfix
# /usr/local/etc/rc.d/dovecot restart
# postfix reload
Перевод пользователей, которым не требуется системная учетная запись:
- Переводимый пользователь добавляется в базу POP3/IMAP сервера.
- Если postfix не может работать с этой БД - в текстовой файл требуемого
postfix формата.
- Почта этого пользователя переносится на новое место, владелец ее изменяется на
«виртуального» системного пользователя.
- Системная учетная запись переводимого пользователя удаляется.
Перед удалением реальных пользователей рекомендуется потренироваться на
фиктивных временных пользователях.
На примере моей почтовой системы:
- Внести пользователя в файл usermap:
user1<Tab>Иванов Иван Иванович
или
user1<Tab>domain.ru/user1/mail/inbox/
- Создать из файла usermap hash-базу:
# postmap usermap
- Создать пароль для пользователя:
# htpasswd passwd user1
New password:
Re-type new password:
Adding password for user user1
-
После переноса почты убедиться, что старый почтовый ящик пользователя
пустой, удалить системного пользователя:
# rmuser user1
Остановимся на файле usermap. Поскольку его структура практически
полностью соответствует
структуре списка адресатов виртуального домена (virtual_mailbox_maps),
рекомендую заполнять его с учетом конфигурацию почтового сервера в будущем
(с виртуальными доменами):
- Если по ящикам почту будет раскладывать внешний транспорт
(тот же dovecot), правая часть файла может быть любой:
user1<Tab>Иванов Иван Иванович
user2<Tab>Мухоморыч
- Если по ящикам виртуального домена почту будет раскладывать встроенный
транспорт postfix'а (virtual), правая часть файла должна содержать путь
для доставки почты:
user1<Tab>domain.ru/user1/mail/inbox/
user2<Tab>domain.ru/user2/mail/inbox/
Перевод в виртуальные пользователей, которым оставляется системная запись,
осуществляется также, как и для обычных пользователей, подготовка к переводу
следующая:
- На время перевода рекомендую останавливать работу postfix.
- В настройках postfix (файл main.cf) в качестве mailbox_transport объявить
тот же транспорт, что и fallback_transport; переменную
mailbox_command удалить.
Вот и все.
Осталось перенастроить postfix на работу с виртуальным доменом.
Рекомендуем эту настройку не затягивать.
Автор: Георгий Мурый, site@moury.ru, 2008 год
|