The Mrežni datotečni sustav (NFS) je distribuirano rješenje za pohranu. To je protokol datotečnog sustava koji omogućuje montiranje udaljenih direktorija na lokalni poslužitelj i njegovo korištenje kao da je lokalna pohrana. NFS omogućuje većem broju klijenata dijeljenje udaljene pohrane. Dobro je prilagođen za okruženja koja redovito zahtijevaju zajedničke resurse. NFS je izgrađen na sustavu ONC RPC (Open Network Computing Remote Procedure Call). To je otvoreni standard definiran u RFC-u (Request for Comments). To omogućuje svakome implementaciju protokola.
U ovom vodiču, proći ćemo kroz korake postavljanja i konfiguriranja NFS montiranja na Ubuntu 20.04.
Preduvjeti
Kao što opis NFS-a sugerira, postoje dva dijela NFS konfiguracije:
-
Host: Fizički pohranjuje podatke i dijeli pohranu s „klijentskim” sustavima.
-
Klijent: Sustav koji se povezuje s „hostom” i koristi udaljenu pohranu kao da je lokalna.
Za našu demonstraciju koristit ćemo dva poslužitelja, oba konfigurirana s Ubuntu 20.04. Evo jednostavnog vodiča o tome kako postaviti svoj Ubuntu poslužitelj. Kroz vodič, ovi poslužitelji će se nazivati host i klijent. Imajte na umu da će radnja za klijenta biti ista čak i ako ih ima više od jednog.
Poslužiteljima su dodijeljene sljedeće IP adrese. Ovi poslužitelji su smješteni kod CloudSigma:
-
host: 31.171.240.79
-
klijent: 31.171.250.109
Obavezno ih zamijenite odgovarajućim IP adresama.
Instalacija NFS-a
NFS je lako dostupan iz službenih Ubuntu repozitorija. Postoje različiti softverski paketi za host i klijentske sustave.
-
Instalacija NFS-a na hostu
Na hostu su nam potrebne komponente koje osposobljavaju računalo da služi kao NFS host. Dolazi u obliku paketa nfs-kernel-server. Ubuntu koristi APT kao upravitelj paketa. Prvo pokrenite terminal i ažurirajte APT bazu podataka paketa:
|
1 |
host$ sudo apt update |

Zatim instalirajte nfs-kernel-server paket. Ako je potrebno, APT će se pobrinuti za sve dodatne ovisnosti:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Instalacija NFS-a na klijentu
Na klijentskom sustavu, potrebna nam je funkcionalnost za povezivanje s host direktorijima preko mreže. To ne zahtijeva funkcionalnost NFS poslužitelja. Na Ubuntuu, to je pakirano u paket nfs-common. Ažurirajte APT bazu podataka paketa:
|
1 |
client$ sudo apt update |

Zatim instalirajte nfs-common paket:
|
1 |
$ sudo apt install nfs-common |

Dijeljeni direktoriji na hostu
Zatim ćemo podijeliti dva zasebna direktorija, svaki s različitom konfiguracijom. Demonstrirat ćemo dva ključna načina na koja NFS montiranja rade s obzirom na pristup superkorisnika. Prema zadanim postavkama, superkorisnici imaju ovlasti raditi bilo što na cijelom sustavu. Međutim, direktoriji montirani putem NFS-a nisu dio sustava na kojem su montirani. NFS poslužitelj će odbiti izvršiti bilo koju operaciju koja zahtijeva privilegije superkorisnika. Ovo se ograničenje prevodi u to da klijenti nemaju ovlasti za pisanje, ponovno dodjeljivanje vlasništva i druge zadatke superkorisnika na NFS montiranjima.
Moguće je dopustiti određenim pouzdanim korisnicima obavljanje ovih zadataka na montiranim datotečnim sustavima. Međutim, to nosi element rizika, jer takav klijent potencijalno može dobiti puni pristup hostu. To se može ublažiti pravilnim upravljanjem korisničkim dozvolama. Na Linuxu, datoteka sudoers kontrolira sve korisničke privilegije na sustavu. Za dodatne informacije, možete pogledati naš vodič o tome kako konfigurirati Linux sudoers datoteku.
-
Montiranje opće namjene
Prvi primjer bit će NFS montiranje opće namjene sa zadanim ponašanjem NFS-a. U ovom pristupu, klijentu je izuzetno teško izvoditi radnje superkorisnika na montiranim direktorijima. Ova vrsta NFS montiranja uobičajena je za pohranu datoteka, učitavanje pomoću CMS-a (Content Management System) ili dijeljenje projektnih datoteka itd.
Sljedeće korake potrebno je izvršiti na host sustavu. Prvo stvorite direktorij za dijeljenje s oznakom nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Budući da je direktorij kreiran s sudo privilegijom, vlasnik će biti root:
|
1 |
$ ls -la /var/nfs/general |

Kao zadana konfiguracija, NFS će prevesti svaku root operaciju s klijentske strane u nobody:nogroup vjerodajnice iz sigurnosnih razloga. Radi dosljednosti, promijenite vlasništvo nad direktorijem kako bi odgovaralo vjerodajnicama:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Početni direktorij
Drugi primjer je omogućiti da početni direktorij host korisnika bude dostupan klijentima. Pouzdani administratori s odabranih klijenata mogu mu pristupiti radi praktičnog upravljanja korisnicima. /home direktorij postoji prema zadanim postavkama, pa nema potrebe za kreiranjem bilo kakvog direktorija. Što se tiče dopuštenja direktorija, nema potrebe za bilo kakvim promjenama jer će to uzrokovati više problema nego koristi.
Konfiguriranje NFS izvoza
Direktoriji za dijeljenje su sada kreirani. Zatim se NFS mora konfigurirati kako bi postali dostupni klijentima. NFS koristi konfiguracijsku datoteku za praćenje koji se direktoriji dijele. Otvorite sljedeću NFS konfiguracijsku datoteku u tekstualnom uređivaču po vašem izboru:
|
1 |
host$ sudo nano /etc/exports |

Odjeljak s komentarima u datoteci opisuje opću sintaktičku strukturu konfiguracije. Ukratko, svaki direktorij mora biti deklariran u sljedećem formatu:
|
1 |
$ <direktorij> <klijent>(<opcija_1>,<opcija_2>,...,<opcija_N>) |
Za dva direktorija koja smo odlučili podijeliti, konfiguracija će izgledati ovako. Oba direktorija imaju gotovo iste konfiguracijske opcije:
|
1 2 3 |
host$/var/nfs/general 31.171.250.221(rw,sync,no_subtree_check) host$ /home 31.171.250.221(rw,sync,no_root_squash,no_subtree_check) |

Evo kratkog pregleda konfiguracijskih opcija:
-
rw: Klijentu se dodjeljuje i dopuštenje za čitanje i pisanje na volumen.
-
sync: Prisiljava NFS da zapiše promjene na disk prije odgovora. To nudi stabilnije i dosljednije iskustvo. Odgovor će odražavati stvarno stanje udaljenog volumena. Međutim, operacije s datotekama bit će sporije.
-
no_subtree_check: Sprječava provjeru podstabla. Ako nije onemogućeno, hostovi će biti prisiljeni provjeravati postojanje datoteke u izvezenom stablu za svaki pojedinačni zahtjev klijenta. To može dovesti do mnogih problema, na primjer, datoteka se preimenuje dok je klijent koristi. U većini slučajeva, onemogućavanje provjere podstabla je pravi put.
-
no_root_squash: Kao što je ranije spomenuto, NFS će prevesti svaki zahtjev udaljenog root korisnika u neprivilegiranog korisnika. Ovo je namjerna sigurnosna značajka za sprječavanje neželjenog pristupa host sustavu. Međutim, korištenje ove opcije onemogućit će ovo ponašanje.
Spremite konfiguracijsku datoteku i izađite iz uređivača. Kako bi promjene stupile na snagu, ponovno pokrenite NFS poslužitelj:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Prilagođavanje vatrozida
Za svaki poslužitelj, ispravna konfiguracija vatrozida je obavezna. Pod pretpostavkom da ste odgovarajuće konfigurirali svoj Ubuntu 20.04 poslužitelj, UFW vatrozid bi trebao biti aktivan. To je jednostavan, ali moćan vatrozid s kojim dolazi većina Linux distribucija. Za početnike, evo brzog vodiča koji objašnjava UFW, kako radi i uobičajenu upotrebu UFW-a s primjerima.
Prema zadanim postavkama, vatrozid će blokirati sav dolazni i odlazni promet. Kako bismo osigurali da se NFS poslužitelj može ispravno povezati i razmjenjivati promet, moramo dodati iznimku za NFS protokol. Najprije provjerite status vatrozida. Također će ispisati sva trenutna pravila:
|
1 |
host$ sudo ufw status |

Kao što vidimo, sustavu je dopušten samo SSH promet. Moramo dodati iznimku kako bismo omogućili NFS promet.
U većini slučajeva, preporučuje se korištenje najrestriktivnijeg pravila koje i dalje dopušta potreban promet. Dakle, dopustit ćemo samo odabranim klijentima povezivanje s hostom:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Nakon toga ponovno provjerite status vatrozida:
|
1 |
host$ sudo ufw status |

Stvaranje točke montiranja
Poslužitelj je sada spreman dopustiti klijentskom sustavu da se poveže na NFS protokol. Zatim moramo pripremiti klijenta. Za pristup udaljenom pogonu, on mora biti lokalno montiran na klijentu. Što se tiče točke montiranja, preporučuje se korištenje namjenskog praznog direktorija.
Za dva udaljena pogona stvorite dvije zasebne točke montiranja:
|
1 |
client$ sudo mkdir -pv /nfs/general |

|
1 |
client$ sudo mkdir -pv /nfs/home |

Sada kada su točke montiranja spremne, trebate montirati udaljene pogone:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Možemo provjeriti jesu li montiranja bila uspješna. Provjerite popis svih montiranih pogona:
|
1 |
client$ df -h |

Evo ga! Udaljeni pogoni su uspješno montirani. Također možemo provjeriti iskorištenost prostora pomoću sljedeće naredbe:
|
1 |
client$ du -sh /nfs/home |

Testiranje NFS pristupa
Do sada su udaljeni pogoni bili ispravno montirani. Međutim, to neće biti od koristi ako klijent ne može čitati/pisati podatke na udaljenom pogonu. Za provjeru, stvorite lažnu datoteku na NFS montiranim pogonima. Ovdje će datoteka biti stvorena s root privilegijom kako biste testirali rade li konfiguracije specifične za root ispravno:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Zatim provjerite vlasništvo nad datotekom:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Kao što vidimo, NFS prevodi vlasnika datoteke u nobody:nogroup. Direktorij /var/nfs/ general ima vlasništvo nad nobody:nogroup, pa NFS prevodi vlasništvo nad datotekom. Vrijeme je za testiranje drugog NFS montiranog pogona:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Provjerite postojanje i vlasništvo nad datotekom:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

U ovom slučaju, NFS nije preveo vlasništvo nad datotekom. Ovaj klijent je konfiguriran tako da može obavljati administrativne radnje. Štoviše, izvorni host direktorij /home nema vlasništvo nad nobody:nogroup.
Dodatni trikovi
-
Montiranje pri pokretanju sustava
Do sada smo morali ručno montirati NFS pogon na lokalni direktorij. Ako se ne demontiraju, NFS montirani pogoni trajat će dok se sustav ponovno ne pokrene. Ako se NFS pogon redovito koristi, ručno montiranje postaje izuzetno zamorno. U slučaju višestrukih NFS montiranja, nepraktično ih je ručno montirati jedan po jedan.
Pomoću datoteke /etc/fstab možemo automatizirati proces. Tijekom pokretanja sustava, ova će skripta automatski montirati NFS pogone na ciljne točke montiranja. Otvorite datoteku u uređivaču teksta:
|
1 |
client$ sudo nano /etc/fstab |

Dodajte sljedeće retke za montiranje udaljenih pogona host sustava:
|
1 2 3 |
client$ 31.171.240.236:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 client$31.171.240.236:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0 |

Spremite skriptu i zatvorite uređivač teksta. Pri sljedećem pokretanju sustava, Linux će automatski montirati udaljene pogone. Imajte na umu da pokretanje sustava može potrajati neko vrijeme dok se povezuje i montira pogone.
-
Demontiranje NFS pogona
Ako udaljeni pogon više nije potreban, demontiranje pogona uklonit će ih s klijentskog sustava. Prije demontiranja, međutim, provjerite da nijedna aplikacija/skripta ne koristi udaljeni pogon. Demontiranje NFS montiranih pogona slično je demontiranju bilo kojih drugih montiranih pogona. U ovom slučaju, demontirajte /nfs/home i /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/općenito |

Zatim provjerite radnju:
|
1 |
klijent$ df -h |

Završne misli
U ovom vodiču izradili smo NFS poslužitelj i prikazali neke od osnova NFS udaljenog dijeljenja. Ako ste zainteresirani za implementaciju NFS-a u produkcijskom okruženju, imajte na umu da NFS protokol nije šifriran. To može predstavljati određene sigurnosne probleme, na primjer, napade čovjeka u sredini (man-in-the-middle).
Sretno s radom!
Komentari
Još nema komentara. Budite prvi.