Network File System a RPC

Roman Martinek (xmartin9@fi.muni.cz)


Obsah


RPC (Remote procedure calls)

RPC je síťový systém umožňující jednoduchýchým způsobem spouštět procedury na vzdálených strojích. Je založeno na komunikaci klient-server.

rpc.portmap (Port mapper)

rpc.portmap zajišťuje svázání jednotlivých služeb rpc s příslušnými tcp nebo udp porty. Protože jsou porty pro rpc služby alokovány dynamicky, neexistuje jednoznačná korespondence mezi službou a tcp nebo udp portem, na kterém daná služba běží. RPC klient se tedy před zahájením každé komunikace spojí se službou rpc.portmap na daném serveru a od ní získá na základě čísla serveru informaci o portu, na kterém je tento server aktuálně dostupný.

Ke správné funkci RPC služeb je tedy potřeba, aby se jako první spustila služba rpc.portmap a teprve potom ostatní služby.

rpcinfo

rpcinfo je služba umožňující získat informace o rpc službách běžících na daném stroji.

rpcinfo -p host_name

vrací informace o službách běžících na stroji host_name

rpcinfo -n port_num -t host_name program_name

vrací informace o službě běžící na stroji host_name na tcp portu číslo port_num

Příklad výpisu příkazu rpcinfo -p localhost

    program verz proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  32768  status
    100024    1   tcp  32768  status

NFS (Network file system)

NFS je nejznámější služba používající RPC. Tato služba je postavena na protokolu Sun Network Filesystem (NFS). Tato služba umožňuje uživatelům přistupovat k souborům na vzdálených strojích stejným způsobem jako k lokálním souborům. V dnešní době se používají dvě verze. NFS verze 2, která se používá již delší dobu a je součástí mnoha systémů a NFS verze 3, která přichází s některými novými vlastnostmi, jako proměnlivá velikost file handle a lepší správa chyb.

Jak to tedy funguje v Linuxu:

K tomu, aby Linux umožnil sdílení dat, používá kombinaci podpory v jádře a několika démonů. Proto je důležité mít podporu nfs zakompilovánu v jádře systému. NFS používá systém RPC Remote procedure calls ke směrování žádostí mezi klienty a servery. To znamená, že musíme mít zprovozněnou službu rpc.portmap na všech úrovních běhu systému, kde chceme používat NFS. Mimo rpc.portmap používá NFS následující démony:

Pro zajištění základní funkčnosti NFS nejsou nezbytné všechny tyto programy. Minimální instalace musí obsahovat minimálně rpb.mountd, rpc.nfsd a rpc.portmap.

NFS verze 2 používá pro doručování zpráv a požadavků mezi klienty a servery protokol UDP (NFS verze 3 umožňuje použití UDP nebo TCP nad IP). Použití UDP minimalizuje zatížení sítě, ale vyžaduje používání tzv. cookies. Jsou to náhodně vygenerovaná čísla pro každý připojený svazek jedno, které je po autorizaci sděleno klientovi. Každý požadavek klienta na tento svazek potom musí obsahovat správnou hodnotu cookie shodnou s hodnotou uloženou na serveru.

NFS autentizace se provádí v okamžiku přijetí požadavku na připojení svazku (mount). NFS server používá soubory /etc/hosts.allow, /etc/hosts.deny a /etc/export.Přístupová práva se v NFS vztahují na stroje a nikoliv na uživatele.

Konfigurace serveru

Konfigurace na straně serveru není složitá. Všechny informace potřebné pro NFS ohledně svazků, které mohou být exportovány, a jejich práv jsou uloženy v souboru /etc/exports. Informace z tohoto souboru načítá program exportfs, který je předává démonům rpc.mountd a rpc.nfsd.

Příkaz exportfs nám umožňuje dynamicky přidávat a odebírat svazky nebo adresáře, které se mají sdílet přes nfs, bez nutnosti restartování NFS služeb. Příkaz exportfs poznamenívá tyto informace do souboru /var/lib/nfs/xtab. Všechny změny se promítnou do fungování systému okamžitě, protože služby NFS čtou soubor /var/lib/nfs/xtab při každém požadavku o přístu k souboru nebo svazku.

Příkaz exportfs má nasledující volby:

Jesliže spustíme příkaz exportfs bez parametrů, obdržíme seznam aktuálně exportovaných adresářů.

Soubor /etc/exports

Soubor /etc/exports slouží k nastavení adresářů, které budou exportovány a strojů, které mohou k těmto adresářům přistupovat.

Pro tento soubor platí následující pravidla:

Pokud nespecifikujeme volby pro dané sdílení použijí se následující implicitní hodnoty: Při definici stroje, který smí na daný svazek přistupovat můžeme použít několik způsobů určení:

Konfigurace klienta

Každý svazek, který server umožňuje sdílet, může být připojen (mount) několika způsoby:

Použití /etc/fstab

Příklad nastavení v souboru /etc/fstab:
 server:remote_dir local_dir nfs options 0 0 
kde jsou významy položek následující:

Použití autofs

Nevýhoda použití nastavení v /etc/fstab je, že systém musí po celou dobu běhu systému mít alokovány prostředky potřebné pro práci s připojenými svazky. Toto není problém v případě, že montujeme jen několik málo svazků. V případě, že chceme montovat desítky svazků, je ale výhodnější použít automount systém, který nám umožní lépe zacházet s prostředky, protože montuje svazky pouze v případě jejich potřeby.

K ovládání automount systému slouží skript autofs, který se nachází v adresáři /etc/rc.d/init.d. Jako primární konfigurační soubor se používá /etc/auto.master. Je vhodnější specifikovat potřebné parametry v souborech než je psát ručně skriptu autofs. Další výhodou je, že autofs automaticky připojuje a odpojuje sdílené svazky při startu nebo zastaveni služby autofs na různých úrovních běhu systému. K tomu, abychom mohli automount systém používat, potřebujeme mít v systému nainstalován RPM balík autofs.

Konfigurační soubory pro autofs tvoří hierartchickou strukturu. Kořenem hierarchie je soubor /etc/auto.master, který obsahuje odkazy na potomky (jednotlivé montované svazky). Tento soubor obsahuje záznamy typu:

 mount_point map_type
kde je význam položek následující: Nejpoužívanější metodou definice položky mount_point je uvedení jména souboru, kde se dané informace nacházejí. Typicky je tento soubor pojmenováván auto.mount_point. Tento sekundární soubor potom vypadá následovně:
 local_dir mount_options host:remote_dir 
kde je význam položek následující:

Bezpečnost NFS

Základním bezpečnostním problémem při používání NFS je skutečnost, že používáme pouze omezení přístupu podle IP (podle stroje), z kterého se uživatel připojuje a nikoliv podle uzivatele, který se připojuje. To může znamenat útok přes DNS, kdy útočník napadne DNS, a pak se tváří jako privilegovaný stroj.