Ero sivun ”NFS” versioiden välillä

Linux.fista
Siirry navigaatioon Siirry hakuun
(taas omista kokemuksista)
 
p (Lisätty Palvelin-malline)
 
(38 välissä olevaa versiota 18 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
= /etc/exports =
'''NFS''' eli [[wikipedia:Network_File_System_(protocol)|Network Filesystem]] on [[Sun Microsystems]]in kehittämä menetelmä tiedostojärjestelmien jakamiseen Unix-järjestelmien välillä. Linuxissa vaihtoehtoina on [[käyttäjä]]tason ja [[ydin]]tason nfs-palvelimet. NFS-protokollasta on käytössä kolme eri versiota, 2, 3 ja 4.


/etc/exports -tiedoston avulla määritellään, mitkä paikalliset tiedostojärjestelmät on mahdollista liittää muualla sijaitsevien koneiden tiedostojärjestelmiin. Esimerkkirivi:
== Palvelin ==
  /varasto        192.168.0.0/255.255.255.0(rw,sync)
 
/varasto -niminen paikallinen hakemisto jaetaan käytettäväksi verkossa 192.168.0.0/255.255.255.0. rw tarkoittaa, että muut koneet saavat sekä kirjoittaa, että lukea /varastoa, ja sync pakottaa paikallisen koneen synkronoimaan tiedostojärjestelmän levylle aina, kun nfs saa kirjoitusoperaation valmiiksi. Kun /etc/exports -tiedosto on kirjoitettu halutunlaiseksi, käynnistetään nfs-palvelin (vaikkapa /etc/init.d/nfs-kernel-server start).
=== Palomuuri ===
NFS käyttää oletuksena porttia 2049, joten avaa kyseinen portti [[palomuuri]]sta komennoilla
iptables -A INPUT -p tcp --dport 2049 --source $LOCALNET -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
Portin avauskomennot on hyvä lisätä sopivaan käynnistystiedostoon, jotta se suoritettaisiin aina järjestelmän käynnistyessä. Aseta [[ympäristömuuttuja]] LOCALNET tai korvaa se omalla sisäverkon nimellä tai osoitteella, esimerkiksi 192.168.0.0/255.255.255.0
 
=== /etc/exports ===
[[Asetustiedosto]]n /etc/[[exports]] avulla määritellään, mitkä paikalliset tiedostojärjestelmät on mahdollista liittää muualla sijaitsevien koneiden tiedostojärjestelmiin. Tiedoston syntaksi on yksinkertainen:
/hakemisto      sallitut_koneet(liitosparametrit)
Esimerkiksi:
  /varasto        192.168.0.0/255.255.255.0(rw)
Sallisi /varasto -niminen paikallinen hakemiston liittämisen verkosta 192.168.0.0/255.255.255.0 (eli koneet, joiden ip on välillä 192.168.0.0 - 192.168.0.255 saavat tehdä liitoksen). Kun /etc/exports -tiedosto on kirjoitettu halutunlaiseksi, käynnistetään nfs-palvelin (vaikkapa /etc/init.d/nfs-kernel-server start).
Liitosparametrejä:
*<tt>rw</tt> = Luku- ja kirjoitusoikeudet
*<tt>ro</tt> = Vain lukuoikeudet
*<tt>no_root_squash</tt> = Oletuksena kun asiakaskoneen root-käyttäjä hakee tiedostoja, käsitellään ne nobody-käyttäjänä palvelimella. Jos <tt>no_root_squash</tt> on käytössä, on asiakaskoneen root-käyttäjällä samat oikeudet jakoon kuin palvelinkoneen root-käyttäjällä.
*<tt>no_subtree_check</tt> = Jos vain osa tallennusmediasta (esim. levyasema) on jaettu,  "subtree checking" tarkistaa että asiakaskoneelta pyydetty tiedosto on osa jaettua hakemistoa. no_subtree_checkin nopeuttaa toimintaa jos koko tallennusmedia on jaettu.
*<tt>sec</tt> = Määrittelee tietoturvatason [[kerberos]]ta käyttäen. Oletusarvoisesti NFS sallii salakuuntelun, datan muuntamisen jne. (vanhoilla kerneleillä eri syntaksi)
*<tt>sync</tt> = Kuittaa muutokset asiakaskoneelle vasta sitten, kun ne on fyysisesti kirjoitettu palvelinkoneen levylle (vrt [[sync]]-komento). Sync on oletusasetus, ja sen määritteleminen erikseen aiheuttaa varoituksen.
*<tt>wdelay</tt> = Palvelin viivästyttää levylle kirjoittamista, jos se epäilee että toinen pyyntö on kiireellisempi. Tämä voi parantaa suorityskykyä vähentämällä erillisten kirjoituskertojen määrää.
*<tt>async</tt> = Syncin vastakohta, mahdollistaa muutosten kuittaamisen asiakaskoneelle jo ennen kuin ne on kokonaan kirjoitettu levylle. Nopeuttaa toimintaa, mutta saattaa vikatilanteessa johtaa tietojen katoamiseen. Asyncin määritteleminen aiheuttaa varoituksen.
 
Liitosparametrit on kuvattu tarkemmin exportsin [[man]]-sivulla (<tt>man exports</tt>).
 
Jaettavalle hakemistolle voi jossain tapauksissa olla järkevää asettaa [[sticky bit]] esimerkiksi komennolla
[[chmod]] 1777 /home/nfsjako
jossa asetetaan kaikille kaikki oikeudet ja lisäksi sticky bit. Hakemistoon asetettu sticky bit tarkoittaa että vain tiedoston omistaja voi poistaa tiedoston kyseisestä hakemistosta.
 
Kun tiedostoa on muutettu, otetaan muutokset käyttöön komennolla
[[exportfs]] -rv
Jaon parametrit saa näkyviin komennolla
exportfs -v
 
=== /etc/hosts.allow ja /etc/hosts.deny ===
/etc/[[hosts.allow]] on asetustiedosto, jossa listataan koneet joilla on oikeus yhdistää palvelimelle ja vastaavasti [[hosts.deny]]ssä listataan ne, joilla ko. oikeutta ei ole. Oletuksena kaikilla koneilla paitsi hosts.denyssä listatuilla on yleensä oikeus yhdistämiseen. On tavallista kieltää kaikki yhteydet tiedostossa hosts.deny, jolloin seuraavat rivit tiedostossa /etc/hosts.allow sallivat nfs:n käytön tietyille koneille:
portmap:  ip,ip2
lockd:  ip,ip2
rquotad: ip,ip2
mountd: ip,ip2
statd: ip,ip2
 
Samalla tavalla voi hosts.denyssä estää tiettyjä koneita käyttämästä nfs:ää. Tiedostoissa voi myös sallia tai kieltää käytön esimerkiksi verkottain: 192.168.0.0/255.255.0.0 sallii yhteydet kaikista paikallisverkoista, joiden ip-osoitteet alkavat 192.168. Katso lähemmin [[man]] hosts_access ([[Tcpwrappers]]).
 
=== NFS-palvelun käynnistäminen ===
NFS:ää käytettäessä on oltava käynnistettynä seuraavat palvelut:
#nfs  (tai nfs-common)
#[[portmap]]
#[[nfslock]]
#[[rpcidmapd]]
Palvelun käynnistäminen onnistuu [[init]]in tyypistä riippuen komennolla /etc/init.d/palvelunnimi tai /etc/rc.d/palvelunnimi esimerkiksi
/etc/init.d/nfs start
Joissain [[Jakelu|jakeluissa]] toimii myös
service nfs start
 
Käynnissä olevat palvelut voi tarkistaa komennolla
rpcinfo -p
 
Tarkempia tietoja mm. palveluiden käyttämistä porteista saa komennolla
netstat -tupa
 
Jaossa olevat hakemistot voi tarkistaa komennolla
showmount -e
 
== Liittäminen asiakaskoneessa ==
Aluksi asiakaskoneessa on käynnistettävä portmap- ja rpcidmapd-palvelut esimerkiksi komennolla
/etc/init.d/portmap start
/etc/init.d/rpcidmapd start
tai
service portmap start
service rpcidmapd start
 
NFS-jaot ovat siitä mukavia, että ne voidaan [[Mount|liittää]] ja [[umount|irrottaa]] kuin mikä tahansa muukin [[tiedostojärjestelmä]]. Tiedostojärjestelmän tyyppi on nfs ja siihen viitataan muodossa palvelin:polku, esimerkiksi palvelimelta, jonka ip on 192.168.0.1 liitettäisiin hakemisto /varasto seuraavasti:
mount -t nfs 192.168.0.1:/varasto /mnt/varasto
Vastaavasti liitoksen voi tehdä [[fstab|/etc/fstabissa]] seuraavasti:
192.168.0.2:/varasto  /mnt/varasto  nfs  users,rw,auto,intr  0 0
Users-parametri sallii kaikkien käyttäjien liittää ja irrottaa jaon, rw lisää luku- ja kirjoitusoikeudet ja auto aiheuttaa automaattisen liittämisen järjestelmän käynnistyessä. Intr-parametri taas mahdollistaa nfs-kutsun peruuttamisen, kun palvelin ei vastaa.
 
Samat nfs-jaot voi liittää useampaan eri hakemistoon mount-komennon valitsimella --bind.
 
'''HUOM!'''
 
Liitettäessä NFS-jakoa, ei osoite jaettavaan tiedostoon välttämättä ole sama kuin SMB:llä. Mikäli polku jaettavaan kohteeseen on väärin, valittaa palvelin hieman harhaanjohtavasti käyttäjäoikeuksista tyyliin:
  mount_nfs: can’t access /jako/nettikansio: Permission denied
 
 
== Käyttäjän oikeudet ==
[[Käyttäjä]]n oikeudet NFS-jaolla määritellään käyttäjätunnuksen [[UID]]:n (tunnistenumeron) mukaan, tunnuksen nimeä ei tarkisteta. Jos siis käyttäjät on luotu itsenäisesti eri koneille, oikeuksia annetaan satunnaisen käyttäjän oikeuksien mukaan.
 
Kaikkien asiakaskoneiden käyttäjätunnukset on siis luotava niin, että niillä on samat UID:t ja [[GID]]:t ([[ryhmä|ryhmien]] tunnistenumerot) kuin palvelinkoneella, ainakin niiden tunnusten ja ryhmien osalta, jotka omistavat tai saavat käyttää jaon tiedostoja (jos jaossa ei ole järjestelmätiedostoja, järjestelmä-UID:t saavat erota, mikä voi olla oleellista jos käytössä on eri jakeluita tai jopa kokonaan eri käyttöjärjestelmiä).
 
[[NIS]]- tai [[LDAP]]-palveluiden ollessa käytössä UID-numerot ovat valmiiksi samat kaikissa koneissa. Tietyn tunnistenumeron omaavan käyttäjän voi luoda [[useradd]]-komennolla seuraavasti:
useradd -u numero nimi
Jonka jälkeen salasana asetetaan komennolla [[passwd]]:
passwd nimi
 
Sopivat osat palvelimen [[passwd-tiedosto]]a voi myös kopioida uusille koneille ja lisätä niiden passwd-tiedostoihin ennen käyttäjätunnusten luomista (ensimmäinen tunnus jouduttaneen tässä tapauksessa määrittelemään uudestaan).
 
== Tietoturva ==
NFS-järjestelmä käyttää tavallisesti asiakaskoneen antamia UID- ja GID-arvoja (käyttäjä- ja ryhmätunnuksia). Asiakaskoneen ylläpitäjä (root) voi siis esiintyä minä tahansa palvelinkoneen käyttäjänä NFS-jakoa käyttäessään ja tämä koskee myös verkkoon liitettyä vierasta konetta, sikäli kun se voi käyttää ip-numeroa, jolle on määritelty oikeus käyttää NFS-jakoa. NFS-jako on siis lähtökohdiltaan täysin turvaton.
 
Oletusasetuksena on kuitenkin, että UID 0 (root) muunnetaan käyttäjätunnukseksi nobody, jolloin asiakaskoneen ylläpitäjä ei pääse muuttamaan tiedostoja, jotka ovat root-tunnuksen omistuksessa ja joihin muilla ei ole kirjoitusoikeuksia. Asetuksella all_squash asiakaskoneen tunnuksista ei välitetä, vaan kaikki käyttö hoidetaan [[nobody]]-tunnuksen oikeuksin.
 
NFS voi käyttää [[kerberos]]-järjestelmää varmistamaan käyttäjät, varmistamaan pakettien eheyden tai estämään salakuuntelu.
 
 
==Katso myös==
*[[NFSv4 Fedorassa]]
*[[Samba]]
*[[FTP]]
*[[SFTP]]
*[[Fish]]
*[[Sshfs]]
 
==Aiheesta muualla==
*[http://wiki.linux-nfs.org/index.php/Main_Page Linux-NFS-wiki]
*[http://opensuse.fi/NFS NFS opensuse.fi:n wikissä]
 
{{Tiedostojärjestelmät}}
 
[[Luokka:Tiedostojärjestelmät]]
[[Luokka:Verkko]]
[[Luokka:Ohjeet]]
{{Malline:Palvelin}}

Nykyinen versio 1. tammikuuta 2019 kello 23.04

NFS eli Network Filesystem on Sun Microsystemsin kehittämä menetelmä tiedostojärjestelmien jakamiseen Unix-järjestelmien välillä. Linuxissa vaihtoehtoina on käyttäjätason ja ydintason nfs-palvelimet. NFS-protokollasta on käytössä kolme eri versiota, 2, 3 ja 4.

Palvelin[muokkaa]

Palomuuri[muokkaa]

NFS käyttää oletuksena porttia 2049, joten avaa kyseinen portti palomuurista komennoilla

iptables -A INPUT -p tcp --dport 2049 --source $LOCALNET -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT

Portin avauskomennot on hyvä lisätä sopivaan käynnistystiedostoon, jotta se suoritettaisiin aina järjestelmän käynnistyessä. Aseta ympäristömuuttuja LOCALNET tai korvaa se omalla sisäverkon nimellä tai osoitteella, esimerkiksi 192.168.0.0/255.255.255.0

/etc/exports[muokkaa]

Asetustiedoston /etc/exports avulla määritellään, mitkä paikalliset tiedostojärjestelmät on mahdollista liittää muualla sijaitsevien koneiden tiedostojärjestelmiin. Tiedoston syntaksi on yksinkertainen:

/hakemisto      sallitut_koneet(liitosparametrit)

Esimerkiksi:

/varasto        192.168.0.0/255.255.255.0(rw)

Sallisi /varasto -niminen paikallinen hakemiston liittämisen verkosta 192.168.0.0/255.255.255.0 (eli koneet, joiden ip on välillä 192.168.0.0 - 192.168.0.255 saavat tehdä liitoksen). Kun /etc/exports -tiedosto on kirjoitettu halutunlaiseksi, käynnistetään nfs-palvelin (vaikkapa /etc/init.d/nfs-kernel-server start). Liitosparametrejä:

  • rw = Luku- ja kirjoitusoikeudet
  • ro = Vain lukuoikeudet
  • no_root_squash = Oletuksena kun asiakaskoneen root-käyttäjä hakee tiedostoja, käsitellään ne nobody-käyttäjänä palvelimella. Jos no_root_squash on käytössä, on asiakaskoneen root-käyttäjällä samat oikeudet jakoon kuin palvelinkoneen root-käyttäjällä.
  • no_subtree_check = Jos vain osa tallennusmediasta (esim. levyasema) on jaettu, "subtree checking" tarkistaa että asiakaskoneelta pyydetty tiedosto on osa jaettua hakemistoa. no_subtree_checkin nopeuttaa toimintaa jos koko tallennusmedia on jaettu.
  • sec = Määrittelee tietoturvatason kerberosta käyttäen. Oletusarvoisesti NFS sallii salakuuntelun, datan muuntamisen jne. (vanhoilla kerneleillä eri syntaksi)
  • sync = Kuittaa muutokset asiakaskoneelle vasta sitten, kun ne on fyysisesti kirjoitettu palvelinkoneen levylle (vrt sync-komento). Sync on oletusasetus, ja sen määritteleminen erikseen aiheuttaa varoituksen.
  • wdelay = Palvelin viivästyttää levylle kirjoittamista, jos se epäilee että toinen pyyntö on kiireellisempi. Tämä voi parantaa suorityskykyä vähentämällä erillisten kirjoituskertojen määrää.
  • async = Syncin vastakohta, mahdollistaa muutosten kuittaamisen asiakaskoneelle jo ennen kuin ne on kokonaan kirjoitettu levylle. Nopeuttaa toimintaa, mutta saattaa vikatilanteessa johtaa tietojen katoamiseen. Asyncin määritteleminen aiheuttaa varoituksen.

Liitosparametrit on kuvattu tarkemmin exportsin man-sivulla (man exports).

Jaettavalle hakemistolle voi jossain tapauksissa olla järkevää asettaa sticky bit esimerkiksi komennolla chmod 1777 /home/nfsjako jossa asetetaan kaikille kaikki oikeudet ja lisäksi sticky bit. Hakemistoon asetettu sticky bit tarkoittaa että vain tiedoston omistaja voi poistaa tiedoston kyseisestä hakemistosta.

Kun tiedostoa on muutettu, otetaan muutokset käyttöön komennolla

exportfs -rv

Jaon parametrit saa näkyviin komennolla

exportfs -v

/etc/hosts.allow ja /etc/hosts.deny[muokkaa]

/etc/hosts.allow on asetustiedosto, jossa listataan koneet joilla on oikeus yhdistää palvelimelle ja vastaavasti hosts.denyssä listataan ne, joilla ko. oikeutta ei ole. Oletuksena kaikilla koneilla paitsi hosts.denyssä listatuilla on yleensä oikeus yhdistämiseen. On tavallista kieltää kaikki yhteydet tiedostossa hosts.deny, jolloin seuraavat rivit tiedostossa /etc/hosts.allow sallivat nfs:n käytön tietyille koneille:

portmap:  ip,ip2
lockd:  ip,ip2
rquotad: ip,ip2
mountd: ip,ip2
statd: ip,ip2

Samalla tavalla voi hosts.denyssä estää tiettyjä koneita käyttämästä nfs:ää. Tiedostoissa voi myös sallia tai kieltää käytön esimerkiksi verkottain: 192.168.0.0/255.255.0.0 sallii yhteydet kaikista paikallisverkoista, joiden ip-osoitteet alkavat 192.168. Katso lähemmin man hosts_access (Tcpwrappers).

NFS-palvelun käynnistäminen[muokkaa]

NFS:ää käytettäessä on oltava käynnistettynä seuraavat palvelut:

  1. nfs (tai nfs-common)
  2. portmap
  3. nfslock
  4. rpcidmapd

Palvelun käynnistäminen onnistuu initin tyypistä riippuen komennolla /etc/init.d/palvelunnimi tai /etc/rc.d/palvelunnimi esimerkiksi

/etc/init.d/nfs start

Joissain jakeluissa toimii myös

service nfs start

Käynnissä olevat palvelut voi tarkistaa komennolla

rpcinfo -p

Tarkempia tietoja mm. palveluiden käyttämistä porteista saa komennolla

netstat -tupa

Jaossa olevat hakemistot voi tarkistaa komennolla

showmount -e

Liittäminen asiakaskoneessa[muokkaa]

Aluksi asiakaskoneessa on käynnistettävä portmap- ja rpcidmapd-palvelut esimerkiksi komennolla

/etc/init.d/portmap start
/etc/init.d/rpcidmapd start

tai

service portmap start
service rpcidmapd start

NFS-jaot ovat siitä mukavia, että ne voidaan liittää ja irrottaa kuin mikä tahansa muukin tiedostojärjestelmä. Tiedostojärjestelmän tyyppi on nfs ja siihen viitataan muodossa palvelin:polku, esimerkiksi palvelimelta, jonka ip on 192.168.0.1 liitettäisiin hakemisto /varasto seuraavasti:

mount -t nfs 192.168.0.1:/varasto /mnt/varasto

Vastaavasti liitoksen voi tehdä /etc/fstabissa seuraavasti:

192.168.0.2:/varasto  /mnt/varasto  nfs   users,rw,auto,intr   0 0

Users-parametri sallii kaikkien käyttäjien liittää ja irrottaa jaon, rw lisää luku- ja kirjoitusoikeudet ja auto aiheuttaa automaattisen liittämisen järjestelmän käynnistyessä. Intr-parametri taas mahdollistaa nfs-kutsun peruuttamisen, kun palvelin ei vastaa.

Samat nfs-jaot voi liittää useampaan eri hakemistoon mount-komennon valitsimella --bind.

HUOM!

Liitettäessä NFS-jakoa, ei osoite jaettavaan tiedostoon välttämättä ole sama kuin SMB:llä. Mikäli polku jaettavaan kohteeseen on väärin, valittaa palvelin hieman harhaanjohtavasti käyttäjäoikeuksista tyyliin:

 mount_nfs: can’t access /jako/nettikansio: Permission denied


Käyttäjän oikeudet[muokkaa]

Käyttäjän oikeudet NFS-jaolla määritellään käyttäjätunnuksen UID:n (tunnistenumeron) mukaan, tunnuksen nimeä ei tarkisteta. Jos siis käyttäjät on luotu itsenäisesti eri koneille, oikeuksia annetaan satunnaisen käyttäjän oikeuksien mukaan.

Kaikkien asiakaskoneiden käyttäjätunnukset on siis luotava niin, että niillä on samat UID:t ja GID:t (ryhmien tunnistenumerot) kuin palvelinkoneella, ainakin niiden tunnusten ja ryhmien osalta, jotka omistavat tai saavat käyttää jaon tiedostoja (jos jaossa ei ole järjestelmätiedostoja, järjestelmä-UID:t saavat erota, mikä voi olla oleellista jos käytössä on eri jakeluita tai jopa kokonaan eri käyttöjärjestelmiä).

NIS- tai LDAP-palveluiden ollessa käytössä UID-numerot ovat valmiiksi samat kaikissa koneissa. Tietyn tunnistenumeron omaavan käyttäjän voi luoda useradd-komennolla seuraavasti:

useradd -u numero nimi

Jonka jälkeen salasana asetetaan komennolla passwd:

passwd nimi

Sopivat osat palvelimen passwd-tiedostoa voi myös kopioida uusille koneille ja lisätä niiden passwd-tiedostoihin ennen käyttäjätunnusten luomista (ensimmäinen tunnus jouduttaneen tässä tapauksessa määrittelemään uudestaan).

Tietoturva[muokkaa]

NFS-järjestelmä käyttää tavallisesti asiakaskoneen antamia UID- ja GID-arvoja (käyttäjä- ja ryhmätunnuksia). Asiakaskoneen ylläpitäjä (root) voi siis esiintyä minä tahansa palvelinkoneen käyttäjänä NFS-jakoa käyttäessään ja tämä koskee myös verkkoon liitettyä vierasta konetta, sikäli kun se voi käyttää ip-numeroa, jolle on määritelty oikeus käyttää NFS-jakoa. NFS-jako on siis lähtökohdiltaan täysin turvaton.

Oletusasetuksena on kuitenkin, että UID 0 (root) muunnetaan käyttäjätunnukseksi nobody, jolloin asiakaskoneen ylläpitäjä ei pääse muuttamaan tiedostoja, jotka ovat root-tunnuksen omistuksessa ja joihin muilla ei ole kirjoitusoikeuksia. Asetuksella all_squash asiakaskoneen tunnuksista ei välitetä, vaan kaikki käyttö hoidetaan nobody-tunnuksen oikeuksin.

NFS voi käyttää kerberos-järjestelmää varmistamaan käyttäjät, varmistamaan pakettien eheyden tai estämään salakuuntelu.


Katso myös[muokkaa]

Aiheesta muualla[muokkaa]

v  k  m
Linuxin tukemia tiedostojärjestelmiä
Btrfs | Ext2 | Ext3 | Ext4 | FAT | JFS | NFS | NTFS | ReiserFS | Reiser4 | SMB | SquashFS | XFS
v  k  m
Palvelin
 Ylläpito  SSH | Tietoturva | Käyttäjien hallinta | Systemd | iptables | Security-Enhanced Linux | AppArmor
 Palvelintyypit  Web-palvelin | Sähköposti | Tietokanta | NFS | Samba
 Komentorivi  Komentorivin perusteet | Komentorivikomennot | Bash-skriptaus
 Tekstieditoreja  nano | vi | emacs
Palvelin-luokka