Вариант конфигурации 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.
|
|
|
|
Раздел: Корень / Администратору / Сетевые сервисы / Mail, почта / Безопасность и установка ограничений |