Levyosion jako NFS:llä


NFS-palvelimen asetukset, Portmapper, NFS-palvelun käynnistys, NFS-jaon liittäminen, Graafiset NFS-työkalut Jako /etc/fstab:iin, Suojauksia: /etc/hosts.allow ja /etc/hosts.deny-tiedostot, Lisää tietoa asiasta

NFS, eli Network File System on Linuxin tapa jakaa levyosioita verkon ylitse. Idea on suhteellisen yksinkertainen: palvelimella, eli jakavalla koneella määritellään /etc/exports-tiedostossa hakemistot, joita jaetaan sekä koneet, joille hakemistoja jaetaan. Lisäksi tarvitaan portmapper-demoni valvomaan pyyntöjä.

Huom! Muun muassa Fedora Core 2:ssa on mukana NFS:n versio 4. Tämä ohje ei kaikilta osiltaan päde siihen. Joka tapauksessa, jos palvelimella on vanhempi versio NFS:stä (NFS3), niin liittäminen asiakaskoneelle menee aivan tämän ohjeen mukaan.


NFS-palvelimen asetukset

Ensiksi on syytä tarkistaa, onko nfs-paketti asennettu palvelimeen. Paketin nimi on yleensä tyyppiä nfs-utils-xxx, jossa xxx on paketin versionumero. Red Hatissa tarkistuksen voi tehdä rpm-ohjelmalla:

rpm -qa | grep nfs

Jos ei löydy mitään, pitää paketti asentaa rpm-ohjelmaa käyttäen.

Asetukset ovat kovin yksinkertaiset, pääkäyttäjä editoi tekstitiedostoa nimeltään /etc/exports. Tiedoston sisältö voi näyttää esimerkiksi tältä:

/home	10.1.2.0/255.255.255.0(rw)
/opt	10.1.2.0/255.255.255.0(ro)
/usr	kone.hima.net(rw, no_root_squash)  

Esimerkissä on havaittavissa seuraavat asiat:

  1. Hakemistot /home ja /opt jaetaan koneille, joiden ip-osoitteet alkavat 10.1.2. /home-hakemistolle on annettu sekä luku- että kirjoitusoikeudet, kun taas /opt on vain luku-tyyppinen. Itse asiassa yleensä tämä on oletusarvo, joten sitä ei tarvitsisi välttämättä erikseen ilmoittaa.
  2. /usr-hakemisto taas on jaettu luku- ja kirjoitustyyppisenä yksittäiselle koneelle kone.hima.net. Jaon voi siis ilmoittaa myös nimellä, jos nimi löytyy joko nimipalvelimelta tai /etc/hosts-tiedostosta. Kokonaiseen domainiin jaon voi toteuttaa jokerimerkillä: *.hima.net jakaa hakemiston kaikille hima.net-verkkodomainin koneille.
  3. no_root_squash-optio määrittää jaolle ominaisuuden, jossa asiakaskoneen root-käyttäjää käsitellään kuten palvelinkoneen root-käyttäjää. Tämä on yleensä tietoturvariski! Tätä ei siis kannata käyttää kuin erittäin harvoin ja varmasti luotetuissa verkoissa! Oletuksena kohdassa on optio root_squash, jolloin asiakaskoneen pääkäyttäjää käsitellään kuten nobody-käyttäjää, eli hänellä ei ole käytännössä mitään oikeuksia.

Portmapper

Jotta NFS:llä voidaan saada jaot toimimaan, pitää palvelimella pyöriä ns. portmapper-ohjelma. Asian voi esimerkiksi tarkistaa rpcinfo -p -komennolla, jonka pitäisi tulostaa tämänkaltaista kun kaikki on kunnossa:

program vers proto   port
 100000   2   tcp    111  portmapper
 100000   2   udp    111  portmapper

Toinen vaihtoehto on komentaa service portmap status, joka kertoo, pyöriikö portmapper.

Jos portmapperia ei ole asennettu, se pitää asentaa. Paketin nimi alkaa portmap-xxx, jossa xxx on ohjelman versionumero. Kätevimmin tämä taaskin tapahtui Red Hatissa suoraan rpm-paketista.

Yleensä rpm-paketista asentaminen käynnistää myös tarvittavat demonit, mutta jos näin ei tapahdu, käynnistetään palvelu. Sen voi tehdä esimerkiksi Service Configuration-ohjelmalla:

service config

Luonnollisesti asia hoituu komentoriviltäkin:

chkconfig portmap on

Tällä saadaan portmapper käynnistymään Linuxin käynnistyksen yhteydessä,

service portmap start

tällä taas käynnistetään demoni nyt. service-komennon sijasta voi luonnollisesti käyttää komentoa /etc/rc.d/initd/portmap start.


NFS-palvelun käynnistys

Ei riitä, että nostetaan palvelu pystyyn, tulee myös käynnistää palvelu. Palvelu käynnistetään käynnistämällä nfs-demoni:

exportfs -a
service nfs start

Näistä ensimmäisen rivin exportfs-ohjelma kertoo tiedostopalveluista vastaaville ohjelmille jaettavien hakemistojen tiedot /etc/exports-tiedostosta. Jälkimmäinen rivi taas käynnistää itse nfs-demonin.

Joka kerta, kun jakoja muutetaan, on suoritettava exportfs-komento ja uudelleen käynnistettävä nfs-demoni (service nfs restart).


NFS-jaon liittäminen

NFS-jako liitetään yksinkertaisesti mount-komennolla palvelimelta:

mount -t nfs 10.1.2.1:/hakem /mnt/hakem

Esimerkissä liitoksen tiedostojärjestelmä on siis nfs, palvelimen osoite on 10.1.2.1. ja liitettävä hakemisto on sitten /hakem. Tämä liitetään tässä tapauksessa hakemistoon /mnt/hakem. Jako pitää olla sallittu palvelimelta ja hakemisto, johon liitetään, on oltava olemassa.

IP-osoitteen sijasta voidaan myös käyttää koneen nimeä, jos jakokoneelle on määritelty nimi joko nimipalvelimella tai /etc/hosts-tiedostossa.


Graafiset työkalut

NFS-jaon tekoon NFS-palvelimelta on olemassa graafisia työkaluja. Fedora Coren mukana tulee system-config-nfs-ohjelma (redhat-), jolla voi määritellä kätevästi NFS-jakoja:

system-config-nfs-ohjelma

Tästä add-valinnalla luodaan uusi jako:

jaon lisääminen

Esimerkissä jaetaan /opt-hakemisto verkkoon 192.168.0. Muiden välilehtien takaa päästään määrittelemään optioita jaolle.

Pikainen testaus Fedora Core 2:ssa näytti tämän tuottavan toimivia NFS4-jakojakin.

Webmin-ohjelma osaa myös NFS-jaot. Webminhän on selaimen kautta toimiva säätöohjelma:

webmin-säätö

Etusivulta valitaan Services (nuoli), jonka takaa löytyy NFS Exports-valinta (ympäröity). Tästä päästään luomaan taikka muokkaamaan NFS-jakoja:

NFS-jaot

Klikkaamalla jakoa, päästään muokkaamaan sen ominaisuuksia. Add-nappulan takaa päästään luomaan uusi jako ja määrittämään sille ominaisuudet:

uuden jaon luominen webminillä

Create-valinta luo jaon ja aktivoi sen samalla. Sen jälkeen sen pitäisi olla niiden käytettävissä, kelle jako tulee tässä jaettua.


Jako /etc/fstab:iin

Jaon voi myös määritellä pysyväksi liittämällä sitä osoittavan rivin /etc/fstab-tiedostoon. Esimerkiksi näin:

10.1.2.1:/home		/home	nfs	 rw,hard,intr	0 0 

Tässä esimerkissä:

  • 10.1.2.1:/home on liitettävä hakemisto. Tässä siis haetaan käyttäjän kotihakemistot palvelimelta.
  • /home taas on hakemisto, johon liitetään
  • nfs on liitetyn tiedostojärjestelmän tyyppi
  • rw,hard,intr ovat liitosoptioita: rw tarkoittaa että käyttäjillä on oikeus lukea ja kirjoittaa levylle. Tämä pitää olla myös sallittu palvelimella. hard,intr-määrittely tarkoittaa suurinpiirtein seuraavaa: kun palvelin kaatuu, palvelimelta käsitelty tiedosto jää roikkumaan eikä sitä voi tappaa ilman intr-määritystä. Samalla myös jos palvelin nousee pystyyn uudelleen, prosessi jatkaa tiedoston käsittelyä niinkuin mitään ei olisi tapahtunutkaan.
  • 0 0 tarkoittaa, ettei levyä tarkisteta eikä siitä oteta varmistuksia.

Koko ritirimpsu pitää kirjoittaa yhdelle riville. Lisäksi optiolistaan rw,hard,intr ei saa laittaa välilyöntejä.


Suojauksia, /etc/hosts.allow ja /etc/hosts.deny-tiedostot

NFS on erittäin turvaton ja suojaamaton järjestelmä ja sitä tuleekin käyttää vain ns. luotetuissa verkoissa. Turvallisuutta voidaan kuitenkin parantaa määrittelemällä /etc/hosts.deny-tiedostossa ne osoitteet, joista ei saa ottaa yhteyksiä ja /etc/hosts.allow-tiedostossa ne, josta saa ottaa yhteyden.

Yleinen lähestymistapa on se, että aluksi kielletään kaikilta kaikki ja sitten annetaan juuri ja juuri riittävä määrä oikeuksia järjestelmään. Näinpä aloitetaan /etc/hosts.deny-tiedostosta ja kirjoitetaan sinne loppuun seuraava rivi:

portmap: ALL

Tässä eksplisiittisesti kielletään kaikilta portmapin käyttö. Sen jälkeen lähdetään /etc/hosts.allow-tiedostossa määrittelemään, kellä on oikeuksia ottaa yhteyksiä portmapperin kautta:

portmap: 10.1.2.0/255.255.255.0

Tässä annetaan 10.1.2.-alkuisille ip-osoitteille oikeus käyttää portmapperia ja sitä kautta liittää hakemistoja palvelimelta. Nämä määritykset siis laitetaan NFS-palvelimelle.


Lisää tietoa asiasta

NFS-HowTo on hyvä dokumentti liittyen aiheeseen. Sieltä löytää mm. lisää mahdollisuuksia parantaa NFS:n oletusarvoisesti huonoa turvallisuutta. Dokumentti on englanninkielinen.


Alkuun