RPC * NFS * automount

Milan Pindryč xpindryc@fi.muni.cz



RPC

RPC (Remote Procedure Call) je protokol pro vzdálené volání procedur vyvinutý firmou Sun Microsystems, umoľňuje asynchronní vykonávání procedur na vzdáleném stroji. Důležitou aplikací postavenou na RPC ne NFS, NIS.

Server RPC se skládá ze sady procedur, které klient volá tím, že pošle serveru požadavek RPC s parametry procedury. Server spustí jménem klienta požadovanou proceduru a ex. návratová hodnota pošle i zpět klientovi. Pro nezávislosti na platformě data mezi klientem a serverem ve formátu XDR(external data representation)

Server RPC nabízí jednu nebo víc skupin procedur, každá množina procedur se nazývá program a jednoznačně určena číslem programu. Seznam přiřazení mezi názvy služeb a programy je uložen v /etc/rpc

# /etc/rpc
portmapper 100000 portmap sunrpc
nfs        100001 nfsprog
ypbind     100002

Porty, na které se připojuje nejsou pevně určeny. O jejich přidělení na straně serveru se stará v Linuxu rpc.portmap(portmap, rpcbind). Vyjímku tvoří NFS, které obvykle běží na vyhrazeném portu 2049. Seznam aktuálně přidělených portů můľeme získat příkazem rpcinfo -p.


NFS

NFS (Network File System - síťový systém souborů) je protokol umožňující připojovat adresářové struktury z jiných hostitelů, které se pak jeví jako lokální souborové systémy (př. všechny domovské adresáře můžou být na centrálním serveru, ze kterého si je připojují všichni uživatelé a používají je jako lokální disk, důsledkem toho se můžou uživatelé připojit na kterýkoliv stroj a získat stejný domovský adresář).

Komunikace mezi serverem a klientem probíhá ve dvou fázích: Nejprve se pomoci protokolu mount připojí adresářový strom k lokálnímu, během čehož dojde k autentizaci, poté je předán identifikátor kořenového adresáře, který se následně používá při komunikaci protokolem NFS.

Verze:
NFS verze 1: nepoužita.
NFS verze 2: První verze, která se objevila v operačním systému SunOS 2. Běží nad UDP.(pod. linux)
NFS verze 3: plus některé funkce, běží nad UDP a experimentálně nad TCP. (pod. linux)
NFS verze 4: Tato verze je momentálně ve vývoji, pro zájemce dokumentace RFC 3010.

Před užitím NFS, je potřeba se ujistit, že jádro má zkompilovanou podporu systému NFS.

NFS struktura

       Client                        Server

 system call interface
          |
          *
  virtual file system            virtual file system
     |          |                    *         |
     *          *                    |         *
local file    NFS client        NFS server   local file
 system         |                    *        system
     |          *                    |          |
    *        message to        message from     *q
  local     server RPC/XDR        client    local disk
  disk           |                RPC/XDR
                 |                  *
                 |                  |
                  -------------------

Nastavení NFS serveru

Na straně serveru jsou potřeba spustit démony rpc.portmap, rpc.nfsd a rpc.mountd (funkčnost zkontrolujeme příkazem rpcinfo -p), budeme-li používat zamykání souborů, pak rpc.statd a někdy rpc.lockd, používáme-li quoty na exportované svazky pak rpc.rquotad.

Démon mountd implicitně nepovolí žádnému uživateli připojení adresářů z místního hostitele. Chceme-li to povolit musíme adresář exportovat tj. uvést ho v souboru /etc/exports

# /etc/exports
/home 10.0.0.17(rw) 10.0.0.33(rw)
/home/ftp (ro)

Obecný tvar:

adresar hostitel1(volba1,...) hostitel2(volba2,...)

- adresar - exportovaný adresář

- hostitel - stroj ze kterého lze adresář připojit (lze zadat jak DNS tak IP adresou). U více počítačů, lze užít *,?. např. pc*.lab.fi.muni.cz (vyhovuje jak pc2.lab.. tak pcblabla.lab...), nebo zadat rozsah IP adres ve tvaru: IP adresa 1/IP adresa 2 (např. 10.0.0.1/10.0.0.33 to jsou všechny adresy od 10.0.0.17 do 10.0.0.33). Neuvedeme-li hostitele můžou si ho připojit všichni uživatelé př. ftp.

- volby:
ro - souborový sytém se připojí pouze pro čtení
rw - čtení, zápis
insecure - povolí neautorizovaný přístup z tohoto pc, implicitně je nastavena volba secure
root_squash - bezpečnostní vlastnost, na zadaných hostitelích zablokuje superuživateli přístupová práva(bere se jako anonymous)
no_root_squash - nemapují se požadavky od uživatele s uid 0
all_squash - všichni jako anonymous
sync - pro každém zápisu provede fsync() nebo fdatasync()
no_subtree_check - vypíná kontrolu zda soubor patří do adresářového stromu (zrychluje)
další:nohide, no_wdelay, insecure_locks, no_auth_nlm

rpc.lockd Spouští NFS lock manager na jádrech, která to nedělají automaticky.

rpc.statd Je používán NFS pro ochranu dat pro případ rebootu NFS serveru. /etc/hosts.allow, /etc/hosts.deny Vystavujeme-li diskové svazky veřejnosti, je výhodné omezit přístup k službám z některých počítačů, k čemuž slouží právě hosts.allow a hosts.deny. V případě požadavku na poskytnutí nfs svazku server napřed zjistí, zda IP adresa vyhovuje adrese z /etc/hosts.allow. Pokud ano, je jí povolen přístup, pokud ne, podívá se do /etc/hosts.deny. Vyhovuje-li adresa tomuto souboru, pak je přístup zamítnut.

Formát souborů hosts.*
Služba:IP_adresa_1 , IP_adresa_2 , ... [nebo ALL]


Nastavení NFS klienta

Připojení provedeme příkazem mount, stejně jako fyzické zařízení:

mount -t nfs remote_host:/remote_dir /mnt/nfs

Systému souborů se zbavíme:

umount /mnt/nfs

Volby pro mount:
hard - při spadnutí serveru neumožní přerušit klienta pokud neurčíte také intr. Klient bude čekat na znovunavázání spojení, pak pokračuje tam kde přestal, většinou implicitně nastaveno.
soft - může způsobit poškození souborů. Umožňuje pomocí volby timeo=time stanovit "čekací dobu", během níž pokud server neodpoví, bude klientovi vrácena chyba.
rsize=x,wsize=x - stanoví velikost datagramů, které budou použity při komunikaci (může urychlit spojení dobrým nastavením, některé verze nepodporuje datagramy větší než implicitní hodnoty).
nolock - nepoužívá zamykání
ro,rw - (read only, read write)
intr - viz hard.
temeo=n - nastavuje čas, po který bude klient čekat na splnění požadavku, implicitně 0,7s

Kromě voleb rsize a wsize všechny volby nastavují chování klienta, když není dostupný server. NFS očekává, že operace bude dokončena v daném časovém limitu(volba timeout) pokud se tak nestane nastane vedlejší překročení časového limitu a operace se provede znovu s dvojnásobnou hodnotou časového intervalu. Po dosažení max. časového intervalu 60 sekund dojde k hlavnímu překročení časového limitu, klient vypíše na konzolu zprávu a pokračuje s dvojnásobným čas intervalem teoret. do nekonečna pak je hard, soft vygeneruje pro daný proces V/V chybu.

Pokud chceme připojovat svazky ihned po startu systému, je vhodné přidat následující řádek do /etc/fstab:

# svazek		      připojovací bod  fs-type	volby		     dump    fsck
news:/usr/spool/news	/usr/spool/news	nfs		rw,hard,intr	 0       0

NFS na pomalých linkách(modemy, ISDN): je pomalý a má velké nároky, skoro vše je rychlejší jak FTP,HTTP,SSH,... doporučuje se nepoužívat u mount volbu soft


Bezpečnost


NFS je zranitelný síťový protokol. Můžou nastat dva druhy útoků:
1)naslouchač - může získat neautorizovaná data, zatímco jdou po síti
2)podvodník - může získat neautorizovaný přístup do sítě
Základní kroky pro NFS bezpečnost:
- sledování a instalování nových bezpečnostních patchů
- jestliže je to možné tak exportovat souborové systémy pouze read-only
- exportovat FS omezené množině hostů
- konfigurovat NFS, tak aby požadavky byly akceptovány jen pro privilegované systémové programy
- blokovat TCP a UDP porty (nfs 2049, 111 portmap) na routrech a firewallech
- vyřadit z činnosti NFS, jestliže není potřeba
- ........
užitečné kontrolovací nástroje:
-showmount - příkaz zobrazující jména exportovaných souborů
-SATAN(Security Analysis Tool for Auditing Networks) - nástroj zkoumající vzdálené hosty
-NFSwatch - monitoruje NFS požadavky
-NFS tracer - monituruje NFS dopravu.
-nfsbug - testuje hosty na dobře známé NFS problémy


NFS v4(RFC 2624) - poskytne silnější ověřování a integritu.

Lze použít NFS přes SSH(pozor na timeouty)

Pro lepší ochranu dat můžeme použít TCFS

TCFS (Transparent Cryptographic File System)

TCFS byl navržen na Univerzitě v Salernu(Italie). Je to nástavba nad NFS, která dovolí uživatelům chránit jejich data šifrováním pmocí DES(data encryption standard) algoritmů.


Další souborové systémy

AFS (Andrew File System)

AFS je distribuovaný souborový systém alternativa NFS. Užívá client/server model, kde všechny soubory jsou uloženy na serveru. Soubory jsou přenášeny a měněny na klientově lokálním disku. Pracuje s různými UNIX OS a Win NT. Na kontrolování ochrany používá ACL. Chráněny jsou adresářová úřoveň. Uživatelé mohou vytvářet a udržovat vlastní skupiny. Příkaz pts nahrazuje příkazy chmod a chgrp.

AFS struktura:

workstattion                    server

user program   venus    <-->    vice
     |        *                   |
     *       /                    *
   unix kernel                unix kernel
       |                        |     |
     disk                     disk   disk


- podpora sdílení informací ve velkém měřítku (tisíce pracovních stanic)
- užívá jasnou sémantiku
- soubory jsou celé kopírovány na lokální stroj (Venus) ze serveru (Vice) při otevření. Jestliže je soubor změněn je kopírován na server při zavření. (metoda pracuje dobře, protože prakticky většina souborů je měněna pouze jednou osobou)
- Vice udržuje seznam platných kopií. Jestliže je soubor změněn Vice zneplatní další kopie
- při otevření: jestliže Venus má platnou kopii, můžeme jí otevřít okamžitě
- jestliže má neplatnou verzi tak počkáme na platnou

CODA

Je distribuovaný souborový systém. Je vyvíjen na CMU(Carnegie Mellon University). Má základ v AFS, který zde byl také vytvořen. Odstraňuje jeho nedostatky a přináší nové prvky např: "Mobile Computing" Jeden z možných nástupců NFS.


Má několik výhod oprotid dalším síťovým FS.
- "disconnect operace" (pro mobilní klienty)
- reintegrace dat poro odpojené klienty
- vysokou propustnost zajišťuje perzistentní cache
- má dobře definovanou sémantiku sdílení(i v případě výpadku sítě)
- přístupová práva založená na ACL, autentizace podobná Kerberovi
- nepřerušené operace během výpadku sítě či serveru (když není přístupný server užívá se lokální verze souboru)
- dostupné včetně zdrojových textů, lze používat v rámci celkem liberální licence

klient -zjednodušená funkčnost

př: cat /coda/tmp/soubor

- program cat volá jádro
- VFS vrstva jádra předá požadavek modulu CODA
- CODA module udžuje tzv. mini-cache obsahující již obsloužené požadavky, pokud požadavek není v mini-cache vytvoří tzv. up-call cahce-manageru
- cache-manager(Venus) udržuje diskovou cache a pokud ještě soubor není v této chache, pokusí se kontaktovat file-server
- komunikace client-server probíhá protokolem RPC2
- pokud nelze file server(y) kontaktovat, přechází do disconnected-modulu

bezpečnost - lze rozdělit na dvě části


- atutentizace a bezpečná komunikace (RPC2 disponuje prostředky pro bezpečnou autentizaci a použití bezpečných komunikačních kanálů Autentizační schéma je podobné Kerberosu, kanály jsou kryptované pomocí RPC2_XOR)
- přístupová práva (soubory chráněny ACL vztaženým k adresářům. ACL přísluší k položce v databázi, která může patřit jednotlivé entitě nebo skupině, skupiny mohou obsahovat další skupiny, práva r,w,l-čtení adresáře,i-vytvoření souboru, d-mazání souboru,a-administrace)

Automount

V některých případech není hospodárné připojit všechny svazky NFS, ke kterým by chtěli uživatelé přistupovat. Buď z pouhého množství připojovaných svazků nebo z časové prodlevy, kterou by si tento proces vyžádal při zavádění systému Schůdnou alternativou řešení tohoto problému je démon automount (popř. amd), který zajišťuje automatické připojování svazku v případě potřeby a odpojí pokud nejsou určitou dobu používány. Rozdíl mezi AMD a automount je v tom, ze AMD běží v uživatelském prostoru, kdežto automount využívá jádra. Po instalaci z rpm balíčku se automount spouští klasicky z /etc/init.d/autofs, konfigurace probíhá typicky ve dvou souborech:

/etc/auto.master
/etc/auto.misc, popřípadě jinak pojmenovaný, odkazuje na něj auto.master

Formát auto.master je následující:

mount_point  map_type:map_name  options

mount_point - místo kam se budou všechny svazky připojovat
map_type:map_name - mapa, podle které se bude připojování řídit
options - volby předávané automountu, např. timeout=n
# /etc/auto.master:
/auto  /etc/auto.misc  --timeout=60
/etc/auto.misc

Formát auto.misc je následující:

key  [- options]  location

key - určuje, kam se daný svazek připojí
options - parametry připojení (viz. man mount())
location - odkud se má svazek připojit

#/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

AMD

Dalším démonem pro automatické mountování svazků za běhu systému je AMD, pocházející z FreeBSD.
Spouštění amd:
amd /net /etc/disk.map

/net - adresář, do kterého pokud přistoupíme, tak amd připojí poľadovaný svazek
/etc/disk.map - mountovací mapa.

Svazek není mountován v adresáři /net ale v pomocném adresáři (defaultně /a), v adresáři /net se nachází symbolický link. Hlavní síla amd ovąem spočívá v makrojazyce pouľívaném v mapovacím souboru.

/etc/disk.map
Soubor je ve tvaru:

key   value
  ....

key - je podadresář v mountovacím adresáři (v příkladě /net)
value - moľné umístění (bez mezer)
/defaults       type:=nfs;rhost:=fileserver
*		rfs:=/home/;sublink:=${key}

Je zde moľné pouľívat regulární výrazy, např. pouľijeme-li * (nebo např. [a-c]*) v klíči v automapě, expanduje se kaľdý moľný klíč v automapě a bude se mountovat do zadaného adresáľe. V příkladě bude /net/petr symbolický link do /a/fileserver/home/petr.


Zdroje

NFS howto
Automount howto
AFS-howto