NFS




Je to sdílení adresářů a souborů. Služba se skládá z serverové části, která nabízí soubory ke sdílení a klientské části, která si je mountuje do svého stromu.
Služba využívá protokol UDP a běží na portu 111 a 2049

OBSAH


Instalace
Nastavení serveru
Rpcinfo
Nastavení klienta
Možné problémy
Nfsstat
NFS v linuxu (redhat)
NFS Solarisu
NFS SunOs



Instalace



pustíme sysinstall
sysinstall
v sysinstall v menu post-install zapnout nfs server
vytvoří soubor /etc/exports kde se uvádějí sdílené adresářě
Pokud se neco meni v exports, staci jen reloadovat mountd
Pozor na symlinky /home nelze sdílet musí se zadat /usr/home !!

je třeba v rc.conf povolit následující služby
mcedit /etc/rc.conf

rpcbind_enable="YES"
nfs_server_enable="YES" #pro server
nfs_client_enable="YES" #pro klienta
nfs_client_flags="-n 4" #pro klienta
mountd_flags="-r"


POZOR- u starší verze BSD (5,4) jsem musel nahradit mountd_flags="-r" příkazem rpcbind_flags="-r" , jinak to ne a ne chodit

mountd se spustí automaticky,kdykoliv je NFS server zapnut

Nastavení serveru



veškerá nastavení se provádějí v souboru /etc/exports
mcedit /etc/exports

/home -alldirs -network 192.168.0.0 -mask 255.255.255.0

-první položka je cesta k adresáři, který budeme sdílet
-druhá položka upravuje vlastnosti sdílení
-třetí položka nastavuje kdo může ke sdílení přistupovat

první položka může nabývat voleb
/cesta1 nastavíte celou cestu
/cesta1 /cesta2 /cesta3 je možno nastavit více cest pro jedno sdílení

druhá položka může nabývat voleb
ro Exportovat pouze pro čtení
bez záznamu defaultně je složka zpřístupněna pro čtení i zápis
alldirs Povoluje podadresáře jako mountpoity
maproot=uzivatel nastavuje rootovi vzdáleného klienta práva, který má uživatel "uzivatel" na serveru.
maproot=user:group1:group2:rozšíření předchozího na uživatele "user" a skupiny "group1,group2"
mapall=user nastavuje všem vzdálený klientům práva, který má uživatel "user" na serveru.

třetí položka může nabývat voleb
votruba jméno stroje-musí být definováno v /etc/hosts, nebo pomocí DNS
votruba novak smutny muze se definovat vice uzivatelu oddelenych mezerou
10.0.1.2 10.0.1.1 uživatelé mohou být definováni IP adresou
mojedomena.cz přistupovat mohou uživatelé z této domény
.cz přistupovat mohou uživatelé z českých domén
-network 192.168.0.0 -mask 255.255.255.0 přistupovat mohou uživatelé z tohoto rozsahu sítě



zkontrolovat nastavení /etc/hosts.allow

bude potřeba přidat řádky:
portmap : 192.168.100.0/255.255.255.0 (co smí přistupovat) : allow
portmap : ALL : deny


Vystavujeme-li diskové svazky veřejnosti, je výhodné mezit 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 , ... (popř. ALL)


na NFS serveru spustíme následující sekvenci příkazů v tomto pořadí
rpcbind
nfsd -u -t -n 4
mountd -r


zkontrolujeme běh

ps -aux | grep nfsd
ps -aux | grep mountd



zkontrolujeme si co se sdílí
showmount -e
případně jen pro daného uživatele
showmount -e "hostname"
výsledek
Exports list on localhost:
/zaloha1/backup 192.168.0.6

tato utilita má následující parametry
a vypíše všechny mountpointy ve formátu nazev_klienta:cesta_ke_sdilenemu_adresari
d vypíše pouze cestu ke sdílenému adresáři
e vypíše exportlis pro daného uživatele
3 použije muont protokol v3



pokud upravíme soubor /etc/exports, je třeba reload nfsd serveru
/etc/rc.d/mountd onereload
nebo
kill -s HUP `cat /var/run/mountd.pid`

restart služeb můžeme provést následujícími příkazy
/etc/rc.d/rpcbind restart
/etc/rc.d/nfsd restart
/etc/rc.d/mountd -r



POZOR
následující sdílení nefunguje
/cesta1 uzivatel1
/cesta2 uzivatel1


je třeba to napsat ve tvaru
/cesta1 /cesta2 uzivatel1

Dále je třeba dát pozor na to, aby cesta nekončila lomítkem (slash)
špatně je
/cesta1 /cesta2/
správně má být
/cesta1 /cesta2

Rpcinfo


zjištuje čísla portů, které portmap přiřadil jednotlivým službám. Ve výpisu musí být všechny potřebné služby. Tj. rpcbind,nfs a mountd

příkaz můžeme uvést bez parametru, kdy vypisuje všechny rozhraní,uživatele a IP adresy, nbo s parametrem -p IP , kdy vytvoří výpis pouze pro danou IP

rpcinfo -p localhost
výsledek
program vers proto port service
100000 4 tcp 111 rpcbind
100000 3 tcp 111 rpcbind
100000 2 tcp 111 rpcbind
100000 4 udp 111 rpcbind
100000 3 udp 111 rpcbind
100000 2 udp 111 rpcbind
100000 4 local 111 rpcbind
100000 3 local 111 rpcbind
100000 2 local 111 rpcbind
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100005 1 udp 853 mountd
100005 3 udp 853 mountd
100005 1 tcp 966 mountd
100005 3 tcp 966 mountd


bez parametru-zkráceno
rpcinfo
program version netid address service owner
100000 4 tcp 0.0.0.0.0.111 rpcbind superuser
100000 3 tcp 0.0.0.0.0.111 rpcbind superuser
100000 2 tcp 0.0.0.0.0.111 rpcbind superuser
100000 4 udp 0.0.0.0.0.111 rpcbind superuser


Nastavení klienta


Na NFS klientovi spustíme příkaz
nfsiod -n 4

a pak již můžeme namountovat sdílený prostředek
mount server:/home /mnt


pro stálé namountování je možno vložit do /etc/fstab položku
ee /etc/fstab
device mountpoint fs-type options dump
server.domena:/home /mnt nfs rw 0 0


Možné problémy



Pokud při pokusu o připojení sdílení na klientu deostanete následující hlášku
RPCPROG_NFS: RPC: Program not registered
zastavíme všechny služby, které jsou spjaté s NFS na serveru
/etc/rc.d/rpcbind stop
/etc/rc.d/nfsd stop

mountd musíme killnout
ps -aux | grep mountd
kill all 1234
kde 1234 je číslo procesu, které jsme zjistili předchozím příkazem
a pak je znovu nahodíme
rpcbind
nfsd -u -t -n 4
mountd -r



Pokud budete mit na klientovi hlášku
[udp] 192.168.0.1:/var/mail/virtual: Permission denied
tak vám na NFS serveru pravděpodobně neběží nfs demon, nebo se pokoušíte připojit adresář, na který nemáte práva, nebo neexistuje


Nfsstat


utilita která vypisuje statistiky ohledně NFS
možné volby
cstatistika pouze pro NFS klienty
sstatistika pouze pro NFS server
w cislostatistika pro NFS klienty a server, číslo udává refresh intervel

NFS v linuxu (redhat)


NFS se může provozovat mezi všemy unixovými systémy. Osobně jsem zkoušel sdílení mezi FreeBsd a linuxem, konkrétně v RH-jiná distra mohou mít lehce jiný postup. Bez problému by mělo fungovat i na všech klonech BSD, MacOs, Solarisu, na Novellu mi říkal kolega, že mu to dělalo psí kusy.
Pokud by měl někdo postup na rozchození na těchto systémech, byl bych rád , kdyby mi jej poskytnul.

nastavíme spouštění po startu
chkconfig --add nfs

a přiřadíme jednotlivým initům povolení spouštění

chkconfig --level 2 nfs on
chkconfig --level 3 nfs on
chkconfig --level 4 nfs on
chkconfig --level 5 nfs on


zkontrolujeme zda se zadařilo
chkconfig –list | grep nfs
nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off
nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off


nahodíme NFS
service nfs start


kontrola běhu
ps -Cnfsd

upravíme soubor exports
mcedit /etc/exports
/data914/bi1/zaloha 192.168.0.6 (ro)

POZOR -formát zápisu se trochu liší od BSD

možné volby (nechtělo se mi to překládat))
ro,rw Read-only, Read-write (default)
rw=list Hosts in the list can do rw, others ro only
root_squash Maps UID 0 and GID 0 to the value of anonuid and anongid (default)
no_root_squash Allow root access
all_squash Maps all UID and GID to anonymous one
subtree_check Check that the accessed file is in the appropriate filesystem and in the exported tree.
no_subtree_check Disables subtree checking
anonuid=xxx Related to root_squash
anongid=xxx Related to root_squash
secure Require remote access from privileged port
insecure Allow remote access from any port
noaccess Prevent access to this dir and it’s subdir


Příklady
/home2 @grupa(ro) dragon(rw,no_root_squash)
/home tukan (rw,all_squash,anonuid=150,anongid=100)


Exportfs


příkaz pro načítání a mazání sdílení

a vytvoří a sestaví soubor /var/lib/xtab odkud demon mountd čte sdílení. Zpracuje všechny položky v /etc/exports
r synchronizuje xtab a exports-používá se po změně souboru exports
o dočasné vytvoření sdílení
u ukončení dočasného sdílení


Příklady
uživateli jarda, připojí adresář /home pro zápis a čtení
exportfs jarda:/home -o rw

uživateli jarda, odpojí adresář /home pro zápis a čtení
exportfs jarda:/home -u rw

ukončení všechna sdílení bez shození demona
exportfs -ua


Solaris


Upozornuji, že jsem to Solarisu a na SunOs nenastavoval. Jen jsem náhodou na to narazil při brouzdání internetem.
exporty se nastaví v souboru


/etc/dfs/dfstab

reload NFS se provede příkazem
/usr/sbin/shareall

reload demonů
kill -1 `cat /var/run/mountd.pid`

volby v souboru dfstab
ro,rw Read-only to all, Read-write to all
ro=list, rw=list Hosts in the list can do ro/rw
root=list Lists hosts permitted to access this filesystem as root. Otherwise, root access from a client is equivalent to by “nobody”
anon=xxx Specify the UID to which root is remapped. Default is “nobody”
anongid=xxx Related to root_squash
nosub Forbids clients to mount subdirectories
nosuid Prevents setuid and setgid from being created




SunOs


exporty se nastaví v souboru
/etc/exports

reload NFS se provede příkazem
/usr/sbin/exportfs -a

reload demonů
kill -1 `cat /var/run/mountd.pid`
Počet přístupů na stránky 1