|
|
www.lissyara.su
—> документация
—> EXIM
—> 4.62
—> часть 23
23. Среда для работы локальных транспортов
Локальные транспорты обрабатывают доставки в файлы и трубы (pipe). (О транспорте “autoreply ” можно думать как о доставке в трубу.) Exim всегда выполняет транспорты в субпроцессах, под заданным gid и uid. Типичная доставка в локальные почтовые ящики выполняется под gid и uid локального пользователя.
Также, exim устанавливает специфическую текущую директорию, когда работает транспорт; для некоторых транспортов, также уместна установка домашней директории. Единственный транспорт, устанавливающий переменные окружения - “pipe ”; для получения дополнительных деталей, смотрите раздел 29.4.
Значение, используемое для uid, gid, и директорий может приходить из нескольких различных мест. Во многих случаях, роутер, обрабатывающий адрес, ассоциирует настройки этого адреса как результат его опций “check_local_user ”, “group ” или “user ”. Однако, значения также можно задать в собственной конфигурации транспорта, и они перезадают любые прихожящие из роутера.
23.1 Одновременные доставки
Если одновременно приходят два различных сообщения, для одного и того же пользователя, то, вероятно, два процеса доставки выполнятся одновременно. Когда для записи в файл используется транспорт “appendfile ”, exim применяет правила блокировки, чтобы помешать одновременным процессам записывать в один файл одновременно.
Однако, когда вы используете транспорт “pipe ”, вам решать, как упорядочивать необходимую блокировку. Вот, глупый пример:
my_transport:
driver = pipe
command = /bin/sh -c 'cat >>/some/file'
| Он, должен записывать сообщение в конце файла. Однако, если придут два сообщения одновременно, в файле будет свалка. Вы можете использовать утилиту “exim_lock ” (смотрите раздел 49.15), для блокировки файла с использованием того же алгоритма, который использует exim.
23.2 Uid`ы и gid`ы
У всех транспортов есть опции “group ” и “user ”. Если установлена “group ”, она перезадаёт любую группу, заданную маршрутизатором в адресе, даже если для транспорта не задана опция “user ”. Это позволяет, например, производить локальную доставку почты под uid получателя (установленного роутером), но в специальной группе (установленной транспортом). Например:
# Routers ...
# User/group are set by check_local_user in this router
local_users:
driver = accept
check_local_user
transport = group_delivery
# Transports ...
# This transport overrides the group
group_delivery:
driver = appendfile
file = /var/spool/mail/$local_part
group = mail
| Если для транспорта установлена опция “user ”, её значение переопределяет, то, что установленно маршрутизатором в адресе. Если “user ” задано не в виде числа, и незадана “group ”, gid ассоциируется с используемым пользователем. Если “user ” в виде числа, “group ” должна быть задана.
Когда uid берётся из конфигурации транспорта, для связанных с этим uid групп вызывается функция “initgroups() ”, если для транспорта установлена опция “initgroups ”. Когда uid не задан транспортом, но ассоциирован роутером с адресом, опция для вызова “initgroups() ” берётся из конфигурации роутера.
Транспорт “pipe ” содержит специальную опцию - “pipe_as_creator ”. Если она задана, и не задана “user ”, используется uid процесса, вызвавшего exim для передачи сообщения, и если не задана “group ”, также используется оригинальный gid.
Это - предпочтительный детализованный порядок получения gid; используется первый из установленных:
Установка “group ” транспорта;
Установка “group ” роутера;
Gid ассоциированный с пользовательской настройкой роутера, или как результат “check_local_user ”, или явной нечисловой установки “user ”;
Группа, ассоциированная с нечисловой установкой “user ” транспорта;
В транспорте “pipe ”, gid создателя, если “deliver_as_creator ” установлена, и uid - uid создателя;
Gid exim`a, если по дефолту используется uid exim`a.
Если, например, пользователь определён в роутере в цифровой форме, и в нём нет установок группы, нет доступного gid. В этой ситуации, происходит ошибка. Это отличается от uid, для которого всегда есть дефолтовое значение. Используется первая из установленных настроек:
Установка “user ” транспорта;
В транспорте “pipe ”, uid создателя, если установлена “deliver_as_creator ”;
Установка “user ” роутера;
Установка роутера - “check_local_user ”;
Uid exim`a.
Разумеется, всё равно будет ошибка, если выбранный uid в списке “never_users ”.
23.3 Текущая и домашняя директории
Роутеры могут устанавливать текущую и домашнюю директории для локальных транспортов путём опций “transport_current_directory ” и “transport_home_directory ”. Однако, если для транспорта установлены опции “current_directory ” и “home_directory ”, они переопределяют значения роутера. В деталях, домашняя директория для локального транспорта берётся из первого установленного значения:
Опции “home_directory ”, в транспорте;
Опции “transport_home_directory ” в роутере;
Данных пароля, если в роутере установлена “check_local_user ”;
Опции “router_home_directory ”, в роутере.
Текущая директория берётся из первого установленного значения:
Опции транспорта “current_directory ”;
Опции “transport_current_directory ”, роутера.
Если ни роутер, ни транспорт не устанавливают текущую директорию, exim использует значение домашней директории, если оно установлено. Иначе, до работы локального транспорта, он устанавливает текущую директорию в “/ ”.
23.4 Переменные раскрытия произведённые из адреса
Обычно, локальная доставка обрабатывает один адрес, и в этом случае, переменные типа “$domain ” и “$local_part ” установлены в течение локальных доставок. Однако, в некоторых обсоятельствах, может быть обработано более одного адреса за раз (например, при записи пакетного SMTP для дальнейшей передачи другими средствами). В этом случае, переменные, ассоциированные с локальной частью, никогда не устанавливаются, “$domain ” устанавливается лишь если адреса имеют одинаковый домен, “$original_domain ” не устанавливается никогда.
=============
translated by lissyara
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
|