RPC, NFS, automounter

Robert Hájek, xhajek@fi.muni.cz

Obsah


RPC (Remote Procedure Call)

Úvod do RPC

Balík RPC (neboli vzdálené volání procedur) poskytuje velmi obecný mechanismus pro aplikace typu klient-server. Balík RPC vyvinula firma Sun Microsystems a v podstatě se jedná o sbírku nástrojů a knihoven funkcí. Důležitou aplikací postavenou na balíku RPC je systém NFS, síťový souborový systém, a systém NIS, síťový informační systém. Server RPC se skládá ze sady procedur, které si může klient volat tím způsobem, že pošle serveru požadavek RPC společně s parametry procedury. Server spustí jménem klienta požadovanou proceduru a existuje-li návratová hodnota, pošle ji zpět klientovi. Aby mohl být balík RPC nezávislý na typu hardwaru, jsou všechna data předávaná mezi klientem a serverem převedena vysílajícím počítačem do tzv. formátu externího vyjádření dat (External Data Representation XDR) a přijímající počítač je převede zpět do místního vyjádření dat.

Server RPC nabízí jednu nebo více skupin procedur; každá množina procedur se nazývá program a je jednoznačně určena tzv. číslem programu. Seznam definující přiřazení názvů služeb k číslům programů je obvykle uložen v souboru /etc/rpc.

# 
# /etc/rpc R různé služby založené na RPC 
# 
portmapper 100000 portmap sunrpc 
rstatd		100001 rstat rstat_svc rup perfmeter 
rusersd 	100002 rusers 
nfs 		100003 nfsprog 
ypserv 		100004 ypprog 
mountd 		100005 mount showmount 
ypbind 		100007 
walld 		100008 rwall shutdown 
ypasswss 	100009 ypasswd 
bootparam 	100026 
ypupdated 	100028 ypupdate

Klienti musí mít možnost zjistit port, na který je namapováno dané číslo programu. V tomto případě by bylo použití konfiguračního souboru příliš nepružné; jelikož aplikace RPC nepoužívají vyhrazené porty, nemůžeme mít žádnou jistotu, že port původně určený pro použití naší databázovou aplikací nebude obsazen nějakým jiným procesem. Proto aplikace RPC vyberou některý z dostupných portů a zaregistrují ho pomocí démona, tzv. mapovače portů (portmapper deamon). Tento démon se chová jako zprostředkovatel mezi všemi servery RPC, které jsou spuštěny na daném počítači: klient, který chce kontaktovat službu s daným číslem programu, se nejdříve bude dotazovat mapovače portů umístěné na stroji serveru, ten mu pak vrátí čísla portů TCP a UDP, na kterých může být daná služba dosažitelná. V Linuxu se program na mapování portů nazývá rpc.portmap nebo portmap. A býva uložen v adresáři /sbin nebo /usr/sbin.

Příkazy r

Ke spouštění příkazů na vzdálených hostitelích můžeme použít například příkazy rlogin, rsh, rcp a rcmd. Tyto příkazy vyvolají na vzdáleném stroji příkazový interpret a umožní uživateli spouštět programy. Samozřejmě, že klient musí mít na stroji, na kterém hodlá spouštět příkazy, založený účet. Tedy všechny tyto příkazy musí provádést ověření totožnosti. Klient obvykle sdělí serveru své přihlšašovací uživatelské jméno a server okamžitě požádá o zadání hesla, které je ověřeno běžným způsobem.

Vypnutí ověřování totožnosti u příkazů z rodiny r lze provést dvěma způsoby.

Když klient požádá o službu z rodiny r, vyhledá se nejprve jeho hostitel a jeho uživatelské jméno v souboru /etc/hosts.equiv a potom v souboru .rhosts uživatele, pod jehož účtem se chce daný uživatel přihlásit.


NFS (Network File System)

Úvod do systemu NFS

NFS je pravděpodobně nejvýznamnější síťovou službou, která využívá balík RPC. Umožňuje přístup k souborům na vzdálených hostitelích, který je uskutečňován zcela stejným způsobem jako přístup uživatele k místním souborům. Toto chování je možné díky kombinaci funkce jádra operačního systému na straně klienta (který používá vzdálený souborový systém) a serveru NFS na straně serveru (který poskytuje souborová data). Tento přístup k souborům je pro klienta zcela transparentní a funguje na nejrůznějších serverových a klientských architekturách.

Systém NFS nabízí několik výhod:

Klient může požádat o připojení adresáře ze vzdáleného stroje ke svému místnímu adresáři naprosto stejným způsobem, jako při připojování fyzického zařízení. Příklad (Linux):

mount -t nfs vlager:/home /users

Při přístupu k souboru pomocí systému NFS spustí jádro systému volání procedury RPC směrem na démona nfsd (démon systému NFS), který se nachází na počítači serveru. Toto volání získá souborový klíč, název souboru, k němuž se má přistupovat, a jako parametry i id uživatele a skupiny, které se vztahují k danému uživateli. Tyto hodnoty slouží k určení přístupových práv k zadanému souboru. Aby se zabránilo neautorizovaným uživatelům ve čtení nebo úpravě souborů, musí být id uživatele a skupiny na obou hostitelích totožná.

Implementace systému NFS v Linuxu se nepatrně od ostatních UNIXů liší tím, že kód klienta je pevně integrován do virtuálního systému souborů (virtual file system - VFS) v jádru operačního systému a nepotřebuje dodatečné řízení pomocí démona.

Příprava systému NFS (pod Linuxem)

Příprava jádra (pod Linuxem)

Je třeba se ujistit, že jádro vašeho operačního systému má zkompilovanou podporu pro systém NFS. To můžemem zjistit např.
$ cat /proc/filesystems
ext2
nodev   proc
iso9660
nodev   devpts
vfat
nodev   nfs
Pokud v tomto seznamu chybí souborový systém nfs, pak ho můžeme přidat jako modul
# modprobe nfs

nebo je nutné zkompilovat vlastní jádro operačního systému s podporou systému NFS.

Připojení svazku systému NFS

Svazky systému NFS se připojují podobně, jako běžné souborové systémy. Spustíte příkaz mount, který bude mít následující syntaxi:
# mount -t nfs nfs_volume local_dir options 
Svazek nfs_volume je předán ve tvaru remote_host:remote_dir (vzdálený_hostitel:vzdálený_adresář). Protože je tento zápis jedinečný pro systémy NFS, můžete vynechat volbu Rt nfs. Existuje také spousta doplňkových voleb, které můžete při připojování svazku systému NFS použít v příkazu mount. Tyto volby mohou buď následovat na příkazové řádce za přepínačem -o, nebo je lze pro daný svazek uvedést v příslušné položce voleb v souboru /etc/fstab. V obou případech se více voleb navzájem odděluje čárkami. Volby zadané na příkazové řádce vždy potlačí volby, které jsou uvedeny v souboru fstab.
Seznam nejdůležitějších voleb:

NFS server

Pokud chcete službu NFS poskytovat i ostatním strojům, musíte mít na svém počítači spuštěny démony nfsd a mountd. Protože se jedná o programy založené na balíku RPC, nejsou spravovány super serverem inetd, ale jsou spouštěny při procesu zavádění systému a sami se registrují pomocí mapovače portů. Proto se musíte ujistit, že je spouštíte až po spuštění démona rpc.portmap (portmap).

Informace o vlastnictví, které poskytuje démon systému NFS svým klientům, obvykle obsahují pouze číselná id uživatele a skupiny. V některých případech se však tato čísla neshodují, potom aktualizujte čísla uid a gid na straně klienta tak, aby odpovídala číslům na straně serveru. K tomuto účelu můžete použít mapovacího démona ugidd.

Soubor /etc/exports

Soubor /etc/exports definuje přístupová práva pro souborové systémy, které mohou být exportovány NFS klientům. Je používán jak NFS mount démonem, (mountd(8)) tak i NFS server démonem (nfsd(8)).Formát souboru je podobný formátu souboru exports na SunOS, přičemž definuje některá rozšíření. Každá řádka obsahuje bod připojení (mount point) a seznam počítačů či síťových skupin, které mají právo tento souborový systém v tomto bodě připojit. Ke každému jménu počítače je možno připojit seznam připojovacích parametrů v závorkách. Démon mountd implicitně nepovolí žádnému uživateli připojení adresářů z místního stroje. Chcete-li jednomu nebo více strojům povolit připojení adresáře pomocí systému NFS, musí být tento adresář exportován, což znamená, že musí být uveden v souboru exports. Vzorový soubor exports by mohl vypadat následovně:
# příklad souboru /etc/exports
/               master(rw) trusty(rw,no_root_squash)
/projects       proj*.local.domain(rw)
/usr            *.local.domain(ro) @trusted(rw)
/home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
/pub            (ro,insecure,all_squash)
První řádka exportuje celý souborový systém počítačům master a trusty. Navíc, veškerý squashing je vypnut pro klienta trusty. Druhý a třetí příklad ukazuje, jak použít zástupné znaky pro jména počítačů a jména síťových skupin (to je @trusted). Čtvrtá řádka ukazuje export pro klienta PC/NFS (viz výše). Poslední řádka exportuje veřejný FTP adresář libovolnému počítači, přičemž všechny požadavky jsou prováděny jako uživatel nobody. Přepínač insecure dovoluje připojit klienty, kteří nepoužívají porty rezervované pro NFS.

Automatické připojování (automounter) v operačním systému Linux

V některých případech není hospodárné připojovat všechny svazky systému NFS, ke kterým by mohli chtít uživatelé přistupovat; buď z důvodu pouhého množství připojovaných svazků, nebo z důvodu časové prodlevy, kterou by si tento proces vyžádal při zavádění systému.

Možné řešení tohoto problému je tzv. démon automatického připojování. Jedná se o démona, který podle potřeby automaticky a zcela transparentně připojuje libovolné svazky systému NFS a taktéž je automaticky odpojuje, pokud nebyly po určitou dobu používány. Další šikovnou vlastností je možnost připojení určitého svazku z alternativních míst.

Například kopie programů X a podpůrných souborů je možné uchovávat pouze na dvou nebo třech hostitelích a všichni ostatní hostitelé si tyto programy a podpůrné soubory připojí pomocí systému NFS.

Když k tomuto účelu použijete démona automatického připojování, můžete všechny tři stroje namapovat do adresáře /usr/X386; démon automatického připojování se potom bude zkoušet připojit ke všem třem strojům, dokud se k některému nepřipojí. Pod Linuxem se nejčastěji používaji tyto implementace:

am-utils-6.0.1-4

Defaultní konfigurační soubor je /etc/amd.conf
amd -H
amd [ -F conf_file ]
amd  [  -nprvHS  ]  [ -a mount_point ] [ -c duration ] [ -d domain ] [ -k kernel-arch ] [ -l
logfile ] [ -o op_sys_ver ] [ -t interval.interval ] [ -w interval ] [ -x log-option ] [  -y
YP-domain ] [ -C cluster-name ] [ -D option ] [ -F conf_file ] [ -O op_sys_name ] [ -T tag ]
[ directory mapname [ -map-options ] ] ...

autofs-3.1.3-6

Démon se ovládá pomocí /etc/rc.d/init.d/autofs start|stop|reload. Při startu načítá konfigurační soubor /etc/auto.master.
příklad /etc/auto.master
/auto   /etc/auto.misc  --timeout 60
příklad /etc/auto.misc
kernel          -ro,soft,intr           ftp.kernel.org:/pub/linux
cd              -fstype=iso9660,ro      :/dev/cdrom
zip             -fstype=auto            :/dev/hdd4
floppy          -fstype=vfat            :/dev/fd0

Potřebné balíky

knfsd-1.4.7-7.i386.rpm			- The Kernel-Space NFS Server
knfsd-clients-1.4.7-7.i386.rpm	
nfs-utils-0.1.6-2.i386.rpm	-- nfs v RH 6.2
am-utils-6.0.1-4.i386.rpm 	-- automounter
autofs-3.1.3-6 				-- automounter

Zdroje

http://www.linux.cz/linuxdoc/LDP/nag2/x-087-2-nfs.html
http://www.linux.cz/linuxdoc/HOWTO/NFS-HOWTO.html
http://www.cs.columbia.edu/~ezk/am-utils/
http://www.linux.cz/linuxdoc/HOWTO/mini/Automount.html