The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Вариант конфигурации exim в непривилегированном режиме
Заметка написана с целью поделиться опытом о использовании почтового сервера
exim  в непривилегированном режиме. Мы используем Exim версии 4.69,
операционную систему: Slackware Linux 13.0. В главе 51 "Обсуждение
безопасности" спецификации Exim MTA обсуждаются варианты запуска exim в
непривилегированном режиме.

Вариант, который использую я, чуть отличается.

Начнём с рассмотрения конструкции и разрешений пользовательского почтового ящика или каталога.
Пользовательский почтовый ящик формата Mbox. Владелец почтового ящика -
пользователь, группа - mail.
Разрешения на почтовый ящик rw-rw----. Таким образом доступ на запись/чтение в
почтовый ящик имеют владелец и группа mail.
Группа mail будет использоваться для доставки почты в почтовые ящики.
Драйвер append_file у Exim не умеет режим доступа к файлу Mbox rw--w--w-.

Почтовый каталог формата Maildir. Владелец почтового каталога - пользователь, группа - mail.
Доставленные в почтовый каталог файлы писем будут иметь разрешения mail:mail rw-r--r--.
Доставленными файлами писем пользователь не владеет - владельцем остаётся
пользователь доставки, но имеет доступ на чтение и перемещение файлов писем.
На подкатлоги new и tmp нужно выставить разрешение на запись для группы mail,
для подкаталога cur это необязательно.

Теперь рассмотрим конструкцию очереди Exim:
Я выбрал разрешения на все подкаталоги очереди одинаковые: root:mail rw-rw----.
Exim создаёт файлы и каталоги в своей очереди с разрешениями rw-rw---- и
rwxrwx--- соответственно, это настраивается в Makefile при сборке exim.

Запускать exim можно от пользователя root с изменением привилегий процессов
exim на mail:mail установкой в конфигурационном файле опций exim_user = mail,
exim_group = mail.
Можно если требуется запустить exim от пользователя mail, для этого нужно
обеспечить возможность открытия привелегированного сетевого порта.
В Linux это можно обеспечить установкой возможности (capabilitie)
cap_net_bind_service на исполняемый файл exim.

Дополнительно я устанавливаю опцию deliver_drop_privileges в конфигурационном файле.
Исполняемому файлу exim назначены группа и владелец mail и root соответственно,
разрешения rwxrwxr-x, установлен setgid бит.

Вариант маршрутизатора и транспорта для доставки в mbox:

   local_delivery_router:
    driver = accept
    check_local_user
    domains = +local_domains
    transport = local_delivery
    user = $caller_uid
    group = mail

   local_delivery_transport:
    driver = appendfile
    file = /var/mail/$local_part
    delivery_date_add
    envelope_to_add
    return_path_add
    check_owner = false
    check_group = false
    file_must_exist = true
    user = $caller_uid
    group = mail
    mode = 660

Вариант маршрутизатора и транспорта для доставки в maildir:

   maildir_router:
    driver = accept
    check_local_user
    domains = +local_domains
    transport = maildir_transport
    user = $caller_uid
    group = mail
   
   maildir_transport:
    driver = appendfile
    maildir_format = true
    directory = $home/Mail/
    delivery_date_add
    envelope_to_add
    return_path_add
    user = $caller_uid
    group = mail
    mode = 644
    check_owner = false
    check_group = false
    create_directory = false
   
Переменная $caller_uid имеет значение uid пользователя, запустившего exim для доставки сообщения.
Для писем, принятых по smtp это пользователь exim_user = mail.
Для писем, доставляемых обработчиком очереди это пользователь exim_user = mail.

При отправке пользователями писем с консоли например утилитой Heirloom mailx,
пользователи получают право использовать привилегии группы mail при исполнении
файла exim с помощью установленных setgid бита и группы mail на исполняемый
файл exim.
При этом отправляемое письмо может помещаться в очередь exim или немедленно доставляться локально.
Владелец и группа файла письма в очереди и, возможно в почтовом каталоге
назначения - $caller_uid:mail.
Также создаётся файл журнала письма с владельцем и группой $caller_uid:mail и
разрешениями rw-rw----.
В процессе доставки письма exim пытается менять владельца файла журнала письма
предположительно на exim_user = mail.
В рассматриваемой конфигурации для писем, отправляемых пользователями из
консоли, он этого сделать не может и это вызывает ошибку доставки.
Смену владельца файла журнала письма приходится отключить изменением исходного
кода exim. Другого способа я не нашёл.
Владельцем файла журнала письма в этом случае останется пользователь-отправитель.

Возможно имеет смысл помещать все отправляемые письма в очередь. Для этого
можно установить в конфигурационном файле опцию queue_only.

Возможно имеет смысл ограничить возможность отправки писем по smtp только
пользователями группы mail.
Это вызвано сложностью контроля e-mail адреса отправителя с сетевого многопользовательского хоста.
В Linux это можно сделать на уровне сетевого фильтра по gid mail.
 
08.10.2010 , Автор: Pavel Samsonov
Ключи: mail, exim / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / Mail, почта / Безопасность и установка ограничений

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру