RPC, NFS, automounter
Obsah
RPC (Remote Procedure Call)
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.
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.
- První z nich je určen pro superuživatele, a umožňuje povolit přihlašování několika
nebo všech uživatelů na několik nebo všechny stroje (později uvedené případy jsou
velmi nešťastné), aniž by byli dotazováni na heslo. Tento přístup řídí soubor,
který se jmenuje
/etc/hosts.equiv
. Soubor obsahuje seznam hostitelů a jmen uživatelů,
kteří jsou považováni za rovnocenné s uživateli místního stroje.
- Druhý způsob je
pro uživatele, kteří povolí dalším uživatelům z určitých hostitelů přístup ke svému
účtu. Tito uživatelé mohou být vypsáni v souboru
.rhosts
, který se nachází v domovském
adresáři daného uživatele. Z bezpečnostních důvodů musí být tento soubor vlastněn
uživatelem nebo superuživatelem a tento soubor nesmí být symbolickým odkazem, v opačném
případě bude ignorován.
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.
Ú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:
- Data, k nimž přistupují všichni uživatelé, mohou být uchovávána na
centrálním stroji a klienti si tento adresář připojí při zavádění
systému. Například můžete uchovávat všechny
účty uživatelů na jediném stroji a všichni hostitelé ve vaší
síti si z tohoto stroje připojí adresář home. Je-li tento systém
nainstalován společně se systémem NIS, potom se uživatelé mohou přihlásit
k libovolnému systému a přitom mohou stále pracovat s jednou sadou souborů.
- Data, která zabírají velké množství diskového prostoru, mohou být uchovávána
na jediném stroji.
- Administrativní data mohou být uchovávána na jediném stroji.
Již není třeba používat příkaz rcp k nainstalování stejného souboru na 20 různých počítačích.
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.
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:
- rsize=n a wsize=n Tyto volby určují velikosti datagramu, které budou používat
klienti systému NFS u požadavků na čtení, resp. zápis.
Jejich současná implicitní hodnota je, z důvodu výše popsaného omezení
velikosti datagramu protokolu UDP, 1 024 bajtů.
- timeo=n Tato volba nastavuje čas
(v desetinách sekundy), po který bude klient čekat na splnění jeho požadavku.
Implicitní hodnota je 0,7 sekundy.
- hard Explicitně označí tento svazek jako pevně
připojený svazek. Tato volba je implicitně zapnutá. Při překročení timeoutu se vypíše
"server not responding" a pokus o přístup se provádí znovu.
- soft Ovladač připojí svazek
volně. Při překročení timeoutu se I/O error
- intr Tato volba povolí signálům přerušit
volání systému NFS. Tato volba je užitečná,
když potřebujete zrušit volání, například v situaci, kdy server neodpovídá.
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.
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