Всё чаще в работе с почтой используется протокол IMAP, что достаточно удобно, потому что это протокол синхронизации, в отличии от трансферного протокола POP3. Но вот если одним и тем же ящиком пользуются несколько человек, например служба поддержки компании, то могут возникнуть проблемы, как случайные, так и с умыслом. Самая частая — удаление сообщений на одном клиенте влечёт за собой синхронное удаление на всех активных клиентах, в том числе и на сервере.
Эта инструкция объяснит как можно ограничить доступ к ящику по протоколу IMAP. Предполагается что в системе уже есть установленный сервер Dovecot, как описано в статье Серверная почта на основе Postfix, Dovecot и MySQL для Debian.
Мы воспользуемся плагином ACL (Access Control Lists). Чтобы его активировать нужно открыть на редактирование файл конфигурации dovecot:
nano /etc/dovecot/dovecot.conf
Теперь добавим или совместим следующие данные в соответствующих секциях:protocol imap { # через пробел перечисляем плагины mail_plugins = acl imap_acl } protocol lda { # через пробел перечисляем плагины mail_plugins = acl } plugin { acl = vfile }Перезапустим dovecot:
/etc/init.d/dovecot restartТеперь основная идея расширения или ограничения доступа. В папке, где находятся файлы нашего почтового ящика, доступом к которому мы хотим управлять, нужно создать файл dovecot-acl. Например есть директория /home/vmail/example.com/username/Maildir, именно там находится вся IMAP структура username и именно этот ящик нужно настроить. Создадим файл dovecot-acl:
touch /home/vmail/example.com/username/Maildir/dovecot-aclОткроем его на редактирование:
nano /home/vmail/example.com/username/Maildir/dovecot-aclИ запишем следующую строку:
owner lrwstipekxaЭта строка определяет, что может и чего не может делать пользователь. Вот формат записи строк в файле:
<identifier> <ACLs> [:<named ACLs>]Если нужно предоставить доступ на чтение, достаточно будет указать:
owner lrСтрок в файле может быть несколько, каждая может описывать уровни доступа для разных сущностей.
Полная таблица идентификаторов:
- group-override=group name
- user=user name
- owner
- group=group name
- authenticated
- anyone (или anonymous, что равнозначно anyone)
Пример многострочного файла:
owner lrwstipekxa anyone lrПолная таблица флагов:
l | lookup | Ящик виден в списке |
r | read | Ящик может быть открыт на чтение |
w | write | Флаги и ключевые слова сообщения могут быть изменены, за исключением «Просмотрено» и «Удалено» |
s | write-seen | Флаг сообщения «Просмотрено» (\Seen) может быть изменён |
t | write-deleted | Флаг сообщения «Удалён» (\Deleted) может быть изменён |
i | insert | Сообщения могут быть записаны или скопированы в ящик |
p | post | Сообщения могут быть размещены через LDA, например через Sieve |
e | expunge | Сообщения могут быть исключены |
k | create | Ящики могут быть созданы или переименованы под управлением этого ящика (переименование требует прав на удаление) |
x | delete | Ящик может быть удалён |
a | admin | Административные права на ящик (изменение списков ACL) |
Кроме файла dovecot-acl, в целевой директории может находится кэш-файл dovecot-acl-list, его нужно удалить после внесения изменений в файле dovecot-acl.
С помощью ACL можно регулировать доступ в общие папки и разграничивать групповой доступ, но это уже совсем другая история.