Настройка ACL доступа для IMAP, доступ только на чтение

Настройка ACL доступа для IMAP, доступ только на чтениеВсё чаще в работе с почтой используется протокол 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 можно регулировать доступ в общие папки и разграничивать групповой доступ, но это уже совсем другая история.

Инструкции по теме:

Добавить комментарий