A Network File System (NFS) egy elosztott tárolási megoldás. Ez egy olyan fájlrendszer-protokoll, amely lehetővé teszi távoli könyvtárak csatolását a helyi szerverre, és úgy használja azokat, mintha helyi tárolók lennének. Az NFS lehetővé teszi több kliens számára a távoli tárhely megosztását. Kiválóan alkalmas olyan környezetekhez, amelyek rendszeresen igényelnek megosztott erőforrásokat. Az NFS az ONC RPC (Open Network Computing Remote Procedure Call) rendszerre épül. Ez egy nyílt szabvány, amelyet az RFC (Request for Comments) határoz meg. Ez lehetővé teszi bárki számára a protokoll megvalósítását.
Ebben az útmutatóban végigmegyünk az NFS-csatolás beállításának és konfigurálásának lépésein Ubuntu 20.04-en.
Előfeltételek
Ahogy az NFS leírása is sugallja, az NFS konfigurációjának két része van:
-
Host: Fizikailag tárolja az adatokat, és megosztja a tárhelyet a „kliens” rendszerekkel.
-
Kliens: Az a rendszer, amely a „hosthoz” csatlakozik, és úgy használja a távoli tárhelyet, mintha az helyi lenne.
A bemutatóhoz két szervert fogunk használni, mindkettő Ubuntu 20.04-gyel van konfigurálva. Íme egy egyszerű útmutató arról, hogyan állítsd be az Ubuntu szerveredet. Az útmutató során ezekre a szerverekre úgy hivatkozunk, mint a host és a client. Vedd figyelembe, hogy a client esetében a művelet ugyanaz lesz, még akkor is, ha egynél több van.
A szerverekhez a következő IP-címek vannak hozzárendelve. Ezeket a szervereket a CloudSigma hosztolja:
-
host: 31.171.240.79
-
client: 31.171.250.109
Gondoskodj róla, hogy kicseréld őket a megfelelő IP-címekre.
Az NFS telepítése
An NFS könnyen elérhető a hivatalos Ubuntu tárolókból. Különböző szoftvercsomagok léteznek a host és a client rendszerekhez.
-
Az NFS telepítése a hoston
A hoston azokra az összetevőkre van szükségünk, amelyek felkészítik a gépet arra, hogy NFS host-ként szolgáljon. Ez a nfs-kernel-server csomag formájában érkezik. Az Ubuntu az APT csomagkezelőt használja. Először indítsd el a terminált, és frissítsd az APT csomagadatbázist:
|
1 |
host$ sudo apt update |

Ezután telepítsd az nfs-kernel-server csomagot. Ha szükséges, az APT gondoskodik a további függőségekről:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Az NFS telepítése a kliensen
A client rendszeren arra a funkcióra van szükségünk, amellyel csatlakozhatunk a host könyvtáraihoz a hálózaton keresztül. Ehhez nincs szükség az NFS-szerver funkcionalitásra. Ubuntun ez a nfs-common csomagba van csomagolva. Frissítsd az APT csomagadatbázist:
|
1 |
client$ sudo apt update |

Ezután telepítsd az nfs-common csomagot:
|
1 |
$ sudo apt install nfs-common |

Megosztott könyvtárak a hoston
Ezután két különálló könyvtárat fogunk megosztani, mindkettőt eltérő konfigurációval. Bemutatjuk az NFS-csatolások működésének két kulcsfontosságú módját a szuperfelhasználói (superuser) hozzáférés tekintetében. Alapértelmezés szerint a szuperfelhasználóknak joguk van bármit végrehajtani a teljes rendszeren. Az NFS-csatolt könyvtárak azonban nem részei annak a rendszernek, amelyre csatolva vannak. Az NFS-szerver elutasít minden olyan műveletet, amely szuperfelhasználói jogosultságot igényel. Ez a korlátozás azt jelenti, hogy a klienseknek nincs joguk írni, tulajdonjogokat átruházni és egyéb szuperfelhasználói feladatokat végezni az NFS-csatolásokon.
Lehetséges engedélyezni bizonyos megbízható felhasználók számára, hogy elvégezzék ezeket a feladatokat a csatolt fájlrendszereken. Ez azonban kockázattal jár, mivel egy ilyen client potenciálisan teljes hozzáférést kaphat a host-hoz. Ez mérsékelhető a megfelelő felhasználói jogosultságok kezelésével. Linuxon a sudoers fájl vezérli a rendszer összes felhasználói jogosultságát. További információért tekintsd meg az erről szóló oktatóanyagunkat: hogyan konfigurálható a Linux sudoers fájl.
-
Általános célú csatolás
Az első példa egy általános célú NFS-csatolás lesz, alapértelmezett NFS-viselkedéssel. Ebben a megközelítésben a kliens számára rendkívül nehéz szuperfelhasználói műveleteket végrehajtani a csatolásokon. Az ilyen típusú NFS-csatolásokat gyakran alkalmazzák fájltárolásra, CMS (tartalomkezelő rendszer) segítségével történő feltöltésre, projektfájlok megosztására stb.
A következő lépéseket a host rendszeren kell elvégezni. Először hozz létre egy megosztásra szánt könyvtárat nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Mivel a könyvtár sudo jogosultsággal lett létrehozva, a tulajdonos a root:
|
1 |
$ ls -la /var/nfs/general |

Alapértelmezett konfigurációként az NFS minden kliensoldali root műveletet lefordít a(z) nobody:nogroup hitelesítési adatokra biztonsági okokból. A konzisztencia érdekében módosítsa a könyvtár tulajdonosát, hogy az megfeleljen a hitelesítési adatoknak:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Saját könyvtár
A második példa az, hogy elérhetővé tesszük a host felhasználó saját könyvtárát a kliensek számára. A kiválasztott kliensek megbízható adminisztrátorai hozzáférhetnek a felhasználók kényelmes kezeléséhez. A /home könyvtár alapértelmezés szerint létezik, így nincs szükség új könyvtár létrehozására. Ami a könyvtár jogosultságait illeti, nincs szükség semmilyen módosításra, mivel az több problémát okozna, mint hasznot.
Az NFS exportálások konfigurálása
A megosztandó könyvtárak most már létrejöttek. Ezután az NFS-t kell konfigurálni, hogy elérhetővé tegye őket a kliensek számára. Az NFS egy konfigurációs fájlt használ a megosztandó könyvtárak nyomon követésére. Nyissa meg a következő NFS konfigurációs fájlt a választott szövegszerkesztővel:
|
1 |
host$ sudo nano /etc/exports |

A fájl megjegyzés szekciója leírja a konfiguráció általános szintaktikai szerkezetét. Röviden, minden könyvtárat a következő formátumban kell deklarálni:
|
1 |
$ <könyvtár> <kliens>(<opció_1>,<opció_2>,...,<opció_N>) |
A két megosztásra kiválasztott könyvtár esetében a konfiguráció így fog kinézni. Mindkét könyvtár szinte ugyanazokkal a konfigurációs opciókkal rendelkezik:
|
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) |

Íme a konfigurációs opciók gyors áttekintése:
-
rw: A kliens olvasási és írási jogosultságot is kap a kötethez.
-
sync: Arra kényszeríti az NFS-t, hogy a válaszadás előtt írja ki a változtatásokat a lemezre. Ez stabilabb és konzisztensebb élményt nyújt. A válasz a távoli kötet tényleges állapotát fogja tükrözni. A fájlműveletek azonban lassabbak lesznek.
-
no_subtree_check: Megakadályozza a részfa-ellenőrzést (subtree checking). Ha nincs letiltva, a gazdagépek kénytelenek lesznek ellenőrizni a fájl létezését az exportált fában a kliens minden egyes kérésénél. Ez számos problémához vezethet, például ha egy fájlt átneveznek, miközben a kliens használja azt. A legtöbb esetben a részfa-ellenőrzés letiltása a javasolt út.
-
no_root_squash: Mint korábban említettük, az NFS a távoli root felhasználótól érkező kéréseket egy nem kiemelt jogosultságú felhasználóra fordítja le. Ez egy tervezett biztonsági funkció, amely megakadályozza a gazdarendszerhez való nemkívánatos hozzáférést. Ennek az opciónak a használata azonban letiltja ezt a viselkedést.
Mentse a konfigurációs fájlt, és lépjen ki a szerkesztőből. A változtatások életbe léptetéséhez indítsa újra az NFS-szervert:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
A tűzfal beállítása
Minden szerver esetében elengedhetetlen a megfelelő tűzfal-konfiguráció. Feltételezve, hogy ennek megfelelően konfigurálta az Ubuntu 20.04 szerverét, az UFW tűzfalnak aktívnak kell lennie. Ez egy egyszerű, de hatékony tűzfal, amellyel a legtöbb Linux disztribúció rendelkezik. Kezdőknek íme egy gyors útmutató, amely elmagyarázza az UFW-t, annak működését és a gyakori UFW-használatot példákkal.
Alapértelmezés szerint a tűzfal blokkol minden bejövő és kimenő forgalmat. Annak érdekében, hogy az NFS-szerver megfelelően tudjon kapcsolódni és forgalmat bonyolítani, hozzá kell adnunk egy kivételt az NFS protokollhoz. Először ellenőrizze a tűzfal állapotát. Ez kiírja az összes jelenlegi szabályt is:
|
1 |
host$ sudo ufw status |

Amint látható, csak az SSH-forgalom engedélyezett a rendszer felé. We need to add an exception to allow NFS traffic.
A legtöbb esetben erősen ajánlott a legszigorúbb szabályt használni, amely még lehetővé teszi a szükséges forgalmat. Így csak a kiválasztott kliens(ek) számára engedélyezzük a gazdagéphez való csatlakozást:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Ezt követően ellenőrizze újra a tűzfal állapotát:
|
1 |
host$ sudo ufw status |

Csatolási pont létrehozása
A szerver most már készen áll arra, hogy engedélyezze a kliens rendszer csatlakozását az NFS-protokollhoz. Ezután elő kell készítenünk a kliens rendszert. A távoli kötet eléréséhez azt helyileg kell csatolni a kliens gépen. Csatolási pontként ajánlott egy erre a célra szolgáló üres könyvtárat használni.
A két távoli kötethez hozzon létre két különálló csatolási pontot:
|
1 |
client$ sudo mkdir -pv /nfs/general |

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

Most, hogy a csatolási pontok elkészültek, csatolnia kell a távoli köteteket:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Ellenőrizhetjük, hogy a csatolások sikeresek voltak-e. Ellenőrizze az összes csatolt kötet listáját:
|
1 |
client$ df -h |

Íme! A távoli kötetek sikeresen csatolva lettek. A helykihasználást a következő paranccsal is ellenőrizhetjük:
|
1 |
client$ du -sh /nfs/home |

Az NFS-hozzáférés tesztelése
Eddig a távoli kötetek megfelelően lettek csatolva. Ennek azonban semmi haszna, ha a kliens nem tud adatokat írni/olvasni a távoli köteten. Az ellenőrzéshez hozzon létre egy tesztfájlt az NFS-csatolás(ok)on. Itt a fájl root jogosultsággal jön létre, hogy teszteljük, a root-specifikus konfigurációk megfelelően működnek-e:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Ezután ellenőrizze a fájl tulajdonosát:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Amint látható, az NFS a fájl tulajdonosát a következőre fordítja le: nobody:nogroup. A /var/nfs/ general könyvtár tulajdonosa a nobody:nogroup, így az NFS lefordítja a fájl tulajdonjogát. Ideje tesztelni a másik NFS-csatolást:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Ellenőrizze a fájl létezését és tulajdonosát:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

Ebben az esetben az NFS nem fordította le a fájl tulajdonjogát. Ez a kliens úgy lett konfigurálva, hogy képes legyen adminisztratív műveleteket végrehajtani. Ráadásul az eredeti host könyvtár /home tulajdonosa nem a nobody:nogroup.
További trükkök
-
Csatolás rendszerindításkor
Eddig manuálisan kellett csatolnunk az NFS-kötetet egy helyi könyvtárba. Ha nem választjuk le, az NFS-csatolások a rendszer újraindításáig megmaradnak. Ha az NFS-kötetet rendszeresen használják, a manuális csatolás rendkívül fárasztóvá válik. Több NFS-csatolás esetén pedig nem praktikus őket egyenként, manuálisan csatolni.
Az /etc/fstab fájl használatával automatizálhatjuk a folyamatot. Rendszerindítás során ez a szkript automatikusan csatolja az NFS-köteteket a cél csatolási pontokra. Nyissa meg a fájlt egy szövegszerkesztőben:
|
1 |
client$ sudo nano /etc/fstab |

Adja hozzá a következő sorokat a gazdagép távoli köteteinek csatolásához:
|
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 |

Mentse el a szkriptet, és zárja be a szövegszerkesztőt. A következő rendszerindításkor a Linux automatikusan csatolja a távoli köteteket. Vegye figyelembe, hogy a rendszer indítása eltarthat egy ideig, amíg csatlakozik és csatolja a köteteket.
-
NFS-kötet leválasztása
Ha a távoli kötetre már nincs szükség, a kötetek leválasztásával eltávolíthatja azokat a kliensrendszerről. A leválasztás előtt azonban győződjön meg arról, hogy semmilyen alkalmazás vagy szkript nem használja a távoli kötetet. Az NFS-csatolások leválasztása hasonló bármely más csatolás leválasztásához. Ebben az esetben válassza le a /nfs/home és /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/általános |

Ezután ellenőrizze a műveletet:
|
1 |
kliens$ df -h |

Záró gondolatok
Ebben az útmutatóban létrehoztunk egy NFS-szervert, és bemutattuk az NFS távoli megosztás alapjait. Ha éles környezetben szeretné bevezetni az NFS-t, tartsa szem előtt, hogy az NFS protokoll nem titkosított. Ez biztonsági kockázatokat hordozhat magában, például a közbeékelődéses (man-in-the-middle) támadásokat.
Kellemes számítógépezést!
Hozzászólások
Még nincsenek hozzászólások. Legyen Ön az első.