Hogyan használhatunk távoli NFS fájlmegosztást Debian rendszerű számítógépünkön helyi könyvtárként

botond küldte be 2018. 07. 14., szo - 17:13 időpontban

Tartalom

 

Bevezető

A leírásból megtudhatjuk hogyan csatolhatunk Debian rendszerű számítógépünkre távoli NFS megosztást, és használhatjuk helyi tárhelyként. Ebben a példában két Debian 8 (Jessie) rendszerű laptopon mutatom be az NFS használatát: Az egyiken létrehozunk egy NFS megosztást, a másikon pedig bemountoljuk a helyi fájlrendszerbe.

Korábban már készítettem egy hasonló leírást, ahol a bind mount módszerrel csatoltam be a webszerver megfelelő tárhely könyvtárába egy másik partíción lévő könyvtárstruktúrát, amivel kibővíthettem az adott weboldal webtárhelyét, most pedig egy távoli gépen lévő NFS megosztást fogunk becsatolni a számítógép helyi fájlstruktúrájába, és úgy fogjuk tudni használni, mintha az a számítógép saját merevlemezén lenne.

Itt annyi különbség lesz még, hogy most nem webszerveren dolgozunk, hanem a két Debian 8 (Jessie) rendszerű laptopomon mutatom be az NFS használatát. Így ezért is tettem ezt a leírást ebbe az általános jellegű fájlrendszer kategóriába. Ettől függetlenül természetesen ez a módszer felhasználható komplett webszerver környezetekben is, ha például tárhelyet kell bővíteni, vagy több szerverből álló struktúrákkal dolgozunk.

Elsőként definiáljuk a két számítógépet és azok IP-címeit. Nálam mindkét gép a routerem mögött van, tehát ugyanabban a helyi hálózatban vannak. A szerver gép, amin kialakítjuk az NFS megosztásokat, és a kliens gép, amin pedig becsatoljuk a helyi fájlrendszerbe azokat.

  • NFS szerver gép: IP-cím: 192.168.1.101, hosztnév: bnd-laptop
  • NFS kliens gép: IP-cím: 192.168.1.102, hosztnév: bnd-laptop2

Ebben a leírásban tehát ezzel a két géppel mutatom be a feladatot.

 

 

NFS szerver telepítése, konfigurálása

Lépjünk be a szerver gépre root-ként (ahonnan meg szeretnénk osztani a könyvtárakat), majd futtassuk az alábbi apt-get parancsot:

apt-get install nfs-kernel-server nfs-common

Az NFS szerver telepítésekor létrejönnek a konfigurációs fájlok is. Ezután exportáljuk ki a megfelelő könyvtárakat (megosztásokat).

Az NFS segítségével többféle módban is készíthetünk megosztásokat:

  • Nyilvános megosztás: Csak olvasható, bárki számára elérhető (bemountolható) megosztás (root_squash, all_squash)
  • Root jogok megtartása: Írható, olvasható, a kliens gépen végrehajtott fájlműveletek a szerveren is ugyan akként a felhasználóként hajtódnak végre (no_all_squash, no_root_squash)
  • Root jogok elvétele: A kliens gépen végrehajtott fájlműveletek a szerveren a nobody felhasználóként kerülnek végrehajtásra. Akkor hasznos, ha a két gépen nehezen vagy egyáltalán nem tudjuk összeegyeztetni a felhasználókat és az UID-eket (root_squash, all_squash) .

Ebben a példában bemutatom mind a három megosztási típust három külön alkönyvtárral. Az egyszerűség kedvéért az NFS  szerver /home könyvtárában hozzunk létre egy nfs alkönyvtárat, majd abban három másikat a megosztási módok szemléltetéséhez:

mkdir -p /home/nfs/public
mkdir -p /home/nfs/root
mkdir -p /home/nfs/no-root

Állítsuk át a könyvtárakat a nobody:nogroup-ra, majd a chmod paranccsal adjunk megfelelő jogosultságot rá:

chown nobody:nogroup /home/nfs/*
chmod 0755 /home/nfs/*

Ezután szerkesszük a konfigurációs fájlban a megosztásokat az NFS szerveren:

nano /etc/exports

És adjuk hozzá a három megosztást a fájlhoz:

/home/nfs/public	192.168.1.102(ro,no_subtree_check,root_squash,all_squash)
/home/nfs/root		192.168.1.102(rw,sync,no_subtree_check,no_all_squash,no_root_squash)
/home/nfs/no-root	192.168.1.102(rw,sync,no_subtree_check,root_squash,all_squash)
Az IP-címnél a kliens gép címét kell megadni, ahonnan el szeretnénk érni (bemountolni) a megosztást. Az áttekinthetőség kedvéért itt most én a fent definiált kliens gépem IP-címét adtam meg. Ha több helyről szeretnénk egy időben elérni a megosztást, akkor itt CIDR formátumban tartományokat is megadhatunk, így például akár a teljes LAN hálózatunk tartománya is megadható, hogy bármelyik gépről elérhetőek legyenek a megosztások (pl.: 192.168.1.0/24). Azonban a biztonság érdekében célszerű minél jobban leszűkíteni az IP-címeket a célállomások címeire, hogy illetéktelen gépek ne férhessenek az NFS-hez.

A sync opció hatására a rendszer csak az adatok lemezre írása után válaszol az NFS-kérelmekre, így megakadályozza az adatok sérülését, ha a kiszolgáló újraindul. Ha a szinkronizálás be van kapcsolva, a kiszolgáló csak akkor nyugtázza az adatokat, ha azok ki lettek írva.

A no_subtree_check opció megakadályozza, hogy az NFS kérésekkor a rendszer ellenőrizze a teljes megosztási alkönyvtár struktúrát, ami problémát okozna, ha például egy kért fájlt átneveznek, amíg az az ügyfél gépén meg van nyitva.

 

Indítsuk újra az NFS szervert:

service nfs-kernel-server restart

Ellenőrízhetjük az exportjainkat:

showmount --exports --no-headers
/home/nfs/no-root 192.168.1.102
/home/nfs/root    192.168.1.102
/home/nfs/public  192.168.1.102

 

NFS kliens telepítése, konfigurálása

Lépjünk be a kliens gépre root-ként, és telepítsük a szükséges csomagot:

apt-get install nfs-common

Helyi könyvtárstruktúra létrehozása az NFS megosztások számára

Hozzuk létre a könyvtárakat, ahova be szeretnénk mountolni a megosztásokat. Az áttekinthetőség kedvéért a kliens számítógépen is alakítsunk ki egy hasonló könyvtárstruktúrát, mint a szerveren:

mkdir -p /home/nfs-remote/public
mkdir -p /home/nfs-remote/root
mkdir -p /home/nfs-remote/no-root
Itt szándékosan adtam meg az eltérő "nfs-remote" könyvtárnevet, így a mountolásnál nem fogjuk összekeverni a távoli fájlrendszereket a helyi csatolási pontokkal a paraméterek megadásakor.

Távoli NFS megosztások kézi (ideiglenes) mountolása

A mount parancs segítségével ideiglenesen bemountolhatjuk a megosztásainkat, amik a gép leállításáig érvényben maradnak:

mount 192.168.1.101:/home/nfs/public /home/nfs-remote/public/
mount 192.168.1.101:/home/nfs/root /home/nfs-remote/root/
mount 192.168.1.101:/home/nfs/no-root /home/nfs-remote/no-root/

Ellenőrizzük a kliensoldali művelet sikerességét:

nfsstat -m

És az eredménynek ilyesminek kell lennie:

/home/nfs-remote/no-root from 192.168.1.101:/home/nfs/no-root
 Flags: rw,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101

/home/nfs-remote/public from 192.168.1.101:/home/nfs/public
 Flags: rw,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101

/home/nfs-remote/root from 192.168.1.101:/home/nfs/root
 Flags: rw,relatime,vers=4.0,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101

Távoli NFS megosztások perzisztens mountolása

Ha nem csak a gép kikapcsolásáig szeretnénk megtartani ezeket a csatolásokat, hanem újraindítás után is szükségünk lesz rájuk, akkor a /etc/fstab fájlban kell rögzíteni őket.

Ehhez először szűntessük meg a jelenlegi csatolásokat, hogy tesztelni tudjuk a működést:

umount /home/nfs-remote/*

Majd nyissuk meg a /etc/fstab fájlt és adjuk hozzá az alábbi 3 sort:

192.168.1.101:/home/nfs/public	/home/nfs-remote/public		nfs		ro,sync,hard,intr  0     0
192.168.1.101:/home/nfs/root	/home/nfs-remote/root		nfs		rw,sync,hard,intr  0     0
192.168.1.101:/home/nfs/no-root	/home/nfs-remote/no-root	nfs		rw,sync,hard,intr  0     0

Hajtsuk végre az fstab fájl csatolásait:

mount -a

Ezután újra ellenőrízhetjük a csatolás sikerességét:

nfsstat -m

És a kimenetnek (majdnem) ugyanannak kell lennie, mint a fenti ellenőrzésnél, annyi különbséggel, hogy itt a public megosztást ro (readonly) módban csatoltuk, így már a kliens gép utasítja el a fájlrendszer felé küldött írási kérelmeket.

 

 

Tesztelés

Most, hogy már megvannak az exportjaink a szerver gépen és be is csatoltuk őket a kliens gépen, nem maradt más hátra, mint hogy ki is próbáljuk az NFS működését, viselkedését mindhárom megosztás esetén.

Ha megnézzük a helyi csatolási pontokat a df paranccsal, akkor látszik is a három megosztás a másik gépről. A képen a felső terminál ablakban van tehát az NFS kliens (bnd-laptop2), az alsóban pedig az NFS szerver (bnd-laptop), ahol a helyi /home/nfs/ könyvtárat látjuk és benne a megosztott alkönyvtárakat.

NFS fájlmegosztás - csatolási pontok ellenőrzése

A következő lépésben a lenti ablakban (NFS szerveren) létrehozunk egy fájlt a csak olvasható "public" megosztásban, majd ezt fent a kliensben ellenőrizzük, utána pedig a kliensből megkíséreljük letörölni ezt a fájlt:

NFS fájlmegosztás - Csak olvasható fájl létrehozása a szerveren

Ahogyan azt várhattuk is, nem sikerült a kliensen törölni a fájlt, mivel írásvédett a "public" megosztás.

Ezután a maradék két írható-olvasható megosztást teszteljük. A fenti kliens ablakban a "no-root" megosztásban hozunk létre egy fájlt, majd lent az NFS szerveren figyeljük meg mi történik:

NFS fájlmegosztás - Írás próba a no-root megosztásban

A fájl létrejött, és megfigyelhetjük, hogy a tulajdonosa a nobody:nogroup, annak ellenére, hogy root-ként hoztuk létre. Mindez azért történt, mert ezt a megosztást a "root_squash,all_squash" opciókkal hoztuk létre, aminek hatására a megosztásban végzett bármilyen kliens oldali módosítás az NFS szerveren a  nobody:nogroup tulajdonnal kerül végrehajtásra.

Az utolsó teszt példában a "root" megosztásban hozunk létre egy próba fájlt:

NFS fájlmegosztás - Írás próba a root megosztásban

Itt pedig a felső kliens terminálban root-ként létrehozott fájl az alsó szerveren is root-ként került végrehajtásra, azaz létrehozásra.

 

Konklúzió

Az NFS megosztásokkal tehát több árnyalatban lehet kezelni a távoli fájlrendszereket, attól függően, hogy éppen mire van szükség. Ha például csak egy telepítőkészletet szeretnénk megosztani, vagy egy zenegyűjteményt, akkor arra kiváló választás a "csak olvasható mód" (root_squash, all_squash opciók), így nem kell attól tartanunk, hogy a kliensek módosítják a könyvtár tartalmát.

Ha pedig mondjuk egy több gépből álló céges belső hálózatot üzemeltetünk, akkor a "root mód" (no_all_squash, no_root_squash opciók) a megfelelő választás, amivel minden felhasználó számára létrehozhatjuk a saját home könyvtárát a cég központi számítógépén, így nem kell külön minden gépen fenntartani, karbantartani a felhasználók könyvtárait, hanem egy helyen lehet őket központilag kezelni.

 

Felhasznált források

A folyamat végrehajtásához, teszteléséhez és a leírás elkészítéséhez az alábbi források kerültek felhasználásra: