Linux documentation Project (CS) / Příručka správce sítě
Previous Content Next Up

 

18. Popis protokolu NNTP

18.1 Úvod

    Z důvodu existence různých přenosových protokolů poskytuje protokol NNTP zcela odlišný způsob výměny news, než jaký používá systém C News. NNTP znamená "Network News Transfer Protocol" (Protokol pro přenos Síťových news) a není vlastním softwarovým balíkem, nýbrž internetovým standardem. Je založen na "proudově orientovanémi_ spojení - většinou prostřednictvím protokolu TCP - mezi klientem na libovolném místě v síti a serverem, který uchovává Síťové news ve svém diskovém prostoru. Toto proudové spojení umožňuje klientovi a serveru interaktivní přenos článků s takřka nulovým zpožděním, čímž se daří udržovat nízký počet duplicitních článků. Společně s vysokými přenosovými rychlostmi Internetu se dosahuje přenosu news, který daleko překonává původní sítě UUCP. Zatímco před dvěma roky bylo zcela běžné, když článek dorazil do posledního uzlu Usenetu za dva týdny, podařilo se nyní tuto dobu zkrátit na méně než dva dny a v samotném Internetu je to často otázka několika minut.

    K získávání, posílání a předávání článku slouží klientům různé příkazy. Rozdíl mezi odesláním a předáním je ten, že druhá metoda se může týkat článků s neúplnými hlavičkovými informacemi. Nalezení článku mohou využívat klienti pro přenos news stejně jako programy pro čtení news. Tím se stává protokol NNTP vynikajícím nástrojem, který umožňuje mnoha klientům v lokální síti přístup k news, přičemž se vyhnou zkomoleninám, k nimž dochází při použití NFS.

    Protokol NNTP umožňuje také aktivní a pasivní způsob přenosu news, kterému se hovorově říká "pushingi_ (tlačení) a "pullingi_ (tažení). Tlačení používá v podstatě stejný způsob, jako protokol C News ihave/sendme. Klient nabízí serveru články prostřednictvím příkazu IHAVE<varmsig> a server mu vrátí odpověď, z níž vyplývá, zda již daný článek má, nebo ho požaduje. Pokud o něj má zájem, klient mu článek pošle a ukončí ho tečkou na samostatném řádku.

Tlačení news má jednu nevýhodu v tom, že poměrně výrazně zatěžuje systém serveru, protože ten musí kvůli každému článku prohledávat databázi historie.

Opačnou technikou je tažení news, kdy klient požaduje seznam všech (dostupných) článků diskusní skupiny, které dorazily po specifikovaném datu. Takovýto dotaz předává pomocí příkazu NEWNEWS. Ze získaného seznamu id-zpráv si klient vybere ty články, které ještě nevlastní a postupně o ně požádá server příkazem ARTICLE.

    Problémem tažení news je, že server potřebuje mít těsnou kontrolu nad skupinami a distribucemi, které povoluje klientovi požadovat. Musí se například ujistit, že nebude neautorizovaným klientům poslán tajný materiál z lokální diskusní skupiny.

    Programy pro čtení news také disponují několika pohodlnými příkazy, které jim dovolují odděleně získání hlaviček a těl článků, případně i jednotlivých řádků článků. Takto je možné udržovat všechny news na centrálním hostiteli, k němuž mohou všichni uživatelé lokální sítě přistupovat prostřednictvím klientských programů pro čtení a posílání news, které pracující na bázi protokolu NNTP. Jedná se o alternativní řešení pro exportování adresářů news prostřednictvím systému NFS, což bylo popsáno v kapitole 17.

    Celkový problém protokolu NNTP tkví v tom, že umožňuje informovanému člověku vložit do proudu news články s falešnou specifikací odesílatele. Tomu se říká falšování news (news faking). Rozšíření protokolu NNTP umožňuje u určitých příkazů vyžadovat autentifikaci uživatele.

    V současné době existuje několik balíků protokolu NNTP. Jedním z nejpoužívanějších je démon NNTP, který je referenční implementací tohoto protokolu. Jeho původními autory jsou Stan Barber a Phil Lapsley, kteří chtěli jeho prostřednictvím ilustrovat detaily RFC 977. Nejaktuálnější verze má číslo nntpd-1.5.11, a tu si nyní popíšeme. Můžete si buď sehnat zdrojové soubory a sami si je přeložit, nebo použít program nntpd z balíku binárních souborů net-std od Freda van Kempena. Z důvodu různých konfiguračních nastavení, která jsou specifická pro jednotlivé systémy, nejsou poskytovány binární soubory balíku nntpd.

    Balík nntpd tvoří server a dva klienti pro tlačení a tažení news a najdete zde také náhradu programu inews. Vše je určeno pro prostředí Bnews, ale po několika úpravách bude fungovat i v prostředí C News. Pokud však plánujete používat protokol NNTP i k jiným účelům, než pro zprostředkování přístupu k vašemu serveru news, není pro vás probíraná implementace tou pravou volbou. Proto budeme probírat pouze démona NNTP z balíku nntpd a vynecháme popis klientských programů.

K dispozici je také balík nazvaný "InterNet Newsir, zkráceně INN, jehož autorem je Rich Salz.

    Umožňuje přenos jak NNTP, tak i UUCP-news a je vhodnější pro velké systémy news. Pro přenos news prostřednictvím protokolu NNTP je rozhodně lepší než nntpd. Balík INN je v současné době ve verzi inn-1.4sec. Existuje také sada nástrojů pro sestavení INN na linuxovém počítači. Jejím autorem je Arjan de Vet a je dostupná na serveru sunsite.unc.edu v adresáři system/Mail. Při konfiguraci balíku INN se řiďte dokumentací, která je dodávána společně se zdrojem, případně INN FAQ, které jsou pravidelně posílány do konference news.software.b.

18.2 Instalace serveru NNTP

    Server NNTP se nazývá nntpd a lze ho zkompilovat dvěma způsoby, v závislosti na očekávaném zatížení systému news. Kvůli implicitním hodnotám specifickým pro některá místa, jež jsou zakódovány do spustitelného souboru, nejsou k dispozici žádné zkompilované verze.

Veškerou konfiguraci provádí makro, které je definováno v souboru common/conf.h.

    Server nntpd může být nakonfigurován buď jako samostatný server, který je spouštěn při zavádění systému z rc.inet2, nebo jako démon řízený inetd. Ve druhém případě je třeba mít v souboru /etc/inetd.conf následující záznam:

nntp stream tcp nowait news /usr/etc/in.nntpd nntpd

    Pokud konfigurujete nntpd jako samostatný server, ujistěte se, že je každý podobný řádek řádně okomentován. V každém případě se musíte přesvědčit, že v souboru /etc/services nechybí následující řádek:

nntp 119/tcp readnews untp # Network News Transfer Protocol Aby bylo možné ukládat příchozí články apod., potřebuje mít server nntpd v adresáři spool také adresář .tmp. Vytvoříte ho následovně:

# mkdir /var/spool/news/.tmp

# chown news.news /var/spool/news/.tmp

18.3 Omezení přístupu k NNTP

    Přístup ke zdrojům NNTP je řízen souborem nntp_access, který je uložen v adresáři /usr/lib/news. Řádky v tomto souboru specifikují přístupová práva přidělená vzdáleným hostitelům. Každý řádek má následující formát:

site read|xfer|both|no post|no [!exceptgroup]

    Jakmile se klient připojí na NNTP-port, pokusí se server nntpd pomocí zpětného výhledávání podle IP-adresy získat plně kvalifikovaný název domény. Hostitelský název klienta a jeho IP-adresa jsou porovnány s polem site každého záznamu v takovém pořadí, v jakém jsou uvedeny v souboru. Shoda může být buď částečná, nebo úplná. V případě úplné shody ji použije. V případě jen částečné shody ji použije jen pokud se nenajde žádná další částečná shoda. Pole site je možné specifikovat jedním z následujících způsobů:

Záznamy s obecnější specifikací adres je dobré uvést na začátku souboru, protože případné shody budou pozdějšími přesnějšími shodami potlačeny.

    Druhé a třetí pole popisují přístupová práva přidělená danému klientovi. Druhé pole uvádí přístupová práva pro získávání news metodou pull (read) a předávání news metodou push (xfer). Hodnota both povoluje oba přístupy, zatímco hodnota no přístup úplně zakazuje. Třetí pole uděluje klientovi právo předávat články, což znamená doručovat články s neúplnými hlavičkovými informacemi, které pak doplní software news. Pokud druhé pole obsahuje hodnotu no, je třetí pole ignorováno.

Čtvrté pole je volitelné a obsahuje čárkami oddělený seznam skupin, k nimž má klient zakázaný přístup.

Následuje ukázkový soubor nntp_access:

#

# všichni budou přebírat news, ale ne číst ani posílat

default xfer no

#

# hostitel public.vbrew.com poskytuje veřejný přístup po modemu

# povolíme čtení a posílání do všech skupin kromě lokálních

public.vbrew.com read post !local

#

# ostatní počítače pivovaru mohou číst i posílat

*.vbrew.com read post

18.4 Autorizace NNTP

    Při realizaci přístupových symbolů typu xfer nebo read v souboru nntp_access vyžaduje server nntpd po klientovi autorizaci příslušných operací. Když například specifikujete přístupové právo Xfer nebo XFER, nepovolí server nntpd klientovi přenos článku do vašeho systému, pokud neprojde autentifikací.

    Proces autentifikace je implementován prostřednictvím nového příkazu protokolu NNTP, který se nazývá AUTHINFO. Za pomoci tohoto příkazu předá klient serveru NNTP uživatelské jméno a heslo. Server nntpd je porovná s databází /etc/passwd a ověří, že příslušný uživatel patří do skupiny nntp.

18.5 Interakce serveru nntpd a systému C News

    Po přijetí článku ho musí server nntpd doručit do subsystému news. V závislosti na tom, zda jej obdržel jako výsledek příkazu IHAVE nebo POST, je článek předán systému rnews nebo inews. Místo spouštění programu rnews jej také můžete (v době překladu) nastavit tak, aby zpracovával příchozí články do dávky a výsledné dávky pak posílal do souboru /var/spool/news/in.coming, kde si je při příýtím dotazu vyzvedne program relaynews.

    Aby mohl řádně používat protokol ihave/sendme, musí mít server nntpd přístup k souboru history. V době překladu se proto musíte ujistit, že máte správně nastavenu příslušnou cestu. Také je třeba se přesvědčit, že se systém C News a nntpd dohodli na formátu vašeho souboru history. Systém C News používá při přístupu k němu haýovací funkce dbm, která má poměrně hodně různých a mírně odlišných implementací. Pokud by byl systém C News slinkován s jinou knihovnou dbm, než kterou máte ve vaší knihovně libc, musíte s touto knihovnou slinkovat také server nntpd.

    Typickým symptomem nesourodosti databázového formátu serveru nntpd a systému C News jsou chybové zprávy v systémovém log-souboru, že server nntpd nemohl tuto databázi otevřít nebo prostřednictvím protokolu NNTP obdržel duplicitní články. Vhodným testem je vzít článek z adresáře spool, navázat telnetové spojení se serverem nntpd a nabídnout ho serveru nntpd, jak je demonstrováno v níže uvedeném příkladu (váš vstup je označen takto). Samozřejmě, že musíte nahradit řetězec <msg@id> řetězcem id zprávy článku, který chcete předat serveru nntpd.

$ telnet localhost nntp

Trying 127.0.0.1...

Connected to localhost

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 <msg@id>

435 Got it.

QUIT

    Tento rozhovor ukazuje příslušnou reakci serveru nntpd; zpráva "Got it" říká, že již příslušný článek má. Pokud místo toho obdržíte zprávu "335 Ok", pak vyhledávání v souboru history z nějakého důvodu selhalo. Ukončete rozhovor stiskem kombinace kláves Ctrl+D.

Co se stalo, zjistíte na základě systémového log-souboru; server nntpd zapisuje všechny druhy zpráv do souboru syslog. Nekompatibilní knihovnu dbm zpravidla zjistíte podle zprávy se stížností na selhání programu dbminit.

Previous Content Next Up