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 (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 | * | | -------------------
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]
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
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ů.
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.
klient -zjednodušená funkčnost
př: cat /coda/tmp/soubor
bezpečnost - lze rozdělit na dvě části
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.miscFormá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