



Довольно часто, при работе с почтой, используется протокол IMAP (Interim Mail Access Protocol). Удобность этого протокола заключается в синхронизации, в отличии от протокола POP3 (Post Office Protocol - Version 3).
Однако, если доступ ящику имеет несколько человек (например менеджеры компании), то могут возникнуть проблемы, как случайные, так и умышленные. Самая частая: удаление сообщений на одном клиенте влечёт за собой синхронное удаление на всех активных клиентах (в том числе и на сервере).
Попытаемся избежать возможных неприятностей, если есть вероятность даной ситуации... Отталкиваемся от того, что в качестве MDA (Mail delivery agent) используем Dovecot. Воспользуемся возможностями плагина ACL (Access Control Lists).
Для подключения плагина необходимо внести изменения в конфигурационный файл dovecot.conf. Изменения касаются следующих пунктов файла конфигурации:
Даные пункты необходимо будет отредактировать до следующего состояния (или дополнить, в случае необходимости):
| protocol imap { # список плагинов (сепаратор - пробел) mail_plugins = acl imap_acl } protocol lda { # список плагинов (сепаратор - пробел) mail_plugins = acl } plugin { acl = vfile } | 
Чтобы изменения вступили в силу, необходимо перезапустить dovecot:
| # sh /usr/local/etc/rc.d/dovecot restart | 
Плагин активирован... Следующий шаг - создание acl для ящика, права которого необходимо изменить. Для этого необходимо в корневом каталоге этого ящика создать файл dovecot-acl. Тоесть, если путь к ящику /var/exim/domain/user, то путь к acl будет /var/exim/domain/user/dovecot-acl.
Синтаксис файла dovecot-acl следующий:
| <identifier> <ACLs> [:<named ACLs>] | 
Тоесть, чтобы разрешить доступ к ящику только на чтение, достаточно создать файл dovecot-acl следующего содержания:
| owner lr | 
Пример многострочного файла dovecot-acl:
| 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.
Проверяем работоспособность правил... Для ящика разрешен доступ только на чтение. При попытке удалить письмо (используя web-интерфейс Roundсube), получаем ошибку:
Re: Dovecot - настройка ACL доступа для IMAP (доступ только ...
Для управления ACL удобно использовать штатную утилиту doveadm:
Для Roundcube есть хороший плагин acl, с помощью которого пользователи могут самостоятельно управлять правами на свои папки через WebUI. Так же в настройках Dovecot не будет лишним задать acl_shared_dict.