Dovecot - настройка ACL доступа для IMAP (доступ только на чтение)

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:8a429afb1783218fe7d5485d01badb73' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><img alt=\"Dovecot Logo\" src=\"http://muff.kiev.ua/files/dovecot.gif\" style=\"height:60px; width:125px\" /></p>\n<p class=\"rtejustify\">Довольно часто, при работе с почтой, используется протокол <strong>IMAP</strong> (<strong>Interim Mail Access Protocol</strong>). Удобность этого протокола заключается в синхронизации, в отличии от&nbsp;протокола <strong>POP3</strong> (<strong>Post Office Protocol - Version 3</strong>).</p>\n<p class=\"rtejustify\">Однако, если доступ ящику имеет несколько человек (например менеджеры компании), то могут возникнуть проблемы, как случайные, так и умышленные. Самая частая: удаление сообщений на одном клиенте влечёт за собой синхронное удаление на всех активных клиентах (в том числе и на сервере).</p>\n<p class=\"rtejustify\">Попытаемся избежать возможных неприятностей, если есть вероятность даной ситуации... Отталкиваемся от того, что в качестве <strong>MDA</strong> (<strong>Mail delivery agent</strong>) используем <strong><a href=\"http://muff.kiev.ua/content/dovecot-vygrebaem-pochtu-iz-pochtovogo-yashchika\">Dovecot</a></strong>. Воспользуемся возможностями плагина&nbsp;<strong>ACL</strong> (<strong>Access Control Lists</strong>).</p>\n<p class=\"rtejustify\">Для подключения плагина необходимо внести изменения в конфигурационный файл&nbsp;<strong>dovecot.conf</strong>. Изменения касаются следующих пунктов файла конфигурации:</p>\n<ul>\n<li class=\"rtejustify\">protocol imap</li>\n<li class=\"rtejustify\">protocol lda</li>\n<li class=\"rtejustify\">plugin&nbsp;</li>\n</ul>\n<p class=\"rtejustify\">Даные пункты необходимо будет отредактировать до следующего состояния (или дополнить, в случае необходимости):</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td style=\"background-color:rgb(51, 51, 51)\">\n<pre>\n<strong><span style=\"color:#00FFFF\">protocol imap {\n</span><span style=\"color:#00FF00\"># список плагинов (сепаратор - пробел)</span><span style=\"color:#00FFFF\">\nmail_plugins = </span><span style=\"color:#FF0000\">acl imap_acl</span><span style=\"color:#00FFFF\">\n}\n</span>\n<span style=\"color:#00FFFF\">protocol lda {\n</span><span style=\"color:#00FF00\"># список плагинов (сепаратор - пробел)</span><span style=\"color:#00FFFF\">\nmail_plugins = </span><span style=\"color:#FF0000\">acl</span><span style=\"color:#00FFFF\">\n}\n</span><span style=\"color:#00FFFF\">\nplugin {\n</span><span style=\"color:#FF0000\">acl = vfile</span><span style=\"color:#00FFFF\">\n}</span></strong></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Чтобы изменения вступили в силу, необходимо перезапустить&nbsp;<strong>dovecot</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>sh /usr/local/etc/rc.d/dovecot restart</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Плагин активирован... Следующий шаг - создание <strong>acl</strong> для ящика, права которого необходимо изменить. Для этого необходимо в корневом каталоге этого ящика создать файл&nbsp;<strong>dovecot-acl</strong>. Тоесть, если путь к ящику&nbsp;<strong>/var/exim/domain/user</strong>, то путь к <strong>acl</strong> будет&nbsp;<strong>/var/exim/domain/user/dovecot-acl</strong>.</p>\n<p class=\"rtejustify\">Синтаксис файла&nbsp;<strong>dovecot-acl</strong> следующий:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>&lt;identifier&gt; &lt;ACLs&gt; [:&lt;named ACLs&gt;]</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Тоесть, чтобы разрешить доступ к ящику только на чтение, достаточно создать файл&nbsp;<strong>dovecot-acl</strong> следующего содержания:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>owner lr</td>\n</tr>\n</tbody>\n</table>\n<p>Пример многострочного файла <strong>dovecot-acl</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>owner lrwstipekxa<br />\n anyone lr</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Чтобы полностью разобраться с даным вопросом, разместим следующую информацию&nbsp;- допустимые значения идентификаторов и допустимые значения флагов.</p>\n<p class=\"rtejustify\"><strong>Таблица идентификаторов</strong></p>\n<ul>\n<li>group-override=group name</li>\n<li>user=user name</li>\n<li>owner</li>\n<li>group=group name</li>\n<li>authenticated</li>\n<li>anyone (или anonymous, что равнозначно anyone)</li>\n</ul>\n<p>Таблица флагов</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td class=\"rtecenter\">l</td>\n<td class=\"rtecenter\">lookup</td>\n<td>Ящик виден в списке</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">r</td>\n<td class=\"rtecenter\">read</td>\n<td>Ящик может быть открыт на чтение</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">w</td>\n<td class=\"rtecenter\">write</td>\n<td>Флаги и ключевые слова сообщения могут быть изменены, за исключением &laquo;Просмотрено&raquo; и &laquo;Удалено&raquo;</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">s</td>\n<td>\n<p class=\"rtecenter\">write-seen</p>\n</td>\n<td>Флаг сообщения &laquo;Просмотрено&raquo; (\\Seen) может быть изменён</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">t</td>\n<td class=\"rtecenter\">write-deleted</td>\n<td>Флаг сообщения &laquo;Удалён&raquo; (\\Deleted) может быть изменён</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">i</td>\n<td class=\"rtecenter\">insert</td>\n<td>Сообщения могут быть записаны или скопированы в ящик</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">p</td>\n<td class=\"rtecenter\">post</td>\n<td>Сообщения могут быть размещены через LDA, например через Sieve</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">e</td>\n<td class=\"rtecenter\">expunge</td>\n<td>Сообщения могут быть исключены</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">k</td>\n<td class=\"rtecenter\">create</td>\n<td>Ящики могут быть созданы или переименованы под управлением этого ящика (переименование требует прав на удаление)</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">x</td>\n<td class=\"rtecenter\">delete</td>\n<td>Ящик может быть удалён</td>\n</tr>\n<tr>\n<td class=\"rtecenter\">a</td>\n<td class=\"rtecenter\">admin</td>\n<td>Административные права на ящик (изменение списков ACL)</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;</p>\n<p class=\"rtejustify\"><span style=\"color:#FF0000\"><strong>Примечание</strong></span>:&nbsp;Кроме файла <strong>dovecot-acl</strong>, в каталоге&nbsp;может находится кэш-файл d<strong>ovecot-acl-list</strong>, его нужно удалить после внесения изменений в файле <strong>dovecot-acl</strong>.</p>\n<p class=\"rtejustify\">&nbsp;</p>\n<p class=\"rtejustify\">Проверяем работоспособность правил... Для ящика разрешен доступ только на чтение. При попытке удалить письмо (используя web-интерфейс <strong>Roundсube</strong>), получаем ошибку:</p>\n<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/roundcube_dovecot_acl.png\"><img alt=\"Roundсube - ошибка &amp;amp;quot;Доступ только на чтение&amp;amp;quot;\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/roundcube_dovecot_acl.png\" style=\"height:61px; width:200px\" /></a></p>\n', created = 1767596328, expire = 1767682728, headers = '', serialized = 0 WHERE cid = '2:8a429afb1783218fe7d5485d01badb73' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ce935d7c44d1c838bd4e12ba4e7e40d3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Для управления ACL удобно использовать штатную утилиту doveadm:</p>\n<pre>\n# doveadm acl\nusage: doveadm [-Dv] [-f &lt;formatter&gt;] acl &lt;command&gt; [&lt;args&gt;]\n add [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt; &lt;id&gt; &lt;right&gt; [&lt;right&gt; ...]\n debug [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt;\n delete [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt; &lt;id&gt;\n get [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] [-m] &lt;mailbox&gt;\n recalc [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;]\n remove [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt; &lt;id&gt; &lt;right&gt; [&lt;right&gt; ...]\n rights [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt;\n set [-u &lt;user&gt;|-A] [-S &lt;socket_path&gt;] &lt;mailbox&gt; &lt;id&gt; &lt;right&gt; [&lt;right&gt; ...]</pre><p>Для Roundcube есть хороший плагин <strong>acl</strong>, с помощью которого пользователи могут самостоятельно управлять правами на свои папки через WebUI. Так же в настройках Dovecot не будет лишним задать&nbsp;<strong>acl_shared_dict</strong>.</p>\n', created = 1767596328, expire = 1767682728, headers = '', serialized = 0 WHERE cid = '2:ce935d7c44d1c838bd4e12ba4e7e40d3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767596328, expire = 1767682728, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767596328, expire = 1767682728, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Dovecot Logo

Довольно часто, при работе с почтой, используется протокол IMAP (Interim Mail Access Protocol). Удобность этого протокола заключается в синхронизации, в отличии от протокола POP3 (Post Office Protocol - Version 3).

Однако, если доступ ящику имеет несколько человек (например менеджеры компании), то могут возникнуть проблемы, как случайные, так и умышленные. Самая частая: удаление сообщений на одном клиенте влечёт за собой синхронное удаление на всех активных клиентах (в том числе и на сервере).

Попытаемся избежать возможных неприятностей, если есть вероятность даной ситуации... Отталкиваемся от того, что в качестве MDA (Mail delivery agent) используем Dovecot. Воспользуемся возможностями плагина ACL (Access Control Lists).

Для подключения плагина необходимо внести изменения в конфигурационный файл dovecot.conf. Изменения касаются следующих пунктов файла конфигурации:

  • protocol imap
  • protocol lda
  • plugin 

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

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

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

Таблица идентификаторов

  • group-override=group name
  • user=user name
  • owner
  • group=group name
  • authenticated
  • anyone (или anonymous, что равнозначно anyone)

Таблица флагов

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), получаем ошибку:

Roundсube - ошибка &amp;quot;Доступ только на чтение&amp;quot;

Ваша оценка: Нет Средняя: 4.5 (2 голоса)

Re: Dovecot - настройка ACL доступа для IMAP (доступ только ...

Для управления ACL удобно использовать штатную утилиту doveadm:

# doveadm acl
usage: doveadm [-Dv] [-f <formatter>] acl <command> [<args>]
  add          [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]
  debug        [-u <user>|-A] [-S <socket_path>] <mailbox>
  delete       [-u <user>|-A] [-S <socket_path>] <mailbox> <id>
  get          [-u <user>|-A] [-S <socket_path>] [-m] <mailbox>
  recalc       [-u <user>|-A] [-S <socket_path>]
  remove       [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]
  rights       [-u <user>|-A] [-S <socket_path>] <mailbox>
  set          [-u <user>|-A] [-S <socket_path>] <mailbox> <id> <right> [<right> ...]

Для Roundcube есть хороший плагин acl, с помощью которого пользователи могут самостоятельно управлять правами на свои папки через WebUI. Так же в настройках Dovecot не будет лишним задать acl_shared_dict.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

А в високосном байте девять бит!