Открыть сервис

IMAP ACL

IMAP ACL — это расширение протокола IMAP (Internet Message Access Protocol), позволяющее управлять правами доступа к почтовым ящикам и отдельным папкам (почтовым ящикам) на сервере. Оно реализует механизм списков контроля доступа (Access Control Lists, ACL), дающий администраторам и пользователям возможность гибко настраивать, кто и какие операции может выполнять с конкретным почтовым ящиком: читать, записывать, удалять письма, создавать подпапки, управлять правами других пользователей и так далее. IMAP ACL определён в стандарте RFC 2086 (1997 год) и его последующих версиях, включая RFC 4314 (2005 год), который уточнил и расширил набор прав.

История и стандартизация

Протокол IMAP изначально был разработан для удалённого управления почтовыми ящиками, но его базовая спецификация (RFC 2060) не предусматривала детального разграничения прав между пользователями. Потребность в совместном использовании почтовых ящиков (например, в корпоративной среде или для общих папок) привела к созданию расширения ACL.

Первая версия расширения была описана в RFC 2086 «IMAP4 ACL Extension» в январе 1997 года. Она вводила команды SETACL, DELETEACL, GETACL, LISTRIGHTS и MYRIGHTS. Права задавались в виде однобуквенных идентификаторов (например, l — просмотр, r — чтение, wзапись).

В 2005 году вышла обновлённая спецификация RFC 4314 «IMAP4 Access Control List (ACL) Extension», которая заменила RFC 2086. Новая версия:

  • Уточнила семантику прав, особенно для операций с флагами и удаления.
  • Ввела понятие «прав администратора» (a — admin).
  • Определила права по умолчанию для новых папок.
  • Улучшила совместимость с другими расширениями IMAP, такими как сортировка и поиск.

RFC 4314 является действующим стандартом на момент написания статьи. Многие современные IMAP-серверы (например, Dovecot, Cyrus IMAP, Courier-IMAP) поддерживают это расширение.

Основные понятия и права доступа

Расширение IMAP ACL оперирует следующими сущностями:

  • Идентификатор (identifier) — имя пользователя или группы (например, user@domain.com, anyone — любой пользователь, authenticated — любой аутентифицированный пользователь).
  • Право (right) — однобуквенный код, разрешающий определённое действие.
  • Список ACL — набор записей вида «идентификатор → набор прав».

Стандартные права по RFC 4314

ПравоНазваниеОписание
lLookupПросмотр существования папки в списке папок (LIST/LSUB).
rReadЧтение содержимого писем (FETCH).
sSeenУстановка/сброс флага \Seen.
wWriteУстановка/сброс других флагов (кроме \Seen и \Deleted).
iInsertВставка новых писем (APPEND, COPY).
pPostОтправка писем в папку (например, через SMTP или специальную команду).
cCreateСоздание подпапок.
dDeleteУдаление писем (установка флага \Deleted и выполнение EXPUNGE).
aAdminУправление ACL (изменение прав других пользователей).

Кроме того, существуют права, которые могут быть объединены в «права по умолчанию» для новых папок, создаваемых внутри данной (например, lrswip).

Права для администраторов

Право a (Admin) является наиболее привилегированным. Пользователь, имеющий его на папку, может:

  • Выполнять команды SETACL, DELETEACL, GETACL, LISTRIGHTS, MYRIGHTS.
  • Передавать право a другим пользователям.
  • Удалять папку (если имеет также право d).

Команды расширения

IMAP ACL добавляет в протокол несколько новых команд:

  • SETACL — устанавливает права для указанного идентификатора. Пример: A01 SETACL INBOX user@example.com lrswip.
  • DELETEACL — удаляет все права для указанного идентификатора. Пример: A02 DELETEACL INBOX user@example.com.
  • GETACL — возвращает список всех идентификаторов и их прав на папку. Пример: A03 GETACL INBOX.
  • LISTRIGHTS — возвращает список всех возможных прав, которые можно установить для данного идентификатора на данную папку (зависит от сервера). Пример: A04 LISTRIGHTS INBOX user@example.com.
  • MYRIGHTS — возвращает права текущего пользователя на указанную папку. Пример: A05 MYRIGHTS INBOX.

Ответы на эти команды имеют строго определённый формат, что позволяет клиентам корректно обрабатывать информацию.

Применение

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

  1. Совместный доступ к почтовому ящику. Сотрудник может предоставить другому сотруднику права на чтение (r) и запись (w) в свой ящик, чтобы тот мог отвечать на письма от его имени.
  2. Общие папки. Администратор создаёт папку (например, «Общие документы»), и всем аутентифицированным пользователям (authenticated) даётся право на чтение (lr), а отдельным — на запись (lrswip).
  3. Делегирование доступа. Секретарь может получить права на управление календарём или почтой руководителя (права lrswip).
  4. Ограничение доступа. Вместо полного запрета на чтение папки можно дать только право на просмотр (l), чтобы пользователь видел папку, но не мог читать письма.

Реализация в популярных серверах

  • Dovecot — один из самых распространённых IMAP-серверов. Поддерживает ACL с версии 1.0. Настройка осуществляется через плагин acl. Права можно задавать как вручную, так и через глобальные правила (например, для всех пользователей на все папки).
  • Cyrus IMAP — исторически первый сервер с поддержкой ACL. Использует собственную систему прав, основанную на RFC 2086/4314. Управление ACL возможно через команды IMAP или через утилиты командной строки (например, cyradm).
  • Courier-IMAP — также поддерживает ACL, но с некоторыми ограничениями по сравнению с Dovecot и Cyrus.
  • Microsoft Exchange — использует собственный протокол MAPI, но для доступа по IMAP также поддерживает ACL (через расширение IMAP ACL). Однако реализация может отличаться от стандартной.

Ограничения и критика

Несмотря на широкое распространение, IMAP ACL имеет ряд недостатков:

  • Сложность управления. Для больших организаций с тысячами пользователей ручное управление ACL через IMAP-клиент может быть неудобным. Требуются скрипты или административные интерфейсы.
  • Отсутствие наследования прав. В базовой спецификации права на подпапки не наследуются от родительской папки. Это может приводить к необходимости повторной настройки ACL для каждой подпапки. Некоторые серверы (например, Dovecot) реализуют наследование как расширение.
  • Неоднозначность прав. Разные серверы могут по-разному интерпретировать некоторые права (например, pPost). Это может вызывать проблемы при переносе почтовых ящиков между серверами.
  • Безопасность. Если злоумышленник получает право a на папку, он может полностью контролировать её ACL, включая удаление прав у других пользователей. Поэтому право a должно предоставляться только доверенным лицам.

Взаимодействие с другими расширениями IMAP

IMAP ACL часто используется совместно с другими расширениями:

  • IMAP QUOTA — для ограничения размера папки или ящика.
  • IMAP NOTIFY — для уведомлений об изменениях в папке.
  • IMAP MULTIAPPEND — для одновременного добавления нескольких писем.
  • IMAP SORT и IMAP THREAD — для сортировки и группировки писем.

Пример использования

Рассмотрим простой пример настройки ACL с помощью IMAP-команд (клиент telnet или netcat). Предположим, что пользователь alice хочет дать пользователю bob права на чтение и запись в папку INBOX.

``` A01 LOGIN alice password A01 OK LOGIN completed A02 SETACL INBOX bob lrswip A02 OK SETACL completed A03 MYRIGHTS INBOX

  • MYRIGHTS INBOX lrswipcda

A03 OK MYRIGHTS completed ```

Теперь bob может подключиться и выполнить команды SELECT INBOX, FETCH, APPEND и т.д.

Источники

  • RFC 2086 — IMAP4 ACL Extension (1997)
  • RFC 4314 — IMAP4 Access Control List (ACL) Extension (2005)
  • RFC 3501 — INTERNET MESSAGE ACCESS PROTOCOL — VERSION 4rev1 (2003)
  • Документация Dovecot ACL Plugin
  • Документация Cyrus IMAP ACL

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →