Страница:
- 336 -
default xfer no
#
# public.vbrew.com offers public access via modem, we allow
# them to read and post to any but the local.* groups
public.vbrew.com read post !local
#
# all other hosts at the brewery may read and post
*.vbrew.com read post
19.4 NNTP Разрешение
При печати прописными буквами лексем(маркеров) доступа подобно xfer
или read в nntp access файл, nntpd требует разрешения от клиента для
соответственных операций. Например, при определении права Xfer или
XFER, nntpd не будет допускать клиентские статьи к вашему пункту, если он не
передает разрешение.
Процедура разрешения выполнена посредством новой команды NNTP,
именованной AUTHINFO. При использовании этой команды, клиент передает
имя пользователя и пароль к NNTP серверу. Nntpd проверит правильность их,
проверяя их против базы данных /etc/passwd, и проверит, что пользователь
принадлежит группе nntp.
Текущая реализация NNTP разрешения только экспериментальна, и не
была выполнена очень переносимой. Результат - то, что это работает только с
базами данных паролей с простым стилем; теневые пароли не будут
распознаны.
19.5 Nntpd Взаимодействие с C News
При получении статьи, nntpd должен приписать ее к подсистеме новостей.
В зависимости от того, было ли это получено в результате команды IHAVE
или POST, статья вручена rnews или inews, соответственно. Вместо того, чтобы
вызывать rnews, Вы можете также конфигурировать rnews (во времени
компиляции) пакетировать входящие статьи и перемещать возникающие в
результате пакеты в /var/spool/news/in.coming, где они остаются для relaynews,
чтобы подбирать их в следующей выполненной очереди.
Чтобы быть способным правильно выполнить ihave/sendme протокол, nntpd
должен быть способен обратиться к файлу хронологии. Во времени
компиляции, Вы следовательно должны удостовериться, что путь установлен
- 337 -
правильно. Вы должны также удостовериться, что C news и nntpd
договариваются о формате вашего файла хронологии. C news использует dbm
хеш-функции, чтобы обратиться к нему; однако, имеется некоторое число
отличных и немного несовместимых реализаций dbm библиотеки. Если C news
был связан с различной dbm библиотекой чем Вы, имеете в вашем стандарте
libc, Вы должны линковать nntpd с этой библиотекой, также.
Типичный признак того что nntpd и C news не соглашаются относительно
формата базы данных - сообщения об ошибках в файле регистрации системы,
что nntpd не может открыть его правильно, или двойные статьи, полученные
через NNTP. Хороший тест должен выбрать статью из вашей области spool,
сделать telnet к nntp порту, и предлагать, это к nntpd как показано в примере
ниже. Конечно, Вы должны заменить на ID-сообщение статьи,
которую Вы хотите передать к nntpd снова.
$ telnet localhost nntp
Trying 127.0.0.1...
Connected to loalhost
Escape characters is '^]'.
201 vstout NNTP[auth] server version 1.5.11t (16 November
1991) ready at Sun Feb 6 16:02:32 1194 (no posting)
IHAVE
435 Got it.
QUIT
Этот диалог показывает соответствующую реакцию nntpd; сообщение "Got
it" сообщает Вам, что уже имеется эта статья. Если Вы получаете сообщение
"335 Ok" взамен, поиск в файле хронологии, потерпел неудачу по некоторым
причинам. Завершите диалог печатая Ctrl-D. Вы можете проверять, что шло
неправильно, проверяя файл регистрации системы; nntpd регистрирует все
виды сообщений в syslog. Несовместимая dbm библиотека обычно проявляется
в сообщении, жалующемся что dbminit потерпел неудачу.
20. Конфигурация Newsreader
Newsreaders предназначены, чтобы предложить функциональные
возможности, которые позволяют пользователю обращаться к функциям
системы новостей легко, подобно регистрации статей, или просматривать
содержимое newsgroup удобным способом. Качество этого интерфейса предмет
- 338 -
бесконечных споров.
Имеется пара newsreaders, которые были пренесены на Linux. Ниже я буду
описывать базисную установку для трех наиболее популярных, а именно tin,
trn, и nn.
Один из наиболее эффективных newsreaders это
$ find /var/spool/news -name '[0-9]*' -exec cat {} \; | more
Это - способ, которым Unix читает новости.
Большая часть newsreaders, однако, является намного более сложной. Они
обычно предлагают полноэкранный интерфейс с отдельными уровнями для
отображения всех групп, на которые пользователь подписался, для
отображения краткого обзора всех статей в одной группе. И для
индивидуальных статей.
В уровне newsgroup, большинство newsreaders отображает список статей,
показывая их подчиненную строку, и автора. В больших группах, это
невозможно для пользователя, чтобы следить за статьями в отношении друг
друга, хотя возможно идентифицировать ответы на более ранние статьи.
Ответ обычно повторяет первоначальную тему статьи, начинаясь с " " Re: ''.
Здесь, мы не будем детализировать то, как интерфейсы пользователя
сформированы. Все newsreaders, в настоящее время доступные для Linux имеют
хорошую функцию справки, так что Вы должны исследовать дальше сами.
В следующем, мы будем иметь дело только с административными
задачами. Большинство их касается создания баз данных и учет.
20.1 Конфигурация tin
Наиболее универсальный newsreader - tin. Он написан Iain Lea и - свободно
построен на более старом newsreader, именованном ТАСС.
На 486DX50, он берет приблизительно 30 секунд, чтобы найти 1000 статей
при чтении непосредственно с диска. Над NNTP к загруженному серверу
новостей, это было бы что-нибудь более 5 минут. Вы можете уточнить это,
регулярно модифицируя ваш индексный файл с -u опцией, или вызывая tin с -
U опцией.
Обычно, tin формирует дамп баз данных в исходном каталоге пользователя
ниже .tin/index. Это может однако быть дорогостояще в терминах ресурсов, так
чтобы Вы хотели хранить одиночную копию их в центральном расположении.
Это может быть достигнуто, делая tin setuid к новостям, например. Тогда tin
- 339 -
будет хранить, все подходящие базы данных ниже /var/spool/news/.index. Для
любого файла access или Escape оболочки, это переустановит эффективный
универсальный идентификатор к реальному универсальному идентификатору
пользователя, который вызвал это.
Версия tin, включенного в некоторые распределения Linux не имеет
никакой компилируемой поддержки NNTP. Когда вызывается как rtin или с -r
опцией, tin пробует соединяться с NNTP сервером, заданным в /etc/nntpserver
файле или в NNTPSERVER переменной среды. Nntpserver файл просто
содержит имя сервера в одиночной строке.
20.2 Trn Конфигурация
Trn - преемник более старого newsreader, а именно rn (который означает
чтение новостей). " T " в имени замещает "связный". Он написан Wayne
Davidson.
В отличие от tin, trn не имеет никакого средства для производства базы
данных поиска во время выполнения. Взамен, он использует базу
подготовленную программой, называемой mthreads, которая должна вызваться
регулярно из cron, чтобы модифицировать индексные файлы.
Не выполнение mthreads, однако, не означает, что Вы не можете
обращаться к новым статьям, это только означает что Вы будете иметь все эти
" Novell выкупают Linix!! " статьи, рассеянные в вашем меню выбора статей,
вместо одиночного экземпляра (который Вы можете легко пропустить).
Чтобы включить отсеивание для определенных newsgroups, mthreads
вызывается со списком newsgroups в командной строке. Список сделан как в
файле sys:
mthreads comp,rec,!rec.games.go
Даст возможность отсеиванию для все comp и rec, кроме rec.games.go (люди,
кто играют, идут, не нуждаются в причудливых выборках). После этого, Вы
просто вызываете это без любой опции вообще, чтобы заставить это
обработать любые недавно прибывшие статьи. Отсеивание всех групп,
найденных в вашем файле active может быть включено, вызывая mthreads со
списком группы.
Если вы получаете новости в течение ночи, Вы будет обычно выполнять
mthreads один раз утром, но Вы можете также, делать так более часто если
необходимо. Абоненты, которые имеют очень тяжелый траффик, могут хотеть
- 340 -
выполнять mthreads в daemon режиме. Когда она начинается при начальной
загрузке, используя -d опцию, она помещает себя в фон, и пробуждается
каждые 10 минут, чтобы проверить, имеются ли любые недавно прибытые
статьи, и просеивает их. Чтобы выполнять mthreads в daemon режиме,
поместите следующую строку в вашу rc.news команду:
/usr/local/bin/rn/mthreads -deav
-a опция заставит mthread автоматически включить отсеивание для новых
групп, поскольку они созданы; -v дает возможность подробным
регистрационным сообщениям к файлу регистрации mthreads, mt.log в каталоге,
где Вы имеете установленный trn.
Старые статьи, которые больше не доступны, должны быть удалены из
индексных файлов регулярно. По умолчанию, только статьи, чье число
является ниже метки ожидания, будут удалены. Статьи выше этого числа,
которые устарели (потому что самая старая статья была назначена на длинную
дату истечения полем заголовка Expires) могут быть удалены, давая mthreads -e
опцию, чтобы вынудить " расширенную " чистку. Когда mthreads выполняется
в daemon режиме, -e опция заставит такое расширенное истечение выполнять
один раз в день, в полночь.
20.3 Конфигурация nn
Nn написал Kim F. Storm, он утверждает, что цель newsreader не состоит в
том, чтобы читать новости. Имя расшифровывается как " Нет Новостей '', и
девиз - "Отсутствие новостей - хорошая новость. А nn лучше."
Чтобы достигать этой честолюбивой цели, nn поставляется с большим
выбором инструментальных средств сопровождения, которые не только
позволяют проводить отсеивание, но также протяженные проверки на
непротиворечивости этих баз данных, учет, сбор статистики использования, и
ограничений доступа. Имеется также программа администрации, называемая
nnadmin, который позволяет Вам выполнять эти задачи в интерактивном
режиме.
Nn диспетчер базы данных, называется nnmaster. Он обычно выполняется
как daemon, начинается из команды rc.inet2 или rc.news. Он вызывается как
/usr/local/lib/nn/nnmaster -l -r -C
- 341 -
Это дает возможность отсеиванию для всех newsgroups, представленных в
вашем файле active.
Также, Вы можете вызывать nnmaster периодически из cron, давая ему
список групп. Этот список очень похож на список в файле sys, за исключением
того, что он использует пробелы вместо запятых. Вместо группы fake для всех,
пустой аргумент "" должен использоваться, чтобы обозначить все группы.
Типовой вызов
# /usr/local/lib/nn/nnmaster !rec.games.go rec comp
Обратите внимание, что порядок значителен: крайная левая спецификация
группы, которая соответствует, всегда выигрывает. Таким образом, если мы
поместили !rec.games.go после rec, все статьи из этой группы отсеились.
Nn предлагает отдельные методы удалить устаревшие статьи из баз
данных. Первое, чтобы модифицировать базу данных, развертывая каталоги
групп новостей и отбрасывая входы, чья соответствующая статья является
больше не доступной. Это - заданная по умолчанию операция, полученная
вызовом nnmaster с -E опцией. Приемлемо быстро, если вы не делаете это
через NNTP.
Метод 2 ведет себя точно подобно заданному по умолчанию устареванию,
выполненному mthreads, в котором она только удаляет те входы, которые
относятся к статьям, чье число ниже метки ожидания в файле active. Это
можно допускать, используя -e опцию.
В заключение, третья стратегия должна отбросить всю базу данных и
переоформить все статьи. Это может быть выполнено, давая -E3 к nnmaster.
Список групп, которые устарели дется -F опцией в том же самом режиме
как выше. Однако, если Вы имеете nnmaster, выполняющийся как daemon, Вы
должны уничтожить его (используя -k) прежде, чем может произойти
устаревание, и перезапускать его с первоначальными опциями. Таким образом
соответствующая команда, чтобы выполнить expire на всех группах,
использующих метод 1:
# nnmaster -kF ""
# nnmaster -lrC
Имеются много больше флагов, которые могут использоваться, чтобы
подстроить поведение nn. Если Вы волнуетесь относительно удаления плохих
статей или сборников статей, читайте nnmaster страницу руководства.
- 342 -
Nnmaster полагается на файл, именованный GROUPS, который расположен
в /usr/local/lib/nn. Если он не существует первоначально, он будет создан. Для
каждой newsgroup, он содержит строку, которая начинается с имени группы,
необязательно сопровождаемого временной меткой, и флагами. Вы можете
редактировать эти флаги, чтобы дать возможность некоторому поведению для
рассматриваемой группы, но Вы не можете изменять порядок, в котором
группы появляются. Флаги и их эффекты детализированы в nnmaster странице
руководства, также.
APPENDIX A
Null Кабель Принтера для PLIP
Чтобы сделать Кабель Принтера для использования с PLIP соединением,
Вы нуждаетесь в двух соединителях с 25 штырьками (называемых DB-25) и
некотором кабеле с 11 проводниками. Кабель должен быть длиной 15 метров.
Если Вы рассматриваете коннектор, Вы должны видеть крошечные числа в
основе каждого штырька. Для кабеля Принтера, Вы должны соединить
следующие штырьки обоих разьемов друг с другом:
+-------------------------------+
|D0 2 15 ERROR |
|D1 3 13 SLCT |
|D2 4 12 PAPOUT |
|D3 5 10 ACK |
|D4 6 11 BUSY |
|GROUND 25 25 GROUND |
|ERROR 15 2 D0 |
|SLCT 13 3 D1 |
|PAPOUT 12 4 D2 |
|ACK 10 5 D3 |
|BUSY 11 6 D4 |
+-------------------------------+
Все остающиеся штырьки остаются не связанными. Если кабель
экранирован, экран должен быть соединен с DB-25 металлической оболочкой
на одном конце.
- 343 -
APPENDIX B
Примеры smail Файлов Конфигурации
Этот раздел показывает типовые файлы конфигурации для пункта UUCP в
локальной вычислительной сети. Они основаны на типовых файлах,
включенных в исходное распределение smail-3.1.28. Хотя я делаю слабую
попытку объяснить, как эти файлы работают.
Первый показанный файл - файл программ маршрутизации, который
описывает набор программ маршрутизации для smail. Когда smail должен
послать сообщение к данному адресу, он вручает адрес всем программам
маршрутизации по очереди, пока одна из них не найдет соответствие.
Соответствие здесь означает что программа маршрутизации находит host
адресата в базе данных, буть это файл paths, /etc/hosts, или любой механизм
маршрутизации.
Входы в smail файлах конфигурации всегда начинаются с уникального
имени, идентифицирующего программу маршрутизации, транспорт, или
руководитель. Они сопровождаются списком атрибутов, которые определяют
поведение. Этот список состоит из набора глобальных атрибутов, типа
драйвера, и частных атрибутов, которые понятны только этому
специфическому драйверу.
Атрибуты отделяются запятыми, в то время как наборы глобальных и
частных атрибутов отделяются от друг друга, используя точку с запятой.
В smail, Вы можете определять две программы маршрутизации в файле
программ маршрутизации, обе из которых используют pathalias драйвер. Этот
драйвер ищет hostnames в pathalias базе данных. Он ожидает имя файла в
частном атрибуте:
#
# pathalias database for intra-domain routing
domain paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/domain, # file is /usr/lib/smail/paths/domain
proto=lsearch, # file is unsorted (linear search)
optional, # ignore if the file does not exist
required=vbrew.com, # look up only *.vbrew.com hosts
#
- 344 -
# pathalias database for routing to hosts outside our domain
world paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/world, # file is /usr/lib/smail/paths/world
proto=bsearch, # file is sorted with sort(1)
optional, # ignore if the file does not exist
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
Второй атрибут глобальной переменной, данный в каждом из двух входов
программ маршрутизации выше определяет транспорт, который должен
использоваться, когда программа маршрутизации обрабатывает адрес. В нашем
случае, сообщение будет передано используя uux транспорт. Транспорты
определены в файле transports, который объяснсется ниже.
Вы можете подстраивать, которым транспортом сообщение будет
передаваться, если Вы определяете mathod файл вместо атрибута transports.
Файлы методов обеспечивают отображение целевого hostnames на transports.
Мы не будем иметь дело с ними здесь.
Следующий файл программ маршрутизации определяет программы
маршрутизации для локальной вычислительной сети, которые сделают запрос
библиотеки решающих устройств. На host Internet, однако, Вы хотели бы
использовать программу маршрутизации, которая обрабатывает записи MX.
Вы должны следовательно разкомментировать альтернативную inet программу
маршрутизации, которая использует встроенный драйвер BIND smail.
В среде, которая смешивает UUCP и TCP/IP, Вы можете сталкиваться с
проблемой, что Вы имеете главные ЭВМ в вашем файле /etc/hosts, с которыми
Вы имеете только случайный SLIP или PPP контакт. Обычно, Вы все еще
хотели бы посылать любую почту для них по UUCP. Чтобы предотвращать inet
драйвер главных ЭВМ от соответствия этих главных ЭВМ, Вы должны
поместить их в файл paths/force.
Это - другая база данных pathalias-стилей, она проверяется прежде чем smail
делает запрос решающего устройства.
# A sample /usr/lib/smail/routers file
#
# force - force UUCP delivery to certain hosts, even when
# they are in our /etc/hosts
- 345 -
force:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/force, # file is /usr/lib/smail/paths/force
optional, # ignore if the file does not exist
proto=lsearch, # file is unsorted (linear search)
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
# inet addrs - match domain literals containing literal
# IP addresses, such as in janet@[191.72.2.1]
inet addrs:
driver=gethostbyaddr, # driver to match IP domain literals
transport=smtp; # deliver using SMTP over TCP/IP
fail if error, # fail if address is malformed
check for local, # deliver directly if host is ourself
# inet hosts - match hostnames with gethostbyname(3N)
# Comment this out if you wish to use the BIND version instead.
inet hosts:
driver=gethostbyname, # match hosts with the library function
transport=smtp; # use default SMTP
-required, # no required domains
-domain, # no defined domain suffixes
-only local domain, # don't restrict to defined domains
# inet hosts - alternate version using BIND to access the DNS
#inet hosts:
# driver=bind, # use built-in BIND driver
# transport=smtp; # use TCP/IP SMTP for delivery
#
# defnames, # use standard domain searching
# defer no connect, # try again if the nameserver is down
# -local mx okay, # fail (don't pass through) an MX
# # to the local host
#
# pathalias database for intra-domain routing
domain paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/domain, # file is /usr/lib/smail/paths/domain
- 346 -
proto=lsearch, # file is unsorted (linear search)
optional, # ignore if the file does not exist
required=vbrew.com, # look up only *.vbrew.com hosts
#
# pathalias database for routing to hosts outside our domain
world paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/world, # file is /usr/lib/smail/paths/world
proto=bsearch, # file is sorted with sort(1)
optional, # ignore if the file does not exist
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
# smart host - a partically specified smarthost director
# If the smart path attribute is not defined in
# /usr/lib/smail/config, this router is ignored.
# The transport attribute is overridden by the global
# smart transport variable
smart host:
driver=smarthost, # special-case driver
transport=uux; # by default deliver over UUCP
-path, # use smart path config file variable
Обработка почты для локальных адресов конфигурирована в файле
directors. Это сделано точно так же как файл программ маршрутизации, со
списком входов, которые определяют руководителя каждой. Руководители не
посылают сообщение, они просто выполняют всю переадресацию, которая
является возможной, например через aliases, пересылку почты, и т.п..
При поставке почты к локальному адресу, типа janet, smail передает имя usr
всем directors по очереди. Если director соответствует, это или определяет
транспорт, которым сообщение должно быть передано (например, к mailbox
файлу пользователя), или генерирует новый адрес (например, после
специальной оценки).
Из-за включаемых проблем защиты, directors обычно делает множество
проверок того, могут ли файлы которые они используют быть
скомпрометированы или нет. Адреса, полученные несколько сомнительным
способом (например от world -перезаписываемый файл aliases) помечены как
небезопасные. Некоторые транспортные драйверы отвергнут такие адреса,
- 347 -
например транспорт, который передает сообщение файлу.
Кроме этого, smail также связывает пользователя с каждым адресом. Любая
запись или операции чтения выполняется как пользователь. Для получения в,
скажем mailbox janet, адрес конечно связан с janet.
Другие адреса, типа тех что получены из файла aliases, имеют других
пользователей, связанных с ними, например, пользователь nobody.
Для подробностей этих возможностей, пожалуйста обратитесь к smail
manpage.
# A sample /usr/lib/smail/directors file
# aliasinclude - expand ":include:filename" addresses produced
# by alias files
aliasinclude:
driver=aliasinclude, # use this special-case driver
nobody; # access file as nobody user if unsecure
copysecure, # get permissions from alias director
copyowners, # get owners from alias director
# forwardinclude - expand ":include:filename" addrs produced
# by forward files
forwardinclude:
driver=forwardinclude, # use this special-case driver
nobody; # access file as nobody user if unsecure
checkpath, # check path accessibility
copysecure, # get perms from forwarding director
copyowners, # get owners from forwarding director
# aliases - search for alias expansions stored in a database
aliases:
driver=aliasfile, # general-purpose aliasing director
-nobody, # all addresses are associated
# with nobody by default anyway sender okay,
# don't remove sender from expansions
owner=owner-$user; # problems go to an owner address
file=/usr/lib/aliases, # default: sendmail compatible
modemask=002, # should not be globally writable
optional, # ignore if file does not exist
proto=lsearch, # unsorted ASCII file
# dotforward - expand .forward files in user home directories
dotforward:
- 348 -
driver=forwardfile, # general-purpose forwarding director
owner=real-$user, # problems go to the user's mailbox
nobody, # use nobody user, if unsecure
sender okay; # sender never removed from expansion
file=~/.forward, # .forward file in home directories
checkowner, # the user can own this file
owners=root, # or root can own the file
modemask=002, # it should not be globally writable
caution=0-10:uucp:daemon,
# don't run things as root or daemons
# be extra careful of remotely accessible home directories
unsecure="~ftp:~uucp:~nuucp:/tmp:/usr/tmp",
# forwardto - expand a "Forward to " line at the top of
# the user's mailbox file
forwardto:
driver=forwardfile,
owner=Postmaster, # errors go to Postmaster
nobody, # use nobody user, if unsecure
sender okay; # don't remove sender from expansion
file=/var/spool/mail/${lc:user},
# location of user's mailbox forwardto,
# enable "Forward to " check
checkowner, # the user can own this file
owners=root, # or root can own the file
modemask=0002, # under System V, group mail can write
caution=0-10:uucp:daemon, # don't run things as root or daemons
# user - match users on the
# local host with delivery to their mailboxes user:
driver=user; # driver to match usernames
transport=local, # local transport goes to mailboxes
# real user - match usernames when prefixed with the string "real-"
real user:
driver=user; # driver to match usernames
transport=local, # local transport goes to mailboxes
prefix="real-", # for example, match real-root
# lists - expand mailing lists stored below /usr/lib/smail/lists
lists: driver=forwardfile,
caution, # flag all addresses with caution
- 349 -
nobody, # and then associate the nobody user
sender okay, # do NOT remove the sender
owner=owner-$user; # the list owner
# map the name of the mailing list to lower case
file=lists/${lc:user},
После успешно маршрутизации или направления сообщения, smail вручает
сообщение транспорту, заданному программой маршрутизации или director,
который соответствовал(согласовал) адресу. Эти transports определен в файле
transports. Снова, транспорт определен набором глобальных и частных опций.
Наиболее важная опция, определенная каждым входом - драйвер, который
обрабатывает транспорт, например драйвер трубопровода, который вызывает
команду, заданную в cmd атрибуте. Кроме этого, имеется число глобальных
атрибутов, которые транспорт может использовать, которые выполняют
различные преобразования заголовка сообщения, и возможно тела сообщения.
# A sample /usr/lib/smail/transports file
# local - deliver mail to local users
local: driver=appendfile, # append message to a file
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
file=/var/spool/mail/${lc:user},
# location of mailbox files group=mail,
# group to own file for System V
mode=0660, # group mail can access
suffix="\n", # append an extra newline
# pipe - deliver mail to shell commands
pipe: driver=pipe, # pipe message to another program
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
cmd="/bin/sh -c $user", # send address to the Bourne Shell
parent env, # environment info from parent addr
pipe as user, # use user-id associated with address
ignore status, # ignore a non-zero exit status
- 350 -
ignore write errors, # ignore write errors, i.e., broken pipe
umask=0022, # umask for child process
-log output, # do not log stdout/stderr
# file - deliver mail to files
file: driver=appendfile,
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
file=$user, # file is taken from address
append as user, # use user-id associated with address
expand user, # expand ~ and $ within address
suffix="\n", # append an extra newline
mode=0600, # set permissions to 600
# uux - deliver to the rmail program on a remote UUCP site
uux: driver=pipe,
uucp, # use UUCP-style addressing forms
from, # supply a From envelope line
max addrs=5, # at most 5 addresses per invocation
max chars=200; # at most 200 chars of addresses
cmd="/usr/bin/uux - -r -a$sender -g$grade $host!rmail $(($user)$)",
pipe as sender,
# have uucp logs contain caller
log output, # save error output for bounce messages
# defer child errors, # retry if uux returns an error
# demand - deliver to a remote rmail program,
# polling immediately demand: driver=pipe,
uucp, # use UUCP-style addressing forms
from, # supply a From envelope line
max addrs=5, # at most 5 addresses per invocation
max chars=200; # at most 200 chars of addresses
cmd="/usr/bin/uux - -a$sender -g$grade $host!rmail $(($user)$)",
pipe as sender,
# have uucp logs contain caller
log output, # save error output for bounce messages
# defer child errors, # retry if uux returns an error
# hbsmtp - half-baked BSMTP. The output files must
- 351 -
# be processed regularly and sent out via UUCP.
hbsmtp: driver=appendfile,
inet, # use RFC 822-addressing
hbsmtp, # batched SMTP w/o HELO and QUIT
-max addrs, -max chars; # no limit on number of addresses
file="/var/spool/smail/hbsmtp/$host",
user=root, # file is owned by root
mode=0600, # only read-/writeable by root.
# smtp - deliver using SMTP over TCP/IP
smtp: driver=tcpsmtp,
inet,
-max addrs, -max chars; # no limit on number of addresses
short timeout=5m, # timeout for short operations
long timeout=2h, # timeout for longer SMTP operations
service=smtp, # connect to this service port
# For internet use: uncomment the below 4 lines
# use bind, # resolve MX and multiple A records
# defnames, # use standard domain searching
# defer no connect, # try again if the nameserver is down
# -local mx okay, # fail an MX to the local host
APPENDIX C
Общая Публичная Лицензия GNU
Имеется Общая Лицензия GNU (GPL или copy-left), под которой Linux
запатентован. Она не воспроизведена здесь. Большая часть ядра Linux -
copyright (C) 1993 Linus Torvalds, и другое программное обеспечение
обеспечены авторским правом их авторами. Таким образом, Linux обеспечен
авторским правом, однако, Вы можете перераспределять его (копировать) в
соответствии с GPL (GNU GENERAL PUBLIC LICENSE).
default xfer no
#
# public.vbrew.com offers public access via modem, we allow
# them to read and post to any but the local.* groups
public.vbrew.com read post !local
#
# all other hosts at the brewery may read and post
*.vbrew.com read post
19.4 NNTP Разрешение
При печати прописными буквами лексем(маркеров) доступа подобно xfer
или read в nntp access файл, nntpd требует разрешения от клиента для
соответственных операций. Например, при определении права Xfer или
XFER, nntpd не будет допускать клиентские статьи к вашему пункту, если он не
передает разрешение.
Процедура разрешения выполнена посредством новой команды NNTP,
именованной AUTHINFO. При использовании этой команды, клиент передает
имя пользователя и пароль к NNTP серверу. Nntpd проверит правильность их,
проверяя их против базы данных /etc/passwd, и проверит, что пользователь
принадлежит группе nntp.
Текущая реализация NNTP разрешения только экспериментальна, и не
была выполнена очень переносимой. Результат - то, что это работает только с
базами данных паролей с простым стилем; теневые пароли не будут
распознаны.
19.5 Nntpd Взаимодействие с C News
При получении статьи, nntpd должен приписать ее к подсистеме новостей.
В зависимости от того, было ли это получено в результате команды IHAVE
или POST, статья вручена rnews или inews, соответственно. Вместо того, чтобы
вызывать rnews, Вы можете также конфигурировать rnews (во времени
компиляции) пакетировать входящие статьи и перемещать возникающие в
результате пакеты в /var/spool/news/in.coming, где они остаются для relaynews,
чтобы подбирать их в следующей выполненной очереди.
Чтобы быть способным правильно выполнить ihave/sendme протокол, nntpd
должен быть способен обратиться к файлу хронологии. Во времени
компиляции, Вы следовательно должны удостовериться, что путь установлен
- 337 -
правильно. Вы должны также удостовериться, что C news и nntpd
договариваются о формате вашего файла хронологии. C news использует dbm
хеш-функции, чтобы обратиться к нему; однако, имеется некоторое число
отличных и немного несовместимых реализаций dbm библиотеки. Если C news
был связан с различной dbm библиотекой чем Вы, имеете в вашем стандарте
libc, Вы должны линковать nntpd с этой библиотекой, также.
Типичный признак того что nntpd и C news не соглашаются относительно
формата базы данных - сообщения об ошибках в файле регистрации системы,
что nntpd не может открыть его правильно, или двойные статьи, полученные
через NNTP. Хороший тест должен выбрать статью из вашей области spool,
сделать telnet к nntp порту, и предлагать, это к nntpd как показано в примере
ниже. Конечно, Вы должны заменить
которую Вы хотите передать к nntpd снова.
$ telnet localhost nntp
Trying 127.0.0.1...
Connected to loalhost
Escape characters is '^]'.
201 vstout NNTP[auth] server version 1.5.11t (16 November
1991) ready at Sun Feb 6 16:02:32 1194 (no posting)
IHAVE
435 Got it.
QUIT
Этот диалог показывает соответствующую реакцию nntpd; сообщение "Got
it" сообщает Вам, что уже имеется эта статья. Если Вы получаете сообщение
"335 Ok" взамен, поиск в файле хронологии, потерпел неудачу по некоторым
причинам. Завершите диалог печатая Ctrl-D. Вы можете проверять, что шло
неправильно, проверяя файл регистрации системы; nntpd регистрирует все
виды сообщений в syslog. Несовместимая dbm библиотека обычно проявляется
в сообщении, жалующемся что dbminit потерпел неудачу.
20. Конфигурация Newsreader
Newsreaders предназначены, чтобы предложить функциональные
возможности, которые позволяют пользователю обращаться к функциям
системы новостей легко, подобно регистрации статей, или просматривать
содержимое newsgroup удобным способом. Качество этого интерфейса предмет
- 338 -
бесконечных споров.
Имеется пара newsreaders, которые были пренесены на Linux. Ниже я буду
описывать базисную установку для трех наиболее популярных, а именно tin,
trn, и nn.
Один из наиболее эффективных newsreaders это
$ find /var/spool/news -name '[0-9]*' -exec cat {} \; | more
Это - способ, которым Unix читает новости.
Большая часть newsreaders, однако, является намного более сложной. Они
обычно предлагают полноэкранный интерфейс с отдельными уровнями для
отображения всех групп, на которые пользователь подписался, для
отображения краткого обзора всех статей в одной группе. И для
индивидуальных статей.
В уровне newsgroup, большинство newsreaders отображает список статей,
показывая их подчиненную строку, и автора. В больших группах, это
невозможно для пользователя, чтобы следить за статьями в отношении друг
друга, хотя возможно идентифицировать ответы на более ранние статьи.
Ответ обычно повторяет первоначальную тему статьи, начинаясь с " " Re: ''.
Здесь, мы не будем детализировать то, как интерфейсы пользователя
сформированы. Все newsreaders, в настоящее время доступные для Linux имеют
хорошую функцию справки, так что Вы должны исследовать дальше сами.
В следующем, мы будем иметь дело только с административными
задачами. Большинство их касается создания баз данных и учет.
20.1 Конфигурация tin
Наиболее универсальный newsreader - tin. Он написан Iain Lea и - свободно
построен на более старом newsreader, именованном ТАСС.
На 486DX50, он берет приблизительно 30 секунд, чтобы найти 1000 статей
при чтении непосредственно с диска. Над NNTP к загруженному серверу
новостей, это было бы что-нибудь более 5 минут. Вы можете уточнить это,
регулярно модифицируя ваш индексный файл с -u опцией, или вызывая tin с -
U опцией.
Обычно, tin формирует дамп баз данных в исходном каталоге пользователя
ниже .tin/index. Это может однако быть дорогостояще в терминах ресурсов, так
чтобы Вы хотели хранить одиночную копию их в центральном расположении.
Это может быть достигнуто, делая tin setuid к новостям, например. Тогда tin
- 339 -
будет хранить, все подходящие базы данных ниже /var/spool/news/.index. Для
любого файла access или Escape оболочки, это переустановит эффективный
универсальный идентификатор к реальному универсальному идентификатору
пользователя, который вызвал это.
Версия tin, включенного в некоторые распределения Linux не имеет
никакой компилируемой поддержки NNTP. Когда вызывается как rtin или с -r
опцией, tin пробует соединяться с NNTP сервером, заданным в /etc/nntpserver
файле или в NNTPSERVER переменной среды. Nntpserver файл просто
содержит имя сервера в одиночной строке.
20.2 Trn Конфигурация
Trn - преемник более старого newsreader, а именно rn (который означает
чтение новостей). " T " в имени замещает "связный". Он написан Wayne
Davidson.
В отличие от tin, trn не имеет никакого средства для производства базы
данных поиска во время выполнения. Взамен, он использует базу
подготовленную программой, называемой mthreads, которая должна вызваться
регулярно из cron, чтобы модифицировать индексные файлы.
Не выполнение mthreads, однако, не означает, что Вы не можете
обращаться к новым статьям, это только означает что Вы будете иметь все эти
" Novell выкупают Linix!! " статьи, рассеянные в вашем меню выбора статей,
вместо одиночного экземпляра (который Вы можете легко пропустить).
Чтобы включить отсеивание для определенных newsgroups, mthreads
вызывается со списком newsgroups в командной строке. Список сделан как в
файле sys:
mthreads comp,rec,!rec.games.go
Даст возможность отсеиванию для все comp и rec, кроме rec.games.go (люди,
кто играют, идут, не нуждаются в причудливых выборках). После этого, Вы
просто вызываете это без любой опции вообще, чтобы заставить это
обработать любые недавно прибывшие статьи. Отсеивание всех групп,
найденных в вашем файле active может быть включено, вызывая mthreads со
списком группы.
Если вы получаете новости в течение ночи, Вы будет обычно выполнять
mthreads один раз утром, но Вы можете также, делать так более часто если
необходимо. Абоненты, которые имеют очень тяжелый траффик, могут хотеть
- 340 -
выполнять mthreads в daemon режиме. Когда она начинается при начальной
загрузке, используя -d опцию, она помещает себя в фон, и пробуждается
каждые 10 минут, чтобы проверить, имеются ли любые недавно прибытые
статьи, и просеивает их. Чтобы выполнять mthreads в daemon режиме,
поместите следующую строку в вашу rc.news команду:
/usr/local/bin/rn/mthreads -deav
-a опция заставит mthread автоматически включить отсеивание для новых
групп, поскольку они созданы; -v дает возможность подробным
регистрационным сообщениям к файлу регистрации mthreads, mt.log в каталоге,
где Вы имеете установленный trn.
Старые статьи, которые больше не доступны, должны быть удалены из
индексных файлов регулярно. По умолчанию, только статьи, чье число
является ниже метки ожидания, будут удалены. Статьи выше этого числа,
которые устарели (потому что самая старая статья была назначена на длинную
дату истечения полем заголовка Expires) могут быть удалены, давая mthreads -e
опцию, чтобы вынудить " расширенную " чистку. Когда mthreads выполняется
в daemon режиме, -e опция заставит такое расширенное истечение выполнять
один раз в день, в полночь.
20.3 Конфигурация nn
Nn написал Kim F. Storm, он утверждает, что цель newsreader не состоит в
том, чтобы читать новости. Имя расшифровывается как " Нет Новостей '', и
девиз - "Отсутствие новостей - хорошая новость. А nn лучше."
Чтобы достигать этой честолюбивой цели, nn поставляется с большим
выбором инструментальных средств сопровождения, которые не только
позволяют проводить отсеивание, но также протяженные проверки на
непротиворечивости этих баз данных, учет, сбор статистики использования, и
ограничений доступа. Имеется также программа администрации, называемая
nnadmin, который позволяет Вам выполнять эти задачи в интерактивном
режиме.
Nn диспетчер базы данных, называется nnmaster. Он обычно выполняется
как daemon, начинается из команды rc.inet2 или rc.news. Он вызывается как
/usr/local/lib/nn/nnmaster -l -r -C
- 341 -
Это дает возможность отсеиванию для всех newsgroups, представленных в
вашем файле active.
Также, Вы можете вызывать nnmaster периодически из cron, давая ему
список групп. Этот список очень похож на список в файле sys, за исключением
того, что он использует пробелы вместо запятых. Вместо группы fake для всех,
пустой аргумент "" должен использоваться, чтобы обозначить все группы.
Типовой вызов
# /usr/local/lib/nn/nnmaster !rec.games.go rec comp
Обратите внимание, что порядок значителен: крайная левая спецификация
группы, которая соответствует, всегда выигрывает. Таким образом, если мы
поместили !rec.games.go после rec, все статьи из этой группы отсеились.
Nn предлагает отдельные методы удалить устаревшие статьи из баз
данных. Первое, чтобы модифицировать базу данных, развертывая каталоги
групп новостей и отбрасывая входы, чья соответствующая статья является
больше не доступной. Это - заданная по умолчанию операция, полученная
вызовом nnmaster с -E опцией. Приемлемо быстро, если вы не делаете это
через NNTP.
Метод 2 ведет себя точно подобно заданному по умолчанию устареванию,
выполненному mthreads, в котором она только удаляет те входы, которые
относятся к статьям, чье число ниже метки ожидания в файле active. Это
можно допускать, используя -e опцию.
В заключение, третья стратегия должна отбросить всю базу данных и
переоформить все статьи. Это может быть выполнено, давая -E3 к nnmaster.
Список групп, которые устарели дется -F опцией в том же самом режиме
как выше. Однако, если Вы имеете nnmaster, выполняющийся как daemon, Вы
должны уничтожить его (используя -k) прежде, чем может произойти
устаревание, и перезапускать его с первоначальными опциями. Таким образом
соответствующая команда, чтобы выполнить expire на всех группах,
использующих метод 1:
# nnmaster -kF ""
# nnmaster -lrC
Имеются много больше флагов, которые могут использоваться, чтобы
подстроить поведение nn. Если Вы волнуетесь относительно удаления плохих
статей или сборников статей, читайте nnmaster страницу руководства.
- 342 -
Nnmaster полагается на файл, именованный GROUPS, который расположен
в /usr/local/lib/nn. Если он не существует первоначально, он будет создан. Для
каждой newsgroup, он содержит строку, которая начинается с имени группы,
необязательно сопровождаемого временной меткой, и флагами. Вы можете
редактировать эти флаги, чтобы дать возможность некоторому поведению для
рассматриваемой группы, но Вы не можете изменять порядок, в котором
группы появляются. Флаги и их эффекты детализированы в nnmaster странице
руководства, также.
APPENDIX A
Null Кабель Принтера для PLIP
Чтобы сделать Кабель Принтера для использования с PLIP соединением,
Вы нуждаетесь в двух соединителях с 25 штырьками (называемых DB-25) и
некотором кабеле с 11 проводниками. Кабель должен быть длиной 15 метров.
Если Вы рассматриваете коннектор, Вы должны видеть крошечные числа в
основе каждого штырька. Для кабеля Принтера, Вы должны соединить
следующие штырьки обоих разьемов друг с другом:
+-------------------------------+
|D0 2 15 ERROR |
|D1 3 13 SLCT |
|D2 4 12 PAPOUT |
|D3 5 10 ACK |
|D4 6 11 BUSY |
|GROUND 25 25 GROUND |
|ERROR 15 2 D0 |
|SLCT 13 3 D1 |
|PAPOUT 12 4 D2 |
|ACK 10 5 D3 |
|BUSY 11 6 D4 |
+-------------------------------+
Все остающиеся штырьки остаются не связанными. Если кабель
экранирован, экран должен быть соединен с DB-25 металлической оболочкой
на одном конце.
- 343 -
APPENDIX B
Примеры smail Файлов Конфигурации
Этот раздел показывает типовые файлы конфигурации для пункта UUCP в
локальной вычислительной сети. Они основаны на типовых файлах,
включенных в исходное распределение smail-3.1.28. Хотя я делаю слабую
попытку объяснить, как эти файлы работают.
Первый показанный файл - файл программ маршрутизации, который
описывает набор программ маршрутизации для smail. Когда smail должен
послать сообщение к данному адресу, он вручает адрес всем программам
маршрутизации по очереди, пока одна из них не найдет соответствие.
Соответствие здесь означает что программа маршрутизации находит host
адресата в базе данных, буть это файл paths, /etc/hosts, или любой механизм
маршрутизации.
Входы в smail файлах конфигурации всегда начинаются с уникального
имени, идентифицирующего программу маршрутизации, транспорт, или
руководитель. Они сопровождаются списком атрибутов, которые определяют
поведение. Этот список состоит из набора глобальных атрибутов, типа
драйвера, и частных атрибутов, которые понятны только этому
специфическому драйверу.
Атрибуты отделяются запятыми, в то время как наборы глобальных и
частных атрибутов отделяются от друг друга, используя точку с запятой.
В smail, Вы можете определять две программы маршрутизации в файле
программ маршрутизации, обе из которых используют pathalias драйвер. Этот
драйвер ищет hostnames в pathalias базе данных. Он ожидает имя файла в
частном атрибуте:
#
# pathalias database for intra-domain routing
domain paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/domain, # file is /usr/lib/smail/paths/domain
proto=lsearch, # file is unsorted (linear search)
optional, # ignore if the file does not exist
required=vbrew.com, # look up only *.vbrew.com hosts
#
- 344 -
# pathalias database for routing to hosts outside our domain
world paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/world, # file is /usr/lib/smail/paths/world
proto=bsearch, # file is sorted with sort(1)
optional, # ignore if the file does not exist
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
Второй атрибут глобальной переменной, данный в каждом из двух входов
программ маршрутизации выше определяет транспорт, который должен
использоваться, когда программа маршрутизации обрабатывает адрес. В нашем
случае, сообщение будет передано используя uux транспорт. Транспорты
определены в файле transports, который объяснсется ниже.
Вы можете подстраивать, которым транспортом сообщение будет
передаваться, если Вы определяете mathod файл вместо атрибута transports.
Файлы методов обеспечивают отображение целевого hostnames на transports.
Мы не будем иметь дело с ними здесь.
Следующий файл программ маршрутизации определяет программы
маршрутизации для локальной вычислительной сети, которые сделают запрос
библиотеки решающих устройств. На host Internet, однако, Вы хотели бы
использовать программу маршрутизации, которая обрабатывает записи MX.
Вы должны следовательно разкомментировать альтернативную inet программу
маршрутизации, которая использует встроенный драйвер BIND smail.
В среде, которая смешивает UUCP и TCP/IP, Вы можете сталкиваться с
проблемой, что Вы имеете главные ЭВМ в вашем файле /etc/hosts, с которыми
Вы имеете только случайный SLIP или PPP контакт. Обычно, Вы все еще
хотели бы посылать любую почту для них по UUCP. Чтобы предотвращать inet
драйвер главных ЭВМ от соответствия этих главных ЭВМ, Вы должны
поместить их в файл paths/force.
Это - другая база данных pathalias-стилей, она проверяется прежде чем smail
делает запрос решающего устройства.
# A sample /usr/lib/smail/routers file
#
# force - force UUCP delivery to certain hosts, even when
# they are in our /etc/hosts
- 345 -
force:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/force, # file is /usr/lib/smail/paths/force
optional, # ignore if the file does not exist
proto=lsearch, # file is unsorted (linear search)
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
# inet addrs - match domain literals containing literal
# IP addresses, such as in janet@[191.72.2.1]
inet addrs:
driver=gethostbyaddr, # driver to match IP domain literals
transport=smtp; # deliver using SMTP over TCP/IP
fail if error, # fail if address is malformed
check for local, # deliver directly if host is ourself
# inet hosts - match hostnames with gethostbyname(3N)
# Comment this out if you wish to use the BIND version instead.
inet hosts:
driver=gethostbyname, # match hosts with the library function
transport=smtp; # use default SMTP
-required, # no required domains
-domain, # no defined domain suffixes
-only local domain, # don't restrict to defined domains
# inet hosts - alternate version using BIND to access the DNS
#inet hosts:
# driver=bind, # use built-in BIND driver
# transport=smtp; # use TCP/IP SMTP for delivery
#
# defnames, # use standard domain searching
# defer no connect, # try again if the nameserver is down
# -local mx okay, # fail (don't pass through) an MX
# # to the local host
#
# pathalias database for intra-domain routing
domain paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/domain, # file is /usr/lib/smail/paths/domain
- 346 -
proto=lsearch, # file is unsorted (linear search)
optional, # ignore if the file does not exist
required=vbrew.com, # look up only *.vbrew.com hosts
#
# pathalias database for routing to hosts outside our domain
world paths:
driver=pathalias, # look up host in a paths file
transport=uux; # if matched, deliver over UUCP
file=paths/world, # file is /usr/lib/smail/paths/world
proto=bsearch, # file is sorted with sort(1)
optional, # ignore if the file does not exist
-required, # no required domains
domain=uucp, # strip ending ".uucp" before searching
# smart host - a partically specified smarthost director
# If the smart path attribute is not defined in
# /usr/lib/smail/config, this router is ignored.
# The transport attribute is overridden by the global
# smart transport variable
smart host:
driver=smarthost, # special-case driver
transport=uux; # by default deliver over UUCP
-path, # use smart path config file variable
Обработка почты для локальных адресов конфигурирована в файле
directors. Это сделано точно так же как файл программ маршрутизации, со
списком входов, которые определяют руководителя каждой. Руководители не
посылают сообщение, они просто выполняют всю переадресацию, которая
является возможной, например через aliases, пересылку почты, и т.п..
При поставке почты к локальному адресу, типа janet, smail передает имя usr
всем directors по очереди. Если director соответствует, это или определяет
транспорт, которым сообщение должно быть передано (например, к mailbox
файлу пользователя), или генерирует новый адрес (например, после
специальной оценки).
Из-за включаемых проблем защиты, directors обычно делает множество
проверок того, могут ли файлы которые они используют быть
скомпрометированы или нет. Адреса, полученные несколько сомнительным
способом (например от world -перезаписываемый файл aliases) помечены как
небезопасные. Некоторые транспортные драйверы отвергнут такие адреса,
- 347 -
например транспорт, который передает сообщение файлу.
Кроме этого, smail также связывает пользователя с каждым адресом. Любая
запись или операции чтения выполняется как пользователь. Для получения в,
скажем mailbox janet, адрес конечно связан с janet.
Другие адреса, типа тех что получены из файла aliases, имеют других
пользователей, связанных с ними, например, пользователь nobody.
Для подробностей этих возможностей, пожалуйста обратитесь к smail
manpage.
# A sample /usr/lib/smail/directors file
# aliasinclude - expand ":include:filename" addresses produced
# by alias files
aliasinclude:
driver=aliasinclude, # use this special-case driver
nobody; # access file as nobody user if unsecure
copysecure, # get permissions from alias director
copyowners, # get owners from alias director
# forwardinclude - expand ":include:filename" addrs produced
# by forward files
forwardinclude:
driver=forwardinclude, # use this special-case driver
nobody; # access file as nobody user if unsecure
checkpath, # check path accessibility
copysecure, # get perms from forwarding director
copyowners, # get owners from forwarding director
# aliases - search for alias expansions stored in a database
aliases:
driver=aliasfile, # general-purpose aliasing director
-nobody, # all addresses are associated
# with nobody by default anyway sender okay,
# don't remove sender from expansions
owner=owner-$user; # problems go to an owner address
file=/usr/lib/aliases, # default: sendmail compatible
modemask=002, # should not be globally writable
optional, # ignore if file does not exist
proto=lsearch, # unsorted ASCII file
# dotforward - expand .forward files in user home directories
dotforward:
- 348 -
driver=forwardfile, # general-purpose forwarding director
owner=real-$user, # problems go to the user's mailbox
nobody, # use nobody user, if unsecure
sender okay; # sender never removed from expansion
file=~/.forward, # .forward file in home directories
checkowner, # the user can own this file
owners=root, # or root can own the file
modemask=002, # it should not be globally writable
caution=0-10:uucp:daemon,
# don't run things as root or daemons
# be extra careful of remotely accessible home directories
unsecure="~ftp:~uucp:~nuucp:/tmp:/usr/tmp",
# forwardto - expand a "Forward to " line at the top of
# the user's mailbox file
forwardto:
driver=forwardfile,
owner=Postmaster, # errors go to Postmaster
nobody, # use nobody user, if unsecure
sender okay; # don't remove sender from expansion
file=/var/spool/mail/${lc:user},
# location of user's mailbox forwardto,
# enable "Forward to " check
checkowner, # the user can own this file
owners=root, # or root can own the file
modemask=0002, # under System V, group mail can write
caution=0-10:uucp:daemon, # don't run things as root or daemons
# user - match users on the
# local host with delivery to their mailboxes user:
driver=user; # driver to match usernames
transport=local, # local transport goes to mailboxes
# real user - match usernames when prefixed with the string "real-"
real user:
driver=user; # driver to match usernames
transport=local, # local transport goes to mailboxes
prefix="real-", # for example, match real-root
# lists - expand mailing lists stored below /usr/lib/smail/lists
lists: driver=forwardfile,
caution, # flag all addresses with caution
- 349 -
nobody, # and then associate the nobody user
sender okay, # do NOT remove the sender
owner=owner-$user; # the list owner
# map the name of the mailing list to lower case
file=lists/${lc:user},
После успешно маршрутизации или направления сообщения, smail вручает
сообщение транспорту, заданному программой маршрутизации или director,
который соответствовал(согласовал) адресу. Эти transports определен в файле
transports. Снова, транспорт определен набором глобальных и частных опций.
Наиболее важная опция, определенная каждым входом - драйвер, который
обрабатывает транспорт, например драйвер трубопровода, который вызывает
команду, заданную в cmd атрибуте. Кроме этого, имеется число глобальных
атрибутов, которые транспорт может использовать, которые выполняют
различные преобразования заголовка сообщения, и возможно тела сообщения.
# A sample /usr/lib/smail/transports file
# local - deliver mail to local users
local: driver=appendfile, # append message to a file
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
file=/var/spool/mail/${lc:user},
# location of mailbox files group=mail,
# group to own file for System V
mode=0660, # group mail can access
suffix="\n", # append an extra newline
# pipe - deliver mail to shell commands
pipe: driver=pipe, # pipe message to another program
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
cmd="/bin/sh -c $user", # send address to the Bourne Shell
parent env, # environment info from parent addr
pipe as user, # use user-id associated with address
ignore status, # ignore a non-zero exit status
- 350 -
ignore write errors, # ignore write errors, i.e., broken pipe
umask=0022, # umask for child process
-log output, # do not log stdout/stderr
# file - deliver mail to files
file: driver=appendfile,
return path, # include a Return-Path: field
from, # supply a From envelope line
unix from hack, # insert > before From in body
local; # use local forms for delivery
file=$user, # file is taken from address
append as user, # use user-id associated with address
expand user, # expand ~ and $ within address
suffix="\n", # append an extra newline
mode=0600, # set permissions to 600
# uux - deliver to the rmail program on a remote UUCP site
uux: driver=pipe,
uucp, # use UUCP-style addressing forms
from, # supply a From envelope line
max addrs=5, # at most 5 addresses per invocation
max chars=200; # at most 200 chars of addresses
cmd="/usr/bin/uux - -r -a$sender -g$grade $host!rmail $(($user)$)",
pipe as sender,
# have uucp logs contain caller
log output, # save error output for bounce messages
# defer child errors, # retry if uux returns an error
# demand - deliver to a remote rmail program,
# polling immediately demand: driver=pipe,
uucp, # use UUCP-style addressing forms
from, # supply a From envelope line
max addrs=5, # at most 5 addresses per invocation
max chars=200; # at most 200 chars of addresses
cmd="/usr/bin/uux - -a$sender -g$grade $host!rmail $(($user)$)",
pipe as sender,
# have uucp logs contain caller
log output, # save error output for bounce messages
# defer child errors, # retry if uux returns an error
# hbsmtp - half-baked BSMTP. The output files must
- 351 -
# be processed regularly and sent out via UUCP.
hbsmtp: driver=appendfile,
inet, # use RFC 822-addressing
hbsmtp, # batched SMTP w/o HELO and QUIT
-max addrs, -max chars; # no limit on number of addresses
file="/var/spool/smail/hbsmtp/$host",
user=root, # file is owned by root
mode=0600, # only read-/writeable by root.
# smtp - deliver using SMTP over TCP/IP
smtp: driver=tcpsmtp,
inet,
-max addrs, -max chars; # no limit on number of addresses
short timeout=5m, # timeout for short operations
long timeout=2h, # timeout for longer SMTP operations
service=smtp, # connect to this service port
# For internet use: uncomment the below 4 lines
# use bind, # resolve MX and multiple A records
# defnames, # use standard domain searching
# defer no connect, # try again if the nameserver is down
# -local mx okay, # fail an MX to the local host
APPENDIX C
Общая Публичная Лицензия GNU
Имеется Общая Лицензия GNU (GPL или copy-left), под которой Linux
запатентован. Она не воспроизведена здесь. Большая часть ядра Linux -
copyright (C) 1993 Linus Torvalds, и другое программное обеспечение
обеспечены авторским правом их авторами. Таким образом, Linux обеспечен
авторским правом, однако, Вы можете перераспределять его (копировать) в
соответствии с GPL (GNU GENERAL PUBLIC LICENSE).