The Network File System (NFS) je distribuované úložné riešenie. Je to protokol súborového systému, ktorý umožňuje pripojiť vzdialené adresáre na lokálny server a používať ich, akoby išlo o lokálne úložisko. NFS umožňuje viacerým klientom zdieľať vzdialené úložisko. Je vhodný pre prostredia, ktoré pravidelne vyžadujú zdieľané prostriedky. NFS je postavený na systéme ONC RPC (Open Network Computing Remote Procedure Call). Je to otvorený štandard definovaný v RFC (Request for Comments). To umožňuje komukoľvek implementovať tento protokol.
V tomto návode si prejdeme kroky nastavenia a konfigurácie pripojenia NFS na systéme Ubuntu 20.04.
Požiadavky
Ako napovedá popis NFS, konfigurácia NFS sa skladá z dvoch častí:
-
Hostiteľ: Fyzicky ukladá dáta a zdieľa úložisko s „klientskymi“ systémami.
-
Klient: Systém, ktorý sa pripája k „hostiteľovi“ a využíva vzdialené úložisko, akoby bolo lokálne.
Pre našu ukážku budeme používať dva servery, oba nakonfigurované s Ubuntu 20.04. Tu je jednoduchý návod na to, ako nastaviť váš server Ubuntu. V celom návode budeme tieto servery označovať ako hostiteľ a klient. Upozorňujeme, že akcia pre klienta bude rovnaká, aj keď ich je viac.
Serverom sú priradené nasledujúce IP adresy. Tieto servery sú hostované spoločnosťou CloudSigma:
-
hostiteľ: 31.171.240.79
-
klient: 31.171.250.109
Uistite sa, že ich nahradíte príslušnými IP adresami.
Inštalácia NFS
NFS je ľahko dostupný z oficiálnych repozitárov Ubuntu. Existujú rôzne softvérové balíky pre hostiteľa a klienta systémy.
-
Inštalácia NFS na hostiteľa
Na hostiteľovi potrebujeme komponenty, ktoré stroj vybavia na to, aby slúžil ako NFS hostiteľ. Prichádza vo forme balíka nfs-kernel-server. Ubuntu používa APT ako správcu balíkov. Najprv spustite terminál a aktualizujte databázu balíkov APT :
|
1 |
host$ sudo apt update |

Ďalej nainštalujte balík nfs-kernel-server . V prípade potreby sa APT postará o akékoľvek ďalšie závislosti:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Inštalácia NFS na klienta
Na klientskom systéme potrebujeme funkciu na pripojenie k adresárom hostiteľa cez sieť. Nevyžaduje to funkciu NFS servera. V systéme Ubuntu je to pribalené v balíku nfs-common. Aktualizujte databázu balíkov APT :
|
1 |
client$ sudo apt update |

Potom nainštalujte balík nfs-common :
|
1 |
$ sudo apt install nfs-common |

Zdieľané adresáre na hostiteľovi
Ďalej budeme zdieľať dva samostatné adresáre, každý s inou konfiguráciou. Ukážeme si dva kľúčové spôsoby, akými fungujú pripojenia NFS s ohľadom na prístup superpoužívateľa. V predvolenom nastavení majú superpoužívatelia právomoc vykonávať čokoľvek v celom systéme. Adresáre pripojené cez NFS však nie sú súčasťou systému, na ktorom sú pripojené. NFS server odmietne vykonať akúkoľvek operáciu, ktorá vyžaduje privilégiá superpoužívateľa. Toto obmedzenie znamená, že klienti nemajú právomoc zapisovať, meniť vlastníctvo a vykonávať iné úlohy superpoužívateľa na pripojeniach NFS.
Je možné povoliť určitým dôveryhodným používateľom vykonávať tieto úlohy na pripojených súborových systémoch. Prináša to však so sebou určité riziko, keďže takýto klient môže potenciálne získať plný prístup k hostiteľovi. To sa dá zmierniť správnym riadením oprávnení používateľov. V systéme Linux súbor sudoers riadi všetky privilégiá používateľov v systéme. Ďalšie informácie nájdete v našom návode na ako nakonfigurovať súbor sudoers v systéme Linux.
-
Všeobecné pripojenie
Prvým príkladom bude univerzálne pripojenie NFS s predvoleným správaním NFS. Pri tomto prístupe je pre klienta mimoriadne ťažké vykonávať akcie superpoužívateľa na pripojených úložiskách. Tento typ pripojenia NFS sa bežne nasadzuje na ukladanie súborov, nahrávanie pomocou CMS (Content Management System) alebo zdieľanie projektových súborov atď.
Nasledujúce kroky sa majú vykonať na hostiteľskom systéme. Najprv vytvorte adresár na zdieľanie s názvom nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Keďže adresár bol vytvorený s sudo oprávnením, vlastník bude root:
|
1 |
$ ls -la /var/nfs/general |

V predvolenej konfigurácii NFS preloží akúkoľvek operáciu používateľa root z klientskej strany na nobody:nogroup prihlasovacie údaje z bezpečnostných dôvodov. Kvôli konzistentnosti zmeňte vlastníctvo adresára tak, aby zodpovedalo týmto údajom:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Domovský adresár
Druhým príkladom je sprístupnenie domovského adresára používateľa host pre klientov. Dôveryhodní správcovia z vybraných klientov môžu pristupovať k pohodlnej správe používateľov. Adresár /home predvolene existuje, takže nie je potrebné vytvárať žiadny adresár. Čo sa týka oprávnení adresára, nie je potrebné vykonávať žiadne zmeny, pretože by to spôsobilo viac problémov ako úžitku.
Konfigurácia NFS exportov
Adresáre na zdieľanie sú teraz vytvorené. Ďalej je potrebné nakonfigurovať NFS, aby boli dostupné pre klientov. NFS používa konfiguračný súbor na sledovanie toho, ktoré adresáre sa majú zdieľať. Otvorte nasledujúci konfiguračný súbor NFS vo vašom obľúbenom textovom editore:
|
1 |
host$ sudo nano /etc/exports |

Komentárová časť súboru popisuje všeobecnú štruktúru syntaxe konfigurácie. Stručne povedané, akýkoľvek adresár musí byť deklarovaný v nasledujúcom formáte:
|
1 |
$ <directory> <client>(<option_1>,<option_2>,...,<option_N>) |
Pre dva adresáre, ktoré sme sa rozhodli zdieľať, bude konfigurácia vyzerať takto. Oba adresáre majú takmer rovnaké možnosti konfigurácie:
|
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) |

Tu je rýchly prehľad možností konfigurácie:
-
rw: Klientovi je udelené oprávnenie na čítanie aj zápis do zväzku.
-
sync: Núti NFS zapísať zmeny na disk pred odoslaním odpovede. Ponúka to stabilnejšie a konzistentnejšie prostredie. Odpoveď bude odrážať skutočný stav vzdialeného zväzku. Súborové operácie však budú pomalšie.
-
no_subtree_check: Zabraňuje kontrole podstromu (subtree checking). Ak nie je zakázaná, hostitelia budú nútení kontrolovať existenciu súboru v exportovanom strome pri každej jednej požiadavke od klienta. To môže viesť k mnohým problémom, napríklad k premenovaniu súboru počas jeho používania klientom. Vo väčšine prípadov je najlepším riešením zakázanie kontroly podstromu.
-
no_root_squash: Ako už bolo spomenuté, NFS preloží akúkoľvek požiadavku od vzdialeného používateľa root na neprivilegovaného používateľa. Ide o zámernú bezpečnostnú funkciu, ktorá má zabrániť nežiaducemu prístupu k hostiteľskému systému. Použitie tejto možnosti však toto správanie zakáže.
Uložte konfiguračný súbor a ukončite editor. Aby sa zmeny prejavili, reštartujte NFS server:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Úprava firewallu
Pre každý server je správna konfigurácia firewallu nevyhnutnosťou. Za predpokladu, že máte podľa toho nakonfigurovaný server Ubuntu 20.04, mal by byť aktívny firewall UFW. Je to jednoduchý, ale výkonný firewall, s ktorým prichádza väčšina distribúcií Linuxu. Pre začiatočníkov je tu rýchly návod vysvetľujúci UFW, ako funguje a bežné používanie UFW s príkladmi.
V predvolenom nastavení bude firewall blokovať všetku prichádzajúcu aj odchádzajúcu prevádzku. Aby sme zabezpečili, že sa NFS server môže správne pripojiť a vymieňať si dáta, musíme pridať výnimku pre protokol NFS. Najprv skontrolujte stav firewallu. Vypíšu sa aj všetky aktuálne pravidlá:
|
1 |
host$ sudo ufw status |

Ako môžeme vidieť, do systému je povolená iba SSH prevádzka. Musíme pridať výnimku na povolenie NFS prevádzky.
Vo väčšine prípadov sa dôrazne odporúča použiť najprísnejšie pravidlo, ktoré stále povoľuje potrebnú prevádzku. Takže povolíme pripojenie k hostiteľovi iba vybraným klientom:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Potom znova skontrolujte stav firewallu:
|
1 |
host$ sudo ufw status |

Vytvorenie bodu pripojenia
Server je teraz pripravený povoliť klientskemu systému pripojiť sa k protokolu NFS. Ďalej musíme pripraviť klienta. Na prístup k vzdialenému zväzku musí byť pripojený lokálne na klientovi. Pokiaľ ide o bod pripojenia, odporúča sa použiť vyhradený prázdny adresár.
Pre dva vzdialené zväzky vytvorte dva samostatné body pripojenia:
|
1 |
client$ sudo mkdir -pv /nfs/general |

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

Teraz, keď sú body pripojenia pripravené, musíte pripojiť vzdialené zväzky:
|
1 |
client$ sudo mount 31.171.240.236:/var/nfs/general /nfs/general |
![]()
|
1 |
client$ sudo mount 31.171.240.236:/home /nfs/home |
![]()
Môžeme overiť, či boli pripojenia úspešné. Skontrolujte zoznam všetkých pripojených zväzkov:
|
1 |
client$ df -h |

Voila! Vzdialené zväzky sú úspešne pripojené. Využitie miesta môžeme skontrolovať aj pomocou nasledujúceho príkazu:
|
1 |
client$ du -sh /nfs/home |

Testovanie prístupu k NFS
Doteraz boli vzdialené zväzky správne pripojené. Nebude to však na nič platné, ak klient nebude môcť čítať/zapisovať dáta na vzdialenom zväzku. Ak to chcete overiť, vytvorte testovací súbor v pripojení (pripojeniach) NFS. Tu sa súbor vytvorí s root oprávnením na otestovanie, či konfigurácie špecifické pre root fungujú správne:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Ďalej skontrolujte vlastníctvo súboru:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Ako vidíme, NFS prekladá vlastníka súboru na nobody:nogroup. Adresár /var/nfs/ general má vlastníctvo nobody:nogroup, takže NFS prekladá vlastníctvo súboru. Je čas otestovať druhé pripojenie NFS:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Skontrolujte existenciu a vlastníctvo súboru:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

V tomto prípade NFS nepreložil vlastníctvo súboru. Tento klient bol nakonfigurovaný tak, aby mohol vykonávať administratívne akcie. Navyše pôvodný hostiteľský adresár /home nemá vlastníctvo nastavené na nobody:nogroup.
Ďalšie triky
-
Pripojenie pri spúšťaní
Doteraz sme museli zväzok NFS pripájať do lokálneho adresára manuálne. Ak sa neodpoja, pripojenia NFS zostanú aktívne až do reštartu systému. Ak sa zväzok NFS používa pravidelne, manuálne pripájanie sa stáva mimoriadne únavným. V prípade viacerých pripojení NFS je nepraktické pripájať ich manuálne jedno po druhom.
Pomocou súboru /etc/fstab môžeme tento proces automatizovať. Počas spúšťania tento skript automaticky pripojí zväzky NFS do cieľových bodov pripojenia. Otvorte súbor v textovom editore:
|
1 |
client$ sudo nano /etc/fstab |

Pridajte nasledujúce riadky na pripojenie vzdialených zväzkov hostiteľského systému:
|
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 |

Uložte skript a zatvorte textový editor. Pri nasledujúcom spustení Linux automaticky pripojí vzdialené zväzky. Upozorňujeme, že spustenie systému môže chvíľu trvať, kým sa pripojí a namontuje zväzky.
-
Odpojenie zväzku NFS
Ak vzdialený zväzok už nie je potrebný, jeho odpojením ho odstránite z klientskeho systému. Pred odpojením sa však uistite, že vzdialený zväzok nepoužíva žiadna aplikácia ani skript. Odpájanie pripojení NFS je podobné ako odpájanie akýchkoľvek iných pripojení. V tomto prípade odpojte /nfs/home a /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/všeobecné |

Potom overte akciu:
|
1 |
klient$ df -h |

Záverečné zhrnutie
V tomto návode sme vytvorili NFS server a ukázali sme si niektoré zo základov vzdialeného zdieľania NFS. Ak máte záujem o implementáciu NFS v produkčnom prostredí, majte na pamäti, že protokol NFS nie je šifrovaný. Môže to predstavovať určité bezpečnostné riziká, napríklad útoky typu man-in-the-middle.
Príjemnú prácu s počítačom!
Komentáre
Zatiaľ žiadne komentáre. Buďte prvý.