Довольно часто, при работе с почтой, используется протокол 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.