Как стать автором
Обновить

Dovecot: Работа с групповыми почтовыми ящиками под своим паролем

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.8K

Прелюдия

В любой организации имеются ролевые почтовые адреса (типа info@company.com или order@company.com) с которыми коллективно работает группа сотрудников . В некоторых почтовых системах (как например MS Exhange), поддержка таких адресов уже зашита в логику программного обеспечения. В других случаях приходится самим подбирать различные технические подходы. Давайте рассмотрим их подробнее.

  • Почтовый "алиас", который поставлен в соответствие списку рассылки на персональные адреса сотрудников.

  • Автоматизированные списки рассылки (mailman и аналогичные) также позволяют разослать приходящее на ролевой адрес письмо по списку, но поддерживают дополнительную функциональность: контроль доступа, модерирование, архивацию.

  • Общий почтовый ящик, который подключен к почтовым клиентам сотрудников (по протоколу IMAP).

Если в вашем случае требуется именно общий почтовый ящик и вы испытываете определенные сложности с его организацией, то, как говорится, "мы идем к вам)"

Колхозим общий почтовый ящик

Наиболее примитивный подход - это просто раздать пароль сотрудникам общего почтового ящика одновременно получив изрядный головняк с безопасностью и процедурой изменения этого самого пароля. Проходим мимо и двигаемся дальше.

В нашей организации почтовая система организована на базе популярной связки Postfix+Dovecot+LDAP.

DISCLAIMER

Предыдущая редакция этой статьи была отклонена модераторами ресурса HABR которые увидели в ней рекламу моего продукта (или компании). Понятия не имею где они ее здесь нашли. К сожалению интерфейс системы не позволяет обратиться к модератору непосредственно за разъяснениями. Остается, только строить предположения, а для ответа использовать эту немного странную форму коммуникации. Поэтому здесь я ответственно заявляю, что продукты Postfix (c), Dovecot (c) и протокол доступа к директориям LDAP являются открытыми продуктами и протоколами. Они доступны в исходниках на соответствующих сайтах, а бинарные сборки присутствуют практически во всех основных версиях Linux. Ни я, ни моя организация не имеем к ним прямого отношения и не преследуем здесь коммерческой или какой-либо иной выгоды. Как-то так. Приношу свои извинения за банальность.

Почтовый сервер Dovecot, для совместного доступа к почтовым папкам предлагает механизм общих почтовых ящиков (Shared Mailboxes), но если приглядеться, то это не столько механизм общих почтовых ящиков, сколько общих почтовых папок. В целом процедура эта достаточно хлопотная. Не погружаясь в технические тонкости, можно сказать что она требует следующих действий:

  1. В конфигурации Dovecot настроить доступ к папкам входящих и исходящих писем ролевой учетной записи.

  2. Смонтировать эти папки в настройках почтовых ящиков сотрудников.

  3. Настроить почтовые профили сотрудников, таким образом, чтобы ответы ролевого адреса сохранялись в общую папку исходящих писем.

Намного проще было бы подключиться к ролевому почтовому ящику используя при этом пароль от своей учетной записи. Именно так мы и поступили. Потратив некоторое время на поиск решений в сети и не найдя ничего подходящего был разработан механизм настроек Dovecot, описанный дальше.

Настраиваем Dovecot для группового доступа к ролевым почтовым ящикам

Сервер Dovecot поддерживает довольно гибкую систему аутентификации и авторизации пользователей. Для этой цели используются реестры пользователей (userdb) и реестры паролей (passwb). Когда пользователь вводит свои учетные данные в виде имени пользователя и доменного имени (name@domain) в системе инициируются две служебные переменные %n=<name>и %d=<domain> . После этого сервер последовательно проверяет наличие пользователя в парольных реестрах. Если аутентификация в парольном реестре прошла успешно, ищется советующая запись в реестре пользователей и из нее извлекаются параметры настроек почтового ящика.

Настройка парольного реестра выглядит следующим образом:

[Файл /etc/dovecot/dovecot.conf]:
passdb {
args = /etc/passdb-ldap-args-file.conf
driver = ldap
....
}
[Файл /etc/passdb-ldap-args-file.conf]:
...
pass_filter = ...
pass_attrs = ...

Форма и содержимое файла аргументов (args) зависит от драйвера аутентификации. В нашем случае это ldap. Для поиска записи пользователя в базе ldap используется атрибут pass_filter, содержащий выражение фильтра запроса ldap. В атрибуте pass_attrs задаются ответствуя между атрибутами найденного объекта ldap и внутренними переменными пользователя Dovecot (password, allow_nets и др.), которые участвуют в процессе аутентификации и авторизации. Кроме этого есть возможность переписать и значение самой внутренней переменной user, которая определяет имя пользователя.

На мой взгляд, синтаксис атрибута pass_attrs несколько сумбурный и плохо документирован, поэтому имеет смысл рассмотреть его подробней на примере:

pass_attrs = =user=%n@mydomain.com,userPassword=password

В данном случае значение ldap-атрибута userPassword будет загружено во внутреннюю переменную password. Кроме того переменная user примет значение %n@mydomain.com, то есть к имени пользователя будет добавлен домен mydomain.com.

Странности грамматики

Обратите внимание, что присвоение служебных переменных происходит с права на лево (=user=%n@mydomain.com), а загрузка значений атрибутов в служебные переменные слева на право (userPassword=password). Этот факт может вызвать недоумение, но разработчики Dovecot, следуя какой-то своей внутренней логике, сделали именно так.


Теперь перейдем к примеру настроек для решения нашей задачи. Пусть есть ролевой ящик info@company.com и пользователи user1@company.com и user2@company.com, которые необходимо подключить почтовый ящик info.

Делай раз:

В конфигурации dovecot.conf создаем специальный парольный реестр:

passdb {
args = /etc/dovecot/dovecot-ldap-company-shadow.conf
driver = ldap
username_filter = user1@info user2@info
}

В конфигурации вы можете заметить фильтр username_filter, который в данном случае работает как авторизация доступа пользователя (user@...) к "чужому" ящику (...@info). В частности, если пользователь user1 хочет подключиться к ящику info под своим паролем, он должен использовать имя user1@info.

Дела два (файлdovecot-ldap-company-shadow.conf):

hosts = ...
base = ...
...
pass_filter = ...(uid=%n)
pass_attrs = =user=%d,userPassword=password, ...

Рассмотрим логику работы настроек. При авторизации пользователя (user1@info) система поверяет пароль для пользователя в именем user1, использую для этого выражение фильтра поиска в LDAP(uid=%n). Если проверка прошла успешно, то имя пользователя меняется на "доменную часть" info (=user=%d).

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

pass_filter = ...(mail=%n@company.ru)
pass_attrs = =user=%d@company.ru,userPassword=password, ...

Заключение

Могу сказать, что результат мне понравился, поэтому спешу поделиться им с благодарной общественностью. Для добавления или удаления доступа к ролевым почтовым ящикам достаточно отредактировать атрибут username_filter и любезно попросить сервер dovecot перечитать конфигурацию.

Теги:
Хабы:
Всего голосов 6: ↑5 и ↓1+6
Комментарии15

Публикации

Истории

Работа

Ближайшие события