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
| Право | Название | Описание |
|---|---|---|
l | Lookup | Просмотр существования папки в списке папок (LIST/LSUB). |
r | Read | Чтение содержимого писем (FETCH). |
s | Seen | Установка/сброс флага \Seen. |
w | Write | Установка/сброс других флагов (кроме \Seen и \Deleted). |
i | Insert | Вставка новых писем (APPEND, COPY). |
p | Post | Отправка писем в папку (например, через SMTP или специальную команду). |
c | Create | Создание подпапок. |
d | Delete | Удаление писем (установка флага \Deleted и выполнение EXPUNGE). |
a | Admin | Управление 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 широко используется в корпоративных и образовательных почтовых системах, а также в проектах с общими почтовыми ящиками (например, поддержка клиентов, общие папки отдела). Основные сценарии:
- Совместный доступ к почтовому ящику. Сотрудник может предоставить другому сотруднику права на чтение (
r) и запись (w) в свой ящик, чтобы тот мог отвечать на письма от его имени. - Общие папки. Администратор создаёт папку (например, «Общие документы»), и всем аутентифицированным пользователям (
authenticated) даётся право на чтение (lr), а отдельным — на запись (lrswip). - Делегирование доступа. Секретарь может получить права на управление календарём или почтой руководителя (права
lrswip). - Ограничение доступа. Вместо полного запрета на чтение папки можно дать только право на просмотр (
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) реализуют наследование как расширение.
- Неоднозначность прав. Разные серверы могут по-разному интерпретировать некоторые права (например,
p— Post). Это может вызывать проблемы при переносе почтовых ящиков между серверами. - Безопасность. Если злоумышленник получает право
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 →