Ръководство за инсталиране и работа на Sendmail (част 2)

2. НОРМАЛНА РАБОТА2.1. Системен протоколСистемният протокол се поддържа от програматаsyslogd(8). Всички съобщения отsendmailсе регистрират с LOG_MAIL 1 .2.1.1. ФорматВсеки ред в системния журнал се състои от клеймо за време, името на машината, която го е създала (за регистриране от множество машини през LAN), думата "sendmail:" и самото съобщение 2 . Повечето съобщения са поредица от двойкииме=стойност.

За всеки опит за доставка на съобщение се записва още един ред (така че всяко съобщение може да има няколко такива реда, например ако е забавено или ако има няколко получателя). Полетата в този ред са:

да сеСписък с получатели за този имейл, разделени със запетаи.
ctladdr„Контролен потребител“, т.е. името на потребителя, чиито параметри използваме при доставка.
забавянеОбщото време на забавяне между получаването и доставката на съобщение.
xdelayВремето, необходимо за опита за доставка (обикновено показва скоростта на връзката).
пощенска програмаИмето на изпращача, използван за доставка до този получател.
релеИме на хоста, който е приел съобщението за този получател (или е отказал доставката).
dsnПодобрен код за грешка (RFC 2034), ако е наличен
статистикаСтатус на доставка.

Не всички от тези полета присъстват за всички съобщения; например, няма поле за предаване за локални съобщения.2.1.2. НиваАко имате инсталиранsyslogd(8) или еквивалентен, можете да влезете. На разположениеголямо количество информация, която може да бъде записана. Протоколът е организиран като последователност от нива. На най-ниското ниво се регистрират само най-странните ситуации. На най-високо ниво дори най-обикновените и безинтересни събития се записват за потомството. По конвенция нивата на регистриране под десет обикновено се считат за "полезни"; нивата на регистриране над 64 са запазени за целите на отстраняване на грешки. Нива от 11 до 64 са запазени за подробна информация, която някои възли може да искат.

Пълно описание на нивата на регистриране е дадено в раздел 4.6.2.2. Нулиране на състояниетоМожете да помолитеsendmailда нулира дневника на отворения файл и кеша за връзка, като му изпратите сигнал SIGUSR1. Резултатите се регистрират в ред LOG_DEBUG.2.3. Опашка за пощаПонякогаsendmailне може да обслужи съобщение веднага. Например, той може да бъде претоварен или дори да "падне", последствието от което ще бъде отказът от връзки. След това изпращащият хост ще трябва да съхрани съобщението в своята пощенска опашка и да се опита да го достави по-късно.

При нормални обстоятелства опашката за поща ще се обработва прозрачно. Въпреки това може да откриете, че понякога е необходимо да се намесите с ръцете си. Например, ако основният хост е офлайн за дълго време, опашката може да се задръсти. Въпреки чеsendmailтрябва да възстанови всичко добре, когато хостът се стартира, междувременно може да откриете, че работата му е неприемливо бавна.2.3.1. Отпечатване на опашкаСъдържанието на опашка може да бъде отпечатано с помощта на командатаmailq(или чрез указване на флагаsendmail-bp): mailq Това ще доведе до списък с идентификаторите на съобщенията на съобщенията, които в момента са в опашката, размерите на съобщенията, датата, на която съобщението е влязло в опашката иизпращач с получатели.2.3.2. Ускоряване на опашкатаSendmailтрябва да обработва опашката автоматично след определен интервал. Когато използвате множество опашки, ще бъде стартиран отделен процес за обработка на всяка от опашките, освен ако обработката на опашка не е инициирана от потребител с подробен флаг. Алгоритъмът е следният: прочетете и сортирайте опашката и след това обработете всички съобщения по ред. Когато се опитва да започне работа,sendmailпърво проверява дали е блокиран. Ако има заключване, то игнорира тази работа.

Не се прави опит да се гарантира, че съществува само един манипулатор на опашка във всеки един момент, така че няма гаранция, че работата няма да се извършва завинаги (обаче,sendmailима някои евристики, за да се опита да прекрати работа, която отнема абсурдно много време; технологично това нарушава изискванията на RFC 821, но е одобрено в RFC 1123). Според алгоритъма за блокиране едно задание не може да замрази цялата опашка. Въпреки това, недружелюбен приемащ хост или получаваща програма, която никога не връща нищо, може да прихване голям брой процеси във вашата система. За съжаление, няма общо решение на подобни проблеми.

В някои случаи може да забележите, че основният хост е паднал за втори ден и имате невероятно голяма опашка. В резултат на товаsendmailще прекарва по-голямата част от времето си в сортиране на тази опашка. Тази ситуация може да бъде коригирана, ако преместите опашката на някакво временно място и създадете нова опашка. Старата опашка може да бъде обработена по-късно, когато нарушилият хост отново започне да работи.

За да направите това, е напълно възможно да прехвърлите цялата директорияопашки: cd /var/spool

mv mqueue omqueue; mkdir mqueue; chmod 700 mqueue След това трябва да убиете работещия демон (защото той все още ще продължи да обработва старата директория на опашка) и да създадете нов демон.

За да обработите старата опашка, изпълнете следната команда: /usr/sbin/sendmail -oQ /var/spool/omqueue -q Флагът-oQуказва алтернативна директория на опашката, а флагът-qму казва просто да обработва всяко съобщение в опашката. Ако имате склонност към воайорство, можете да използвате флага-v, за да видите какво ще се случи.

Когато най-накрая няма останали съобщения в опашката, можете да изтриете тази директория: rmdir /var/spool/omqueue2.4. Информация за връзката на дискаЗа всяка отдалечена система, към която е била свързана,sendmailсъхранява голямо количество информация в паметта. Вече е възможно да съхранявате част от тази информация на диск с помощта на опциятаHostStatusDirectory, която може да се използва от множествоsendmailпроцеси едновременно. Това позволява пощата да бъде поставена на опашка незабавно или пропусната, докато обработва опашката, ако наскоро е имало неуспешна връзка с отдалечена машина.

Освен това, активирането на опциятаSingleThreadDeliveryще има допълнителен ефект от доставянето на поща до нейното местоназначение в една нишка. Това може да бъде много полезно, ако отдалечената машина работи със SMTP сървър, който е лесен за зареждане или може да обработва само една връзка наведнъж. Прилага се завсичкихостове, така че настройването му, тъй като вашият хост използва една машина за доставка на поща, изпълнявайки допълнителен софтуер, който увеличава натоварването на машината, може да причини забавяне.доставка на поща до други хостове. Ако тази опция е зададена, тогава може да искате да зададете опциятаMinQueueAge, така че вашата опашка да се обработва достатъчно често; в резултат на това пропуснатите задачи, защото друг процес наsendmailразговаряше със същия хост, скоро ще бъдат изпробвани отново, вместо да бъдат отлагани за дълго време.

За да се оптимизират изчакванията, информацията, съхранена на диска, се третира по същия начин като информацията, съхранена в паметта. По подразбиране информацията за грешка на хоста е валидна за 30 минути. Тази стойност може да се промени с опциятаTimeout.hoststatus.

Информацията за дисковата връзка се третира по същия начин по отношение на изчакванията, както е в паметта. По подразбиране информацията за грешка на хоста се счита за валидна за 30 минути. Тази стойност може да се промени с опциятаTimeout.hoststatus.

Ако операционната система не поддържа превключването на услугата (напр. SunOS 4.x, HP-UX, BSD), тогаваsendmailще използва своята фиктивна реализация. ОпциятаServiceSwitchFileуказва името на файл, съдържащ дефиниции на услуги. Всеки ред съдържа името на услугата и възможните реализации на тази услуга. Например файлът: hosts dns files nis aliases files nis ще поиска отsendmailпърво да потърси имена на хостове в системата за имена на домейни. Ако исканото име на хост не бъде намерено, то ще опита локални файлове, ако не бъде намерено там, ще опита NIS. По същия начин, когато търси псевдоними, първо ще опита локални файлове и след това NIS.

Втората форма се обработва от библиотекатаndbm(3) 5 или библиотеката Berkley DB. Този формуляр е в/etc/mail/aliases.db(ако се използва NEWDB) или/etc/mail/aliases.dirи/etc/mail/aliases.pag(ако използвате NDBM). Това е точно формата, коятоsendmailизползва, когато дефинира псевдоними. Тази технология се използва за повишаване на производителността.

Контролът на реда на търсене се задава директно от сервизния ключ. Като такова, възникването на O AliasFile=switch:aliases винаги се добавя като първо появяване на псевдоними; също така първото име на файл с псевдоним без клас (напр. без "nis:" в началото) ще се използва като име на файл за записа "files" в селектора на псевдоними. Например, ако конфигурацията съдържа O AliasFile=/etc/mail/aliases и превключвателят на услугата съдържа псевдоними nis файлове nisplus, тогава псевдонимите ще бъдат търсени първо в NIS базата данни, след това в /etc/mail/aliases и след това в NIS+ базата данни.

Можете също така да използвате файлове с псевдоними, базирани на NIS. Например дефиниция: O AliasFile=/etc/mail/aliases

Ако сте указали множество бази данни с псевдоними, флагът-biще изгради отново всички типове бази данни, които разбира (например може да изгради отново NDBM бази данни, но не и NIS бази данни).2.6.2. Потенциални проблемиИма няколко проблема, които могат да възникнат с базата данни с псевдоними. Всичко това произтича от факта, че процесътsendmailможе да започне да използва DBM версията на псевдоними, когато е само частично изграден. Това може да се случи при две условия: един процес използва базата данни, докато друг я възстановява, или процесът, извършващ повторното изграждане на базата данни, умира (защото е бил убит или системата внезапно се е сринала), преди възстановяването да е завършило.

unix-wizards-request: eric@ucbarpa ще накара "eric@ucbarpa" да получи грешки, които ще се случат, когато някой изпрати до unix-wizards и попада под записа "nosuchuser" в списъка.

Заглавката Errors-To: е официално премахната и ще бъде премахната в бъдещи версии.2.9.2. Apparently-To:RFC 822 изисква всяко съобщение да има поне едно поле за получател (низът To:, Cc: или Bcc:). Ако пристигне съобщение, без да е посочен получател в съобщението,sendmailще добави заглавка въз основа на опцията "NoRecipientAction". Едно възможно действие би било да добавите низа "Apparently-To:" към заглавката за всеки получател, за който знае.

Заглавката Apparently-To: е нестандартна и отхвърлена.2.9.3. PrecedenceЗаглавката Precedence: може да се използва като груб контрол на приоритета на съобщението. Той пренарежда опашката и може да бъде конфигуриран да променя стойностите на изчакване за съобщение. Приоритетът на съобщението също контролира как се обработва известието за статус на доставка (DSN) за това съобщение.2.10. IDENTПоддръжка на протоколSendmailподдържа >6. Изявления за сигурност

На информацията, върната от този протокол, може да се вярва толкова, колкото можете да се доверите на хоста ИЛИ на организацията, в която се намира хостът. Например, компютър в открита лаборатория има малко, ако изобщо има, за да попречи на потребителя да каже на този протокол да върне всеки идентификатор, който иска. По същия начин, ако даден хост е бил компрометиран, информацията, която връща, може да е напълно грешна и неправилна.

Използването на информация, получена от този протокол за нещо различно от удостоверяване, е силно обезкуражено. По-специално, използването на протокола за самоличност за вземане на решения за достъп - и двете като основен метод (т.е.единична проверка) и като допълнение към други методи може да доведе до отслабване на нормалната сигурност на хоста.

В някои случаи вашата система може да не работи правилно с IDENT поддръжка поради грешка в изпълнението на TCP/IP. Симптомите биха били: За някои хостове SMTP връзката ще се затвори почти веднага. Ако случаят наистина е такъв или не искате да използвате IDENT, трябва да зададете IDENT timeout на нула; това ще деактивира протокола IDENT.

1. В допълнение към Ultrix, който не поддържа различни средства в syslog. [обратно]

2. Този формат може да е малко по-различен, ако вашият доставчик е променил синтаксиса. [обратно]

3. Това е нормалната стойност на опцията HostStatusDirectory; разбира се, ако решите, той може да сочи към всяко място във вашата файлова система. [обратно]

4. Всъщност всяка пощенска програма, която има зададен флаг за поща "A", ще позволи псевдоним; това обикновено е ограничено до локалния имейл. [обратно]