Сэр Серж aka Sir Serge (Сергей Лебедев) - official site
Статьи и заметкиРасчетыСтихиПрозаО сайте

Дополнительные фишки qmail и полная документация на ucspi-tcp и daemontools на русском языке


Я тут немного подумал, и решил, что несправедливо не уделить определенное внимание тому, без чего qmail работает, но что в определенных ситуациях может пригодиться и для других целей. Поэтому, в дополнение к первой части, привожу нижеследующее. Отдельные участки копированы из разных источников. Кое что я не проверял по ненадобности этого для меня. Рассматривайте просто как попытку собрать всё вместе.

1. ucspi-tcp и daemontools. Привязка к qmail

Это тот самый фетиш, без которого не обходится ни одно описание установки qmail. Что ж, последуем традициям. Считаем, что qmail в соответствии с первой частью нормально установлен и  настроен.

Для начала необходимо выкачать пакеты ucspi-tcp-0.88.tar.gz и daemontools-0.76.tar.gz. (Сами пакеты находятся на страничках под ссылкой "how to install...". Можно воспользоваться и другими версиями, буде они появятся или есть в наличии, ибо никакой прямой связи с qmail у этих пакетов нет. Пакеты представляет собой набор утилит запуска и контроля исполнения системных сервисов (uspi) (замена стандартной пары xinetd - tcpwrapper (daemontools - соответственно, управление сервисами). То есть, если сервис внезапно рухнул, специальная программа через минимальный промежуток времени восстановит его функционирование и (возможно) не даст запуститься сервису при явном недостатке памяти. Далее, с помощью специальной утилитки можно посмотреть дерево запущенных процессов; остановить процесс, перезапустить его, изъять из обращения. Вот, собственно и основная функция. На тяжелых серверах, видимо, это надо использовать. Не буду заострять внимание на том, как именно отключить соответствующие сервисы от xinetd и tcpwrappers - см. процедуру установки и убирай то, что сделано в соответствующих конфигурационных файлах - больших трудностей не предвижу.

Установка:

# tar zxvf daemontools-0.76.tar.gz

# cd daemontools-0.76

# make

# make setup check


(Правда, автор пакета пишет, что устанавливать надо следующим образом:

Создать каталог /package :

     mkdir -p /package
chmod 1755 /package
cd /package
  Загрузить daemontools-0.76.tar.gz в /package. Распаковать:
     gunzip daemontools-0.76.tar
tar -xpf daemontools-0.76.tar
rm daemontools-0.76.tar
cd admin/daemontools-0.76
Скомпилировать и установить:
     package/install


По структуре каталога верна, скорее, авторская редакция. Как это ставил я, уже не помню.)
 

# tar zxvf ucspi-tcp-0.88.tar.gz

# cd ucspi-tcp-0.88

# make

# make setup check

# cp tcpserver /usr/local/bin

# cp tcprules /usr/local/bin

В /etc/smtp   - добавить строки вида:

127.0.0.1:allow,RELAYCLIENT=""

198.168.1.:allow,RELAYCLIENT=""

Последняя строчка, понятно, описывает Вашу локальную сеть или перечень тех хостов, с которых разрешена беспрепятственная отправка почты во внешний мир.

 

Создаем базу данных, с которой tcpserver работает непосредственно:

# /usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

# chmod 644 /etc/tcp.smtp.cdb

В дальнейшем, необходимо не забывать выполнять эту команду после каких либо изменений в /etc/smtp

Редактируем /var/qmail/rc

 

#!/bin/sh

env env - PATH="/var/qmail/bin:/usr/local/bin"

qmail-start ./Maildir/

 

Редактируем /var/qmail/supervise/qmail-pop3d/run

 

#!/bin/sh

exec /usr/local/bin/tcpserver -H -R -v -c100 0 110 /var/qmail/bin/qmail-popup <имя_сервера.имя_домена>

/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1

 

Права на него:

# chmod 751 run

 

Редактируем /var/qmail/supervise/qmail-pop3d/log/run

 

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1

 

Права на него:

# chmod 751 run

 

Редактируем /var/qmail/supervise/qmail-smtdp/run

 

#!/bin/sh

exec /usr/local/bin/tcpserver -p -R -x /etc/tcp.smtp.cdb -u82 -g81 -v -c100 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2>&1

 

Права на него:

# chmod 751 run

 

Редактируем /var/qmail/supervise/qmail-smtpd/log/run

 

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1

 

Права на него:

# chmod 751 run

 

Редактируем /var/qmail/supervise/qmail-send/run

 

#!/bin/sh

exec /var/qmail/rc

 

Права на него:

# chmod 751 run

 

Редактируем /var/qmail/supervise/qmail-send/log/run

 

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s100000 n20 /var/log/qmail/qmail-send 2>

 

Права на него:

# chmod 751 run

 

И самый большой скрипт /usr/local/etc/rc.d/qmail

 

#! /bin/sh

 

#PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin

#export PATH

 

case "$1" in

    start)

        echo -n "Starting qmail: svscan"

        cd /var/qmail/supervise

        env - PATH="/var/qmail/bin:/usr/local/bin:/usr/bin:/bin" svscan &

        echo $! > /var/run/svscan.pid

        echo "."

    ;;

    stop)

        echo -n "Stopping qmail: svscan"

        kill `cat /var/run/svscan.pid`

        echo -n " qmail"

        svc -dx /var/qmail/supervise/*

        echo -n " logging"

        svc -dx /var/qmail/supervise/*/log

        echo "."

    ;;

    stat)

        cd /var/qmail/supervise

        svstat * */log

    ;;

    doqueue|alrm)

        echo "Sending ALRM signal to qmail-send."

        svc -a /var/qmail/supervise/qmail-send

    ;;

    queue)

        qmail-qstat

        qmail-qread

    ;;

    reload|hup)

        echo "Sending HUP signal to qmail-send."

        svc -h /var/qmail/supervise/qmail-send

        echo "Sending HUP signal to qmail-pop3d."

        svc -h /var/qmail/supervise/qmail-pop3d

    ;;

    pause)

        echo "Pausing qmail-send"

        svc -p /var/qmail/supervise/qmail-send

        echo "Pausing qmail-smtpd"

        svc -p /var/qmail/supervise/qmail-smtpd

        echo "Pausing qmail-pop3d"

        svc -p /var/qmail/supervise/qmail-pop3d

    ;;

    cont)

        echo "Continuing qmail-send"

        svc -c /var/qmail/supervise/qmail-send

        echo "Continuing qmail-smtpd"

        svc -c /var/qmail/supervise/qmail-smtpd

        echo "Continuing qmail-pop3d"

        svc -c /var/qmail/supervise/qmail-pop3d

    ;;

    restart)

        echo "Restarting qmail:"

        echo "* Stopping qmail-smtpd."

        svc -d /var/qmail/supervise/qmail-smtpd

        echo "* Sending qmail-send SIGTERM and restarting."

        svc -t /var/qmail/supervise/qmail-send

        echo "* Restarting qmail-smtpd."

        svc -u /var/qmail/supervise/qmail-smtpd

        echo "* Sending qmail-pop3d SIGTERM and restarting."

        svc -t /var/qmail/supervise/qmail-pop3d

    ;;

    cdb)

        tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

        chmod 644 /etc/tcp.smtp*

        echo "Reloaded /etc/tcp.smtp."

    ;;  

    *)

        echo "Usage: $0

{start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue}"

    exit 1

esac

exit 0

 

Права на него

# chmod 751 qmail

 

Еще команды:

 

# ln -s /var/qmail/supervise/* /service/

# cd qmail-smtpd

# cd supervise ; rm -rf * ; cd .. ; rmdir supervise ; cd log/supervise ; rm -rf * ; cd .. ; rmdir supervise ; cd ..

# cd /var/log/qmail ; cd qmail-pop3d ; rm -rf * ; cd .. ; cd qmail-send ; rm -rf * ; cd .. ; cd qmail-smtpd ; rm -rf * ; cd ..

 

Удалить из /etc/inittab строку, в которой есть слово svscanboot. (осторожно. Если используются другие сервисы под управлением этого пакета, делать этого, наверно, не стоит).

На скрипт /usr/local/etc/rc.d/qmail повесить ссылки на все /etc/rc.d/ следующим образом:

 

ln –s /etc/rc.d/init.d/qmail /rc0.d/K30qmail

ln –s /etc/rc.d/init.d/qmail /rc1.d/K30qmail

ln –s /etc/rc.d/init.d/qmail /rc2.d/S80qmail

ln –s /etc/rc.d/init.d/qmail /rc3d/S80qmail

ln –s /etc/rc.d/init.d/qmail /rc4d/S80qmail

ln –s /etc/rc.d/init.d/qmail /rc5d/S80qmail

ln –s /etc/rc.d/init.d/qmail /rc6d/K30qmail

 

Из каталога /command/ удалить ссылку на файл svscanboot.

 

После этого qmail должен загрузится сам при следующем старте системы.

Или можно запустить его вручную немедленно:

 

# qmail start

 



Daemontools. Описание на русском языке.

Что же представляют собой утилитки пакетов daemontools и как ими пользоваться?
Вот что пишет об этом автор пакета. Некоторые термины принципиально оставлены на английском, ибо русская терминология не совсем однозначна. Копирайт на перевод (или, скорее, пересказ - потому что дословно это сказать по русски невозможно), мой. То есть, при распространении, указать, откуда. Моего письменного разрешения - не обязательно.

svscanboot

svscanboot запускает сервис svscan для каталога /service и сообщения об ошибках записывает через сервис readproctitle.

svscanboot использует перенаправление через pipeline

     svscan /service 2>&1 | readproctitle service errors: .....
содержащей в себе изначально 400 точек. Последние  400 байт сообщений об ошибках из svscan можно увидеть с помощью readproctitle.

svscanboot устанавливает переменную $PATH в следующее значение:

     /command:/usr/local/bin:/usr/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
и очищает все другие переменные окружения. Разработчики программного обеспечения должны использовать  для создания глобальных переменных окружения каталог /command.

svscan

Запускает коллекцию сервисов и наблюдает над запущенными процессами.

svscan запускает по одному процессу  supervise для каждого подкаталога в текущем каталоге, лимит составляет 1000 подкаталогов. svscan игнорирует подкаталоги, имена которых начинаются с точки. supervise обязательно должен находиться в path для программы svscan.

svscan может запускать парные процессы supervise, один для подкаталога s, один для s/log, с pipe между ними. Это происходит в случае, если имя директории s не превышает в длину 255 байт и существует поддиректория s/logsvscan требуется по два свободных дескриптора для каждой pipe.

С промежутком в пять секунд, svscan проверяет свои подкаталоги. Если он встречает новый подкаталог, он запускает новый процесс supervise. Если он обнаруживает подкаталог, процесс supervise для которого завершился, он запустит этот процесс заново. В случае для log будет использован тот же pipe, поэтому данные потеряны не будут.

svscan, будучи запущен однажды, работает постоянно. Если у него возникают проблемы с созданием перенаправления (pipe) или запуском supervise, сообщение об этом выводится в stderr; повторная попытка неудавшегося действия будет повторена позднее.

Если svscan передается в командной строке аргумент, то этим аргументом является имя каталога, в котором данный svscan должен проводить наблюдение.


supervise

supervise запускает сервис и наблюдает за ним.
Строка запуска:
supervise s

supervise переходит в директорию s и запускает в ней файл ./run. Он перезапускае ./run если ./run завершает выполнение. После кажого запуска выдерживаются паузы, чтобы не было зацикливания в случае, если процесс завершается немедленно после запуска.

Если имеется в наличии файл  s/down, supervise не будет немедленно запускать ./run. Можно использовать svc как для запуска ./run, так и для передачи других команд supervise.

supervise записывает информацию о своем состоянии в двоичном формате в каталог s/supervise, этот каталог должен быть доступен для него по записи. Статустная информация может быть просмотрена командой  svstat.

supervise может немедленно завершиться после запуска, если он не может обнаружить необходимых для работы файлов, каталогов или же если другая копия supervise находится в стадии исполнения для заданного каталога s. После того, как supervise успешно запущен, он остается резидентным до тех пор, пока не будет прекращен командой kill или специальным запросом на выход. Вы можете использовать svok для проверки, успешно или нет исполняется  supervise. Можно использовать и svscan для рабочего запуска коллекции процессов supervise.


svc


svc управляет сервисами, за которыми надзирает supervise.

командная строка:
     svc opts services

opts - последовательность опций в стандартном стиле. services состоит из любого числа аргументов, каждый аргумент является именем поддиректории, используемой supervise.

svc последовательно применяет все опции к каждому сервису из  списка. Опции следующие:

svok

Проверяет, запущен или нет supervise.

строка запуска:

svok service

svok проверяет, в каком состоянии находится процесс supervise для управляющего каталога с именем service. Эта программа возвращает 0, если supervise найден в памяти в нормальном состоянии. Без выдачи каких либо сообшений, svok возвратит 100, если с supervise для заданного каталога что-нибудь не так.

svstat

svstat выводит список сервисов, находящихся под управлением supervise.

строка запуска:

svstat services

services представляет собой список аргументов, каждый из которых является именем директории. svstat выводит для каждого сервиса строку, удобную для оценки того, запущен ли supervise для указанной директории и содержащую сведения о статусе выполнения, предоставляемые supervise.

fghack

Утилита, предотвращающая фоновое исполнение.

строка запуска:

fghack child

Запускает child с необходимым числом дополнительных дескрипторов записи в pipe. fghack игнорирует любые данные, читаемые им из pipe. После того, как child закончит свою работу, и pipe будут закрыты, fghack также завершит свою работу.

pgrphack

Запускает программу в другой группе процессов.

строка запуска:

pgrphack child

программа child будет запущена в новой группе процессов.

readproctitle

readproctitle управляет автоматически обновляемым логом в памяти для инспекции сообщений через  команду ps.

командная строка:

readproctitle L D

L - произвольное число аргументов;
D - единственный аргумент, содержащий как минимум пять точек.

readproctitle читает данные в конец строки D, сдвигая предыдущее сообщение в D влево для получения свободного места.  Предполагается, что у большинства данных, выводимых через ps по такой технологии, в начале строки будут как минимум три точки. Общая длина выводимой строки будет составлять изначально заданное количество знаков в аргументе D.

Например, если мы подадим команду:

     io errors: ....................

то при чтении данных

     fatal error xyz
warning abc
аргумент командной строки примет следующий вид:

     readproctitle io errors: ... xyz!warning abc!
Каждый символ перевода строки будет заменен на восклицательный знак. Утилиты, показывающие список процессов, обычно заменяют знаки перевода строки на "?" или " ".
readproctitle заканчивает свою работу, когда ей передается признак конца файла (eof).
В зависимости от реализации ps, могут накладываться некоторые ограничения на суммарную длину аргументов. Эти ограничения подразумевают общую длину команды readproctitle L D. Распространенные системы обычно без проблем позволяют работать со строками длиной не менее 512 байт.

multilog

multilog читает последовательность строк с stdin и присоединяет избранные строки к одному из многочисленных журналов, определёных аргументами этой команды.

Командная строка:

multilog script

script состоит из любого числа аргументов. Один аргумент характеризует собой одно действие. Действия производятся над каждой вводимой строкой в одной и той же последовательности. Обратите внимание, что действия, содержащие метасимволы shell, должны быть заключены в кавычки, если multilog вызывается из shell.

multilog завершает свою работу с кодом ошибки 0, если по stdin ему передан eof. Если последняя строка в stdin не имела символа перевода строки, multilog самостоятельно дополнит ввод пустой строкой с символом перевода строки.

multilog записывает сообщение в stderr и завершает работу с кодом ошибки 111, не производя операций ввода, если для его запуска недостаточно памяти или другой экземпляр процесса multilog уже открыл для записи один из заданных журналов.

Если multilog сталкивается с ситуацией, при которой он не может сохранить информацию на диске после того, как обработал входной поток, он выводит сообщение в stderr, делает паузу, после чего повторно пытается произвести запись, при этом не теряя данные. Обратите внимание, что такая ситуация может блокировать передачу входной информации в multilog.

При получении сигнала TERM, multilog продолжает чтение потока ввода до следующего знака перевода строки, после чего звершает работу, оставляя указатель stdin на первом байте необработанных данных.

Выбор (пометка) строк.

Любая строка по умолчанию является выбранной (помеченной для вывода?)
Параметр

-pattern

снимает со строки пометку, если эта строка соответствует шаблону pattern. Параметр

+pattern

помечает строку, соответствующую шаблону pattern.
Шаблон pattern является строкой, состоящей из звездочек и других символов. Совпадения ищутся по следующим правилам замены: Звёздочка, стоящая в конце шаблона, соответствует любому остатку строки. Звездочка в середине шаблона означает, что замещаемый ею символ в строке не должен совпадать со следующим за звездочкой в шаблоне символом.

Например, действие

+hello

пометит только строку "hello". Строка "hello world" не будет помечена.

Действие

     -named[*]: Cleaned cache *

снимет пометку со строки named[135]: Cleaned cache of 3121 RRs. Первая звёздочка соответствует любой строке, не содержащей символа правой закрывающейся скобки.

Действие
       -*
Отменит выбор любой строки.

В целях сохранения памяти, multilog действительно проверяет совпадение с шаблоном не более чем на первых 1000 символах строки.

Предупреждения:

Действие
       e
производит вывод любой выбранной строки (не более первых 200 байт её начала) в stderr.

Файлы статуса

Действие
       =file

заменяет содержимое файла file строками, соответствующими шаблону пометок (не более 1000 байт, обрезанные строки в 1001-м байте дополняютс символом перевода строки. Файл не защищен от потери буферизации при отключении питания.

Например, последовательность действий:
     -*
+STAT*
=log/status
выводит в файл /log/status копию последних строк, начинающихся со STAT.

Временные метки

Действие
          t
вставляет @ - точную отметку о текущем времени - в начало каждой строки. От остального содержимого строки отметка времени отделяется пробелом. Для отметок о времени используется формат, совпадающий с tai64n. Данное действие обязательно должно быть первым в последовательности.

Все шаблоны будут применены только после того, как отметка о времени будет вставлена в строку. Например, если multilog со следующими параметрами запуска:
        
        multilog t '-*' '+* fatal: *' ./main

передаётся строка:

     fatal: out of memory
то в журнал эта строка будет записана в следующем виде:

     @400000003b4a39c23294b13c fatal: out of memory


в данном случае первая звездочка соответствует отметке о времени.
Для перевода отметок о времени в нормальное представление можно использовать программу tai64nlocal.

Автоматическая ротация журналов.

Если имя каталога dir начинается с точки или слэша, то действие

        dir

присоединит каждую строку, соответствующую шаблону, к журналу с именем dir. Если такого каталога не существует, multilog создаст его.
Не делайте попыток записи в один и тот же журнал из разных процессов multilog или двух действий одного и того же процесса.
Формат имени журнала следующий: dir является именем директории, содержащей некоторое количетство старых файлов журналов, журнал с именем current и другие файлы, с которыми multilog совершает свои действия. Файл каждого журнала имеет имя, начинающееся с символа @, далее следует отметка о времени, свидетельствующая о том, когда журнал был завершен. В конце имени будет один из следующих кодов:

Сетевые файловые системы, файловые системы с асинхронным доступом и файловые системы с программным управлением могут самостоятельно уничтожать файлы, которые не были закрыты в процессе записи содержимого.
Во время активности процесса multilog, файл с именем current имеет права на доступ 644. После того, как multilog обнаруживает eof во входном потоке stdin, он устанавливает права доступа на файл current в 744. После перезупуска, права доступа этого файла вновь будут установлены в 644, и multilog продолжит запись информации в него.

Когда multilog обнаруживает, что файл current достиг слишком большого размера, он закрывает этот файл, устанавливает для него режим доступа 744, и переименовывает в один из старых файлов журналов в соответствии с указанными выше принципами наименования.

Действие
       ssize
устанавливает максимальную величину файла current. Завершение файла всегда происходит по границам строк. Новый файл будет создан в случае, когда разница в размере от получившейся величины при записи последней строки до указанной границы будет составлять не более 2000 байт. Величина size может быть от 4096 до 16777215. Величина по умолчанию 99999 байт.

Действие
       nnum
устанавливает число файлов для последовательной ротации. После того, как current переименовывается, если multilog обнаруживает num или более старых файлов журнала, он начинает удалять самые старые журналы до тех пор, пока общее количество файлов не составит num. num должно быть не менее 2. Значение по умолчанию 10.

Действие
       !processor
устанавливает программу для последующей обработки каталога dir. multilog перенаправляет current на processor и сохраняет свой поток вывода в качестве старого лога журнала, вместо журнала current. multilog также будет сохранять любой свой вывод через processor по дескриптору 5, и может читать этот вывод через дескриптор 4, когда он запускает processor на следующем журнале. По соображениям контроля, processor должен возвратить ненулевое значение при выходе, если у него возникают проблемы с операциями ввода/вывода. multilog после этого запустит его снова. Процедура запуска процесса processor временно блокирует прием информации multilog'ом со входа.

br>

tai64n

выводит точную отметку времени в каждую строку
tai64n читает строки через stdin. В каждую строку, передаваемую в stdout, эта программа записывает:
  1. символ "@"
  2. отметку точного времени (timestamp)
  3. символ "пробела"
  4. копию полученной строки
tai64n завершает свою работу с кодом 0 при обнаружении признака завершения входного потока. Работа завершается с кодом ошибки 111 без сообщений об ошибке, если обнаруживаются проблемы со чтением stdin или записью в stdout. tai64n не задействует после своего запуска дополнительной памяти.

Отметки о времени, используемые tai64n, представляют собой 12-байтную метку во внешнем формате TAI64N, печатаемую в виде 24 шестнадцатиричных знаков в нижнем регистре. Для преобразования такой записи в воспринимаемый для чтения формат можно пользоваться программой tai64nlocal.

Например, отметка 4000000037c219bf2ef02e94 ссылается на наносекунду после момента, составляющего 935467455.787492500 секунд после начала 1970 года по Гринвичу; 37c219bf это шестнадцатиричное представление числа  935467455, а 2ef02e94 - числа 787492500.

Текущая реализация tai64n зависит от стандартной библиотечной функции UNIX gettimeofday(), которая возвращает текущее время в секундах от1970-01-01 00:00:10 по Гринвичу. Несмотря на то, что большинство реализаций этой функции полностью соответствуют стандартам, довольно часто встречаются ситуации, когда системный таймер просто не показывает точного времени.

tai64nlocal

Преобразует точные отметки времени формата TAI64N в воспринимаемый человеком формат.

tai64nlocal читает строки из stdin. Если строка начинается с любого символа, кроме "@", tai64nlocal записывает её в stdout без изменений. Если эе строка начинается с символа "@", tai64nlocal переводит следующую за ним последовательность в локальное время в ISO формате: YYYY-MM-DD HH:MM:SS.SSSSSSSSS.
Например, для временной зоны US/Pacific, строка ввода

	@4000000037c219bf2ef02e94 mark

будет преобразована в

1999-08-23 21:03:43.787492500 mark
Обратите, однако, внимание, что текущая реализация tai64nlocal базируется на стандартной процедуре из системной библиотеки UNIX, служащей для определения точного времени. Некоторые реализации этой функции используют неверную временную шкалу, что может влиять на преобразование.

tai64nlocal завершает свою работу с кодом 0 при обнаружении признака завершения входного потока. Работа завершается с кодом ошибки 111 без сообщений об ошибке, если обнаруживаются проблемы со чтением stdin или записью в stdout. tai64nlocal не задействует после своего запуска дополнительной памяти, кроме, возможно, той что требуется для работы функции localtime().

setuidgid

запускает другую программу под uid и gid заданного системного пользователя.

Строка запуска:

       setuidgid  account  child

account является единичным аргументом.  child может содержать в себе несколько аргументов.

setuidgid устанавливает uid и gid в величины, соответствующие учетной записи account, затем запускается child.

setuidgid возвращает код ошибки 111 в случае, если он не может найти системного пользователя с именем account, если не может установить uid или gid. В любом другом случае код завершения этой программы равен коду завершения процесса child.

setuidgid может быть запущен только с правами root.

envudgid

envuidgid запускает другую программу при переменных окружения, установленных для uid и gid пользователя системы account.

Строка запуска:

       envuidgid account child

account является единичным аргументом.  child может содержать в себе несколько аргументов.
envuidgid устанавливает переменную окружения $UID в значение, соответствующее uid пользователя account, и переменную $GID - в значение, равное gid пользователя account. Затем запускается процесс child.

envuidgid завершает свою работу с кодом ошибки 111, если ему не удалось найти системного пользователя account, если при выделении памяти для переменных окружения возникла ошибка, или же невозможно запустить child. Во всех остальных случаях его код возврата будет таким же, как у child.

envdir


Запускает другую программу с окружением, приведенным в соответствие владельцу файлов в указанном каталоге.

Строка запуска:

       envdir d child

d - единичный аргумент, child может состоять из нескольких аргументов.

envdir устанавливает различные переменные окружения, как этого требуют файлы, содержащиеся в директории d, затем производится запуск процесса child.

Если директория d содержит файл с именем s, первой строкой которого является t, envdir удалит переменную окружения с именем s, если таковая существовала, и затем вновь введет переменную окружения с именем s, значением которой будет значение t. Имя s не должно содержать знак равенства "=". Пробелы и табуляторы в конце строки t будут удалены.  Нулевые символы в строке t в переменной окружения будут заменены на знаки перевода строки. Если файл s полностью пуст (длина 0 байт), envdir удаляет переменную s, если такая существует, не создавая взамен новой переменной.

envdir возвращает 111 при проблемах со чтением d, если при выделении памяти для системных переменных обнаруживается ее недостаток, или если невозможно запустить child. В остальных случаях код завершения будет таким же, как у child.

softlimit


softlimit запускает другую программу с новыми лимитами ресурсов.

Строка запуска:

     softlimit opts child

opts серия опций в стандартной форме. child состоит из одного или большего количества аргументов.

softlimit устанавливает программные лимиты на ресурсы системы, в соответствии с opts. Затем производится запуск child.

Опции:

В каждой из следующих опций, n может принимать значение "=", указывающее, что данный программный лимит должен быть равным лимиту, устанавливаемому системой по умолчанию.

Опции управления памятью:

Опции управления размером файлов:

Опции эффективности:

setlock

Запускает другую программу с блокировкой файла.

Строка запуска:

     setlock opts fn child

opts серия опций в обычном стиле. fn единичный аргумент. child состоит из одного или большего количества аргументов.

setlock открывает fn для записи (создаёт его, если он не существует), устанавливает для этого файла эксклюзивную блокировку (lock), затем запускает child.

В нормальной ситуации блокировка снимается после того, как child завершит свою работу.

Дальнейшее развитие ситуации: процессу child передаетсяis дескриптор запертого файла, указывающий на дисковый файл с именем  fn. Эта блокировка исчезает, если над этим файлом произвести следующие действия:

Опции:


Пакет ucspi-tcp

Во-первых, что это такое.
Назначение пакета - построение клиент-серверных приложений на базе TCP.

tcpserver ожидает входящие соединения и для каждого соединения запускает программу по вашему выбору. Ваша программа получает переменные окружения, показывающие имена локального и удаленного хостов, IP-адреса и имена портов.

tcpserver следит за всеми исполняемыми под его управлением программами и отслеживает ситуации переполнения памяти. Когда он уже управляет 40 (по умолчанию) одновременными соединениями, tcpserver приостанавливает отслеживание новых соединений.

tcpserver также обеспечивает функции контроля доступа через TCP, подобно пакетам tcp-wrappers/tcpd и файлу hosts.allow, но делает это быстрее. Его правила доступа заранее скомпилированы в хэш-формат с помощью cdb, так что вы можете легко регулировать деятельность тысяч различных хостов.

Данный пакет включает в себя утилиту recordio, которая наблюдает над процессами ввода и вывода сервера.

tcpclient устанваливает TCP-соединение и запускает программу по вашему выбору. Он устанавливает для нее переменные окружения точно так же, как tcpserver.

Пакет всключает в себя простые примеры программ-клиентов, демонстрирующих возможности tcpclient: who@, date@, finger@, http@, tcpcat, и mconnect.

tcpserver и tcpclient полностью соответствуют требованиям UCSPI,  (UNIX Client-Server Program Interface), и используют протокол  TCP .

Другие утилиты командной строки, имеющие отношение к TCP

ucspi-tcp может служить заменой следующим программам:

Администраторы многих серверов заменили inetd на tcpserver, причины для этого следующие:

tcpserver

tcpserver наблюдает за входящими TCP-соединениями

Строка запуска:

     tcpserver opts host port prog
opts - cерия опций
host - единственный аргумент
port - единственный аргумент
prog может состоять из одного или более

tcpserver ожидает соединений от клиентов tcp. Для каждого такого соединения будет запущен процесс prog, при этом дескриптор 0 используется для чтения из сети, а дескриптор 1 - для выдачи данных в сеть. Также используюся переменные окружения.

Адрес сервера передаётся через параметры host и port. Параметр port может быть задан в форме имени из /etc/services или числом; если этот параметр равен 0, tcpserver выбирает свободный порт TCP. Парметр host может также быть равным 0, что позволяет соединения с любого локального IP адреса, либо может быть ip-адресом в десятичной нотации, что допускает соединение только с указанного адреса, либо символическим именем хоста, что позволяет соединения с первого ip-адреса данного хоста. Имена хостов проходят через квалифицирование  с использованием утилиты dns_4_qualify.

tcpserver прекращает исполнение при получении сигнала SIGTERM.

Опции общего назначения:
Опции, влияющие на соединения:
Опции, влияющие на сбор данных

tcprules

Программа предназначена для перевода в формат базы данных правил, используемых tcpserver.

Командная строка:

tcprules  cdb  tmp

tcpserver по умолчанию следует правилам для определения, допустимо или нет данное TCP соединение. Например, правило:

    18.23.0.32:deny

запрещает любые соединения с IP адреса 18.23.0.32

tcprules читает правила со своего стандартного потока ввода и записывает их в cdb, в двоичном формате, используемом для быстрого их чтения tcpserverом.

tcprules может использоваться во время работы tcpserver. Эта программа позаботится о безопасном обновлении cdb. Такой подход обеспечивается первоначальной записью правил в tmp, а затем перемещением tmp поверх cdb. Если tmp уже существует на момент записи, он будет уничтожен. Директории, в которых находятся tmp и cdb, должны быть доступны по записи для tcprules. Кроме того, эти директории должны находиться в пределах одной и той же файловой системы.

Если при чтении исходных правил или при создании tmp наблюдаются какие-либо затруднения, tcprules не модифицирует cdb.

Двоичный формат базы данных cdb переносим между машинами разных архитектур.

Формат правил.

Правило занимает одну строку. Файл, содержащий в себе правила, может содержать также комментарии: строки, начинающиеся с символа "#" игнорируются.

Каждое правило состоит из адреса, двоеточия, и перечня инструкций, без дополнительных пробелов. Когда tcpserver получает запрос соединения с указанного адреса, он следует инструкциям.

Адреса.


Адреса для tcpserver могут быть заданы в следующих видах:
  1. $TCPREMOTEINFO@$TCPREMOTEIP, если переменная окружения $TCPREMOTEINFO определена.
  2. $TCPREMOTEINFO@=$TCPREMOTEIP, если определены обе переменные окружения: $TCPREMOTEINF и $TCPREMOTEIP.
  3. $TCPREMOTEIP;
  4. =$TCPREMOTEHOST, если переменная окружения $TCPREMOTEHOST определена.
  5. Сокращенные префиксы $TCPREMOTEIP, заканчивающиеся точкой.
  6. Сокращенные суффиксы $TCPREMOTEHOST, начинающиеся с точки, предваряемой знаком равенства, если переменная $TCPREMOTEHOST определена.
  7. =, если переменная $TCPREMOTEHOST определена.
  8. Пустая строка.
tcpserver использует только одно первое попавшееся по порядку, подходящее к IP адресу правило. Необходимо использовать опцию p, если вы уверены в переменной окружения $TCPREMOTEHOST.

Например, допустим, имеются следующие правила:

     joe@127.0.0.1:first
18.23.0.32:second
:third
127.:fourth

Если переменная $TCPREMOTEIP имеет значение 10.119.75.38, tcpserver будет следовать инструкции third.
Если переменная $TCPREMOTEIP имеет значение 18.23.0.32, tcpserver будет следовать инструкции second.
Если переменная $TCPREMOTEIP имеет значение 127.0.0.1, а $TCPREMOTEINFO имеет значение bill, tcpserver будет следовать инструкции fourth.
Если переменная $TCPREMOTEIP имеет значение 127.0.0.1, а $TCPREMOTEINFO имеет значение joe, tcpserver будет следовать инструкции first.

Для проверки того, как tcpserver интерпретирует правила в cdb, можно использовать программу tcprulescheck.

Диапазоны адресов

tcprules интерпретирует правило 1.2.3.37-53:ins как краткую форму инструкций 1.2.3.37:ins, 1.2.3.38:ins  и так далее, вплоть до 1.2.3.53:ins. Точно так же, 10.2-3.:ins является сокращением для 10.2.:ins и 10.3.:ins

Инструкции

Инструкции в правиле могут начинаться либо с allow, либо с deny. Инструкция deny приказывает tcpserverу сбросить соединения, не вызывая соответствующий ему процесс.  Например, инструкция

       :deny

заставит tcpserver сбрасывать все соединения, которые не управляются предшествующими этой строке правилами.

Инструкции могут быть продолжены списком любых переменных окружения в форме var="xxx". tcpserver в этом случае добавит для запускаемого процесса переменную окружения $var со значением "xxx". Например

       10.0.:allow,RELAYCLIENT="@fix.me"

добавит переменную окружения $RELAYCLIENT со значением @fix.me. Кавычки могут быть заменены любым повторяющимся символом:

       10.0.:allow,RELAYCLIENT=@fix.me

Может быть перечислено любое количество переменных:

       127.0.0.1:allow,RELAYCLIENT="",TCPLOCALHOST="movie.edu"

tcprulescheck

команда
       tcprulescheck cdb

покажет, что tcpserver будет делать при соединении с IP адреса $TCPREMOTEIP и именем хоста $TCPREMOTEHOST и информации о удаленном компьютере из $TCPREMOTEINFO, следуя правилам, скомпилированным в cdb программой tcprules.

argv0

argv0 предназначена для запуска программы с указываемым нулевым аргументом (то есть именем программы, указатель на которое передается в результате исполнения функции argv(0)).

Командная строка:

       argv0 realname zero args

realname - единственный аргумент; zero - единственный аргумент; args - любое количество аргументов.

argv0 запустит программу с именем realname, при этом zero будет её нулевым аргументом (а не realname), и args - остальными аргументами, передаваемыми через командную строку.

назначение этого всего:

Некоторые программы обращают особое внимание на нулевой аргумент командной строки. argv0 делает для таких программ возможным запуск через скрипты shell.

Например, строка

       argv0 /bin/csh -csh

запустит csh с нулевым аргументом -csh. /bin/csh будет думать, что это shell входа в систему  и действовать соответственно.
В другом примере, команда:
      
        tcpserver 0 ftp argv0 tcpd ftpd -l -A

даст такой же эффект, что и строка

     ftp stream tcp nowait root tcpd ftpd -l -A
в /etc/inetd.conf. Программа ftpd будет запущена с нулевым аргументом ftpd и остальными аргументами -l -A. Обратите внимание, что tcpd может (и должен) быть заменен tcpserver с опцией -x:

    
tcpserver -x ftp.tcp 0 ftp ftpd -l -A

fixcrio

fixcrio вставляет отсутствующие знаки возврата каретки (CR) в концы строк.

Командная строка:

       fixcrio prog

fixcrio запускает prog. Эта программа вставляет CR в конец каждой строки входного и выводного потока запущенной программы, если такая строка не имеет CR.

fixcrio функционирует в качестве дочернего процесса prog. Она заканчивает свою работу, если обнаруживает EOF в потоке вывода prog.

recordio

recordio записывает входной и выходной потоки программы.

Командная строка:

       recordio prog

recordio запускает prog. Она выводит на дескриптор 2 все строки, проходящие через ввод и вывод prog .
В начале каждой строки, выводимой на дескриптор 2, recordio вставляет id процесса prog, сопровождая значком "<" строку ввода, а значком ">" строку вывода. В конце каждой строки добавляется "+", пробел или [EOF]; пробел указывает на наличие дополнительных строк в буфере ввода, [eof] индицирует запрос на закрытие потока.

recordio производит немедленный вывод любого пакета. Эта программа не пытается синхронизировать пакеты в соответствующие строки. Например,

   
recordio sh -c 'cat /dev/fd/8 2>&1' > /dev/null

выведет следующее:

     5135 > cat: /dev/fd/8: Bad file descriptor 
5135 > [EOF]
или
     5135 > cat: +
5135 > /dev/fd/8+
5135 > : +
5135 > Bad file descriptor
5135 > [EOF]
если команда cat производит посылки информации разными пакетами.

recordio может самостоятельно разбивать длинные пакеты на несколько строк по граница "атомов" (текстовой информации).

recordio запускается в качестве дочернего процесса prog. Эта программа заканчивает свою работу при обнаружении [EOF] в выходном потоке prog.

rblsmtpd


rblsmtpd блокирует почту с сайтов, входящих в черные списки rbl. Работает с любым smtp сервером, который может быть запущен под управлением  tcpserver.

Командная строка:
     
     rblsmtpd opts prog
opts - серия стандартных (getopt) ключей. prog - состоит из одного или большего числа аргументов.

Обычно rblsmtpd запускает prog. Подразумевается, что процесс prog способен поддерживать обмен информацией по протоколу smtp для получения почты.     
Однако, rblsmtpd не запустит prog, если почтовые сервера этого клиента внесены в черные списки rbl. Вместо этого rblsmtpd инициирует собственный упрощенный интерфейс протокола smtp, временно отбрасывая все попытки послать почтовое сообщение. Одновременно на дескриптор 2 выводится сообщение об отказе соединения.

rblsmtpd принудительно прекращает обмен данными по протоколу smtpd с серверами черного списка через 60 секунд, даже если клиент к этому времени не отключился.

Опции:

блокированные клиенты

Если переменная окружения $RBLSMTPD определена и её значение не является пустой строкой, rblsmtpd блокирует почту. Он использует $RBLSMTPD в качестве сообщения клиенту. Обычно rblsmtpd запускается из под tcpserver; можно использовать tcprules для установки $RBLSMTPD избранным клиентам.

Если $RBLSMTPD установлена и её значение - пустая строка, почта не блокируется.

Если $RBLSMTPD не установлена, rblsmtpd сверяет значение $TCPREMOTEIP со списками rbl и блокирует почту, если данный сервер значится в списках. tcpserver устанавливает $TCPREMOTEIP в IP адрес удаленного компьютера.

Опции:

Поддерживается произвольное количество опций -r и -a. rblsmtpd последовательно проверяет каждый источник, до тех пор пока не обнаружит совпадения или список опций не закончится.
Если вы не задали ни одной опции -r, rblsmtpd попытается в качестве источника использовать rbl.maps.vix.com. Этот адрес может меняться в зависимости от версии пакета.

Списки RBL


Если вы хотите использовать собственные списки блокировки, или же источник анти-блокировки, вы можете для этого использовать rbldns из пакета djbdns.

Автор пакета рекомендует следующие источники списков RBL:
Следующие сервера списков RBL использовать не стоит:

relays.mail-abuse.org остановил свою работу с rblsmtpd в августе 2000 года, потому что все записи TXT были уничтожены. "Они были убраны, потому что файл зоны превысил все допустимые пределы" - заявила служба поддержки. Такой проблемы никогда не случилось бы, если бы использовался rbldns, потому что базы данных rbldns намного меньше обычных зонных файлов. Однако, люди проекта MAPS имеют финансовые интересы в проекте BIND,  и поэтому отказываются от использования rbldns.

Примечание от Sir Serge:

Сервисы "черных списков" - один из самых одиозных сегментов "обороны" против спама. Прежде чем использовать подобное, внимательно задумайтесь над тем, что это может за собой повлечь. Например, вы пропишете в качестве источника такой известный сервер черных листов, как spamhaus.org. И потом будете удивляться, почему кроме явного спама к вам больше не приходят нормальные письма с адресных сетей вполне известных и приличных российских провайдеров, в том числе с серверов, с которых спам никогда не рассылался. Ан все потому, что spamhaus имеет привычку после получения десятка жалоб на какой-нибудь сервер, находящейся на подсети провайдера, банить все адресные подсети, принадлежащие этому провайдеру, в отместку выставляя условия исключения из списков, которые по России любой здравомыслящий человек сочтет неприемлемым. Полностью со всеми своими сетями в эти списки попадали, например, Ростелеком и Di-net, с объяснением причины, де данные провайдеры обеспечивают хостирование спамеров и обманных интернет-магазинов и в том, что было 10-15 жалоб от маниакальных владельцев сетей каких-нибудь американских колледжей, где незащищенные виндовые машины выставлены напрямую в интернет, зато стоит аппаратный снифер, регистрирующий "атаки". Черные списки от Spamhaus, к сожалению, очень популярны среди администраторов почтовых серверов зоны .de; Хорошо, немцы имеют другой менталитет, но я изумляюсь количеству серверов зоны .ru, использующих черные листы. Конечно, это так просто - влепил черный список и радуйся тому, что на сервер ничего не приходит. А в то же время абонент сервера, который случайно попал в эти списки, не может отослать на определенные адреса жизненно важные например, для его бизнеса, почтовые сообщения. Провайдер этого абонента не может высказать свое "фи" администратору сервера, отбивающего почту, потому что его письма тоже не доходят - ибо блокируются все входящие, на все адреса, в том числе и на административные. Причем, самое подлое в этом всем то, что программы-менеджеры черных списков выставляют при отбое smtp код ошибки 450 - т.е. некритическую ошибку. А это значит, что автор письма получит bounce message не ранее чем через неделю безуспешных попыток соединения почтового сервера его провайдера. То же самое будет, если сервер просто не отвечает на запросы smtp. И видны эти ситуации только через логи сервера.



Коды временных ошибок доставки

Обычно, если переменная окружения $RBLSMTPD определена, rblsmtpd использует код сообщения об ошибке 451 для извещения клиента. Это подразумевает для правильного почтового клиента повторить попытку обращения в другое время. Такое сообщение дает возможность оператору узла проанализировать источники проблемы и убрать при необходимости запрет на доступ, при этом во время повторного обращения почта будет доставлена.

Однако, если значение $RBLSMTPD начинается с дефиса, rblsmtpd удаляет дефис из сообщения и использует в извещении клиента код ошибки 553. Это позволяет клиенту немедленно заняться подготовкой сообщения о невозможности доставки (bounce message).

Вот несколько опций управления сообщениями об ошибках, связанными со списками RBL:

tcpclient

tcpclient создаёт исходящее соединение TCP.

Командная строка:

     tcpclient opts host port prog
opts - последовательность опций в стиле getopt. host - единственный аргумент. prog состоит из одного или большего числа аргументов.

tcpclient пытается присоединиться к TCP серверу. Если эта попытка увенчалась успехом, он запускает prog с дескриптором 6 для чтения из сети и дескриптором 7 для записи в сеть. Также устанавливаются различные переменные окружения.

Адрес сервера передается через параметры host и port. port может быть в форме имени, представленного в /etc/services или же числом. host может быть 0 - ссылка на локальную машину, или IP адресом в десятичной нотации с разделением точками, либо же символьным именем хоста. Данный параметр проходит через квалификацию, используя вызов функции dns_ip4_qualify.

Если сервер имеет несколько IP адресов, tcpclient будет пробовать каждый адрес по списку до удачного результата соединения.

опции

Общего назначения:

Опции установки соединения:

Опции сбора данных:

who@

who@ печатает список активных пользователей на удаленном хосте.

Командная строка:

       who@  host

who@ присоединяется на порт TCP 11 (sysstat)  машины host и печатает все данные, которые может прочитать с этого порта. Она удаляет символы перевода каретки CR (15) и преобразует неотображаемые символы в символы, которые могут быть выведены на печать.

Если параметр host не указан, who@ делает попытку соединения с локальным хостом.

Некоторые компьютеры выдают по порту 11 список локальных пользователей. Например, для этого порта может быть запущено:
     tcpserver -RHl0 0 11 who

date@

date@ печатает дату, полученную с удаленного хоста.

Командная строка:

       date@ host

date@ подключается к 13 порту TCP (Daytime) машины host и печатает все данные, которые может прочитать с этого порта. Она удаляет символы перевода каретки CR (15) и преобразует неотображаемые символы в символы, которые могут быть выведены на печать.

Если параметр host не указан, date@ делает попытку соединения с локальным хостом.

Некоторые компьютеры выдают на порт 13 текущую дату в читабельном формате. Например, для этого порта может быть запущено:
     tcpserver -RHl0 0 13 date

finger@


finger@ предоставляет информацию о пользователях удаленного хоста.

Командная строка:
     finger@ host user
finger@ соединяется по порту 79 (finger) машины host, отсылает имя пользователя user и выводит на печать все данные, которые может прочитать с порта. Удаляет знаки возврата каретки и преобразует непечатаемые символы в печатаемые.

Некоторые компьютеры выдают по порту 79 информацию о пользователе.

Если параметр user не задан, finger@ посылает на удаленный компьютер пустую строку. Некоторые компьютеры на такой запрос отвечают списком всех пользователей, в текущий момент находящихся в системе.

Если параметр host не указан, finger@ делает попытку соединения с машиной, с которой он был запущен.

http@

http@ получает WEB-страничку с удаленного хоста.

Командная строка:
     http@ host page port
http@ подключается к порту port на машине host, посылает запрос:
     GET /page HTTP/1.0
Host: host
на host и печатает содержимие ответа, удаляя символы CR в концах строк.

Если параметр port не указан, подразумевается TCP порт 80 (HTTP).

Если пропущен аргумент page, http@ запросит с хоста страницу с адресом /

Если параметр host не указан, http@ делает попытку соединения с машиной, с которой он был запущен.

tcpcat

tcpcat печатает данные с удаленного хоста.

Командная строка:
     tcpcat host port
tcpcat соединяется с удаленным компьютером host по порту port TCP и выводит на печать все данные, полученные им. tcpcat может быть использован для получения двоичных данных. Преобразования не производятся.

mconnect

mconnect подключается к smtp серверу.

Командная строка:
     mconnect host port
Программа посылает свой поток ввода на host, добавляя к каждой строке CR. В то же время, она выводит на печать все, что получает в ответ. Если порт не указан, подразумевается стандартный порт SMTP 25. Если параметр host не указан, попытки соединения делаются с той машиной, с которой запущена программа.

addcr и delcr

addcr вставляет символ возврата каретки (CR) (15) перед каждым символом перевода строки (LF) (12), например так же, как это вводится в стандартном потоке ввода. CR не вставляется в конец незаконченной строки завершения.

delcr удаляет символы возврата каретки из переданных на вход строк, если такой символ найден. Не удаляется CR из частично завершенной строки, т.е. строки, не имеющей LF.

Некоторые программы unix2dos и dos2unix имеют затруднения с длинными строками и нулевыми символами. addcr и delcr таких затруднений не испытывают.

Переменные окружения, имеющие отношение к TCP

$PROTO является строкой TCP.

$TCPLOCALIP
это IP адрес локальной машины, в десятично-точечной нотации.

$TCPLOCALPORT
номер TCP порта локальной машины, в десятичном виде.

$TCPLOCALHOST
имя из DNS для локального хоста. Если имя не определено, переменная $TCPLOCALHOST не установлена. 

$TCPREMOTEIP
IP адрес удаленной машины.

$TCPREMOTEPORT
номер TCP порта удаленной машины, в десятичном виде.

$TCPREMOTEHOST
имя из DNS для удаленной машины. Если имя не определено, переменная окружения $TCPREMOTEHOST не установлена.

$TCPREMOTEINFO
строка, характеризующая соединение с удаленным компьютером через протоколы 931/1413/IDENT/TAP. Если такая информация отсутствует, $TCPREMOTEINFO не установлена.



Конфигурационные файлы qmail

Конфигурирование qmail можно признать вполне приятным занятием, по сравнению с файлами типа /etc/sendmail.cf (хоть даже для этого сипользовался широко разрекламированный препроцессор m4).

Каталог, в котором располагаются конфигурационные файлы qmail - /var/qmail/control.
Для функционирования qmail в общем случае абсолютно необходим лишь один конфигурационный файл - me, состоящий к тому же из единственной строки, содержащей полное доменное имя Вашей машины (автоматически создается при установке скриптом config-fast).

Обратите особое внимание, что программа qmail-send перечитывает конфигурационные файлы только при старте, поэтому при их изменении необходимо перезапустить qmail-send. Если qmail-send получает сигнал HUP, она перечитывает лишь файлы locals и vurtualdomains.

Далее приведен список конфигурационных файлов qmail, которые могут располагаться в каталоге /var/qmail/control, использующие их программы, значение по умолчанию и краткое описание. Более полное описание с синтаксисом можно найти в соответствующих программам страницах руководства. Все времена указываются в секундах.

файл программа default краткое описание


badmailfrom qmail-smtpd нет неприемлемые адреса отправителей
badmailpatterns qmail-smtpd нет
badrcptto qmail-smtpd нет
bouncefrom qmail-send MAILER-DAEMON пользователь для отвергнутых сообщений
bouncehost qmail-send me хост для отвергнутых сообщений
concurrencylocal qmail-send 10 max число одновр. доставляемых сообщ.(лок)
concurrencyremote qmail-send 20 max число одновр. доставляемых сообщ.(внеш)
defaultdomain qmail-inject me домен по умолчанию
defaulthost qmail-inject me хост по умолчанию
databytes qmail-smtpd 0 максимальный размер сообщения в байтах
doublebouncehost qmail-send me хост для повторно отвергнутых сообщений
doublebounceto qmail-send postmaster пользователь для повторно отвергнутых сообщ.
envnoathost qmail-send me домен для адресов без знака @
helohost qmail-remote me имя хоста для приветствия удал. SMTP сервера
idhost qmail-inject me
localiphost qmail-smtpd me замена локальных IP-адресов на имя хоста
locals qmail-send me список доменов для локальной доставки
morercpthosts qmail-smtpd нет дополнительные разрешенные RCPT-домены
percenthack qmail-send нет домены для которых возможен в адресах знак %
plusdomain qmail-inject me имя домена для имен хостов, оканчивающихся +
qmqpservers qmail-qmqpc нет
queuelifetime qmail-send 604800 max время нахождения сообщения в очереди
rcpthosts qmail-smtpd нет разрешенные RCPT-домены
smtpgreeting qmail-smtpd me приглашение SMTP
smtproutes qmail-remote нет искусственная SMTP маршрутизация
timeoutconnect qmail-remote 60 таймаут ожидания связи с удал. SMTP сервером
timeoutremote qmail-remote 1200 таймаут ожидания ответа от удал. SMTP сервера
timeoutsmtpd qmail-smtpd 1200 таймаут в данных от удал. SMTP клиента
virtualdomains qmail-send нет список виртуальных пользователей или доменов

O Господи! Как же мне надоел этот текст... (С)

 C.Лебедев (Sir Serge)
Barnaul, RF
28/11/2004



Всего комментариев: 4

Максим Иванов OC: Linux   2007-04-24 19:08:01


День добрый!

Спасибо, что процетировали мою инструкцию. Случайно наткнулся на собственные строки :)
Фразу "Удалить из /etc/inittab строку, в которой есть слово svscanboot. " я писал в своей инструкции по установке QMail на сайте atmsk.ru по поводу того, что это была инструкция для AltLinux Master. Собственно, приведенный скрипт запуска QMail был мною взят из документа
[ ccылка ]
Причем в скрипте ошибка: вместо
queue)
qmail-qstat
qmail-qread

Необходимо писать:
queue)
/var/qmail/bin/qmail-qstat
/var/qmail/bin/qmail-qread
Инче, к сожалению, не работает. Но это я уже на atmsk.ru выложить не успел, равно как и другие исправления, сайт закрылся.
Спасибо Вам за популизацию почтового сервера QMail!
С уважением, Максим Иванов


Sir Serge OC: Linux   2007-04-24 20:06:29


Ну, собственно скрипт в-основном то работает, по той причине что редко кто в реалиях пользуется пунктом queue)

Cпасибо за коррекцию ошибки в скрипте. Возможно, это кому-нибудь сэкономит драгоценное время. :)


GLADtr OC: Windows XP   2007-09-10 21:11:40


Здравствуйте, Сергей.

У меня есть к вам просьба помочь мне советом

Я хочу установить и настроить qmail только в качестве рэлэя.
Читаю доки хау-то и голова кругом.

Для разъяснения ситуации что мне нужно в общем

есть mx.domen.ru в DMZ на него приходит почта для четырех доменов(domen.ru, domen1.ru, domen2.ru, domen3.ru) с него будет уходить на следующий smtp server с которого собственно почта будет попадать на почтовики exchange

qmail будет стоять на втором smtp-server который должен принимать почту и отправлять ее только по определенным хостам - остальное отвергать

Вот такая вот просьба
Заранее огромное спасибо


GLADtr OC: Windows XP   2007-09-11 13:49:28


маленькое замечание по поводу пакета ucspi-tcp-0.88.tar.gz

для его компиляции нужен ucspi-tcp-0.88-man.tar.gz который по крайней мере порт не находит для скачивания пришлось найти в инете вот по этому адресу [ ccылка ]

теперь можно компилить



Вы можете добавить свои комментарии.

Поскольку у нас тут абсолютная демократия, то комментарий появится на сайте только после того, как он будет одобрен администрацией. Оперативности, однако, не обещаем.

Прошу соблюдать относительную корректность в высказываниях. Заявления типа "Пошел на...", посты, написанные в олбанской лексике и психоанализ личности автора и участников обсуждения в свет не выйдут. Также будут блокированы сообщения, не имеющие никакого отношения к заявленной тематике. Если вы не согласны с приведенным текстом - выскажите своё мнение, но обосновывайте его. Помните, что свою позицию доказываете Вы не мне, а другим читателям. Всячески приветствуются возможные технические поправки и исправления неточностей. Для возможности внесения комментариев в браузере должна быть включена поддержка JavaScript. Реклама и ссылки на сайты, не относящиеся к делу, являются прямым основанием блокировки. Поля "E-mail" и "WWW" обязательными для заполнения не являются, поле E-Mail не публикуется. Если хотите просто что-то написать автору статьи, без публикации на сайте - воспользуйтесь специальной формой под пунктом меню "О сайте". Администрация оставляет за собой право публиковать или не публиковать адреса, введенные в поле www, а также при необходимости редактировать текст вашего сообщения. Ответы на ваши сообщения по введенному вами E-mail автоматически сайтом не высылаются. Да, теги PHPBB и HTML не действуют, так что не старайтесь их вводить.

Copyright © 2003-2018 by Sir Serge