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
c | statistika pouze pro NFS klienty |
s | statistika pouze pro NFS server |
w cislo | statistika 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`