The Network File System (NFS) je distribuované úložné řešení. Jedná se o protokol souborového systému, který umožňuje připojit vzdálené adresáře na lokální server a používat je, jako by šlo o lokální úložiště. NFS umožňuje více klientům sdílet vzdálené úložiště. Je vhodný pro prostředí, která pravidelně vyžadují sdílené prostředky. NFS je postaven na systému ONC RPC (Open Network Computing Remote Procedure Call). Jde o otevřený standard definovaný v RFC (Request for Comments). To umožňuje komukoli tento protokol implementovat.
V tomto návodu si projdeme kroky nastavení a konfigurace připojení NFS na Ubuntu 20.04.
Požadavky
Jak napovídá popis NFS, konfigurace NFS se skládá ze dvou částí:
-
Hostitel: Fyzicky ukládá data a sdílí úložiště s „klientskými“ systémy.
-
Klient: Systém, který se připojuje k „hostiteli“ a používá vzdálené úložiště, jako by bylo lokální.
Pro naši ukázku budeme používat dva servery, oba s nakonfigurovaným systémem Ubuntu 20.04. Zde je jednoduchý návod, jak nastavit server Ubuntu. V průběhu tohoto návodu budeme tyto servery označovat jako hostitel a klient. Upozorňujeme, že akce pro klienta budou stejné, i když jich bude více.
Serverům jsou přiřazeny následující IP adresy. Tyto servery jsou hostovány u CloudSigma:
-
hostitel: 31.171.240.79
-
klient: 31.171.250.109
Nezapomeňte je nahradit příslušnými IP adresami.
Instalace NFS
NFS je snadno dostupné z oficiálních repozitářů Ubuntu. Pro systémy hostitele a klienta jsou k dispozici různé softwarové balíčky.
-
Instalace NFS na hostiteli
Na hostiteli potřebujeme komponenty, které stroj vybaví pro fungování jako NFS hostitel. Ty jsou k dispozici v podobě balíčku nfs-kernel-server. Ubuntu používá APT jako správce balíčků. Nejprve spusťte terminál a aktualizujte databázi balíčků APT :
|
1 |
host$ sudo apt update |

Dále nainstalujte balíček nfs-kernel-server. V případě potřeby se APT postará o všechny další závislosti:
|
1 |
host$ sudo apt install nfs-kernel-server |

-
Instalace NFS na klientovi
Na klientském systému potřebujeme funkcionalitu pro připojení k adresářům hostitele přes síť. Nevyžaduje to funkcionalitu NFS serveru. V systému Ubuntu je tato funkcionalita zabalena v balíčku nfs-common. Aktualizujte databázi balíčků APT :
|
1 |
client$ sudo apt update |

Poté nainstalujte balíček nfs-common :
|
1 |
$ sudo apt install nfs-common |

Sdílené adresáře na hostiteli
Dále budeme sdílet dva samostatné adresáře, každý s jinou konfigurací. Ukážeme si dva klíčové způsoby, jak připojení NFS fungují s ohledem na přístup superuživatele. Ve výchozím nastavení mají superuživatelé oprávnění provádět cokoli v celém systému. Adresáře připojené přes NFS však nejsou součástí systému, na kterém jsou připojeny. NFS server odmítne provést jakoukoli operaci, která vyžaduje oprávnění superuživatele. Toto omezení znamená, že klienti nemají oprávnění zapisovat, měnit vlastnictví a provádět další úkoly superuživatele na připojeních NFS.
Je možné povolit některým důvěryhodným uživatelům provádět tyto úkoly na připojených souborových systémech. To však přináší jisté riziko, protože takový klient může potenciálně získat plný přístup k hostiteli. Toto riziko lze zmírnit správnou správou uživatelských oprávnění. V systému Linux řídí veškerá uživatelská oprávnění soubor sudoers. Další informace naleznete v našem návodu na jak nakonfigurovat soubor sudoers v Linuxu.
-
Univerzální připojení
Prvním příkladem bude univerzální připojení NFS s výchozím chováním NFS. Při tomto přístupu je pro klienta extrémně obtížné provádět na připojeních akce superuživatele. Tento typ připojení NFS se běžně nasazuje pro ukládání souborů, nahrávání pomocí CMS (Content Management System) nebo sdílení projektových souborů atd.
Následující kroky je třeba provést na hostitelském systému. Nejprve vytvořte adresář pro sdílení s názvem nfs:
|
1 |
host$ sudo mkdir -pv /var/nfs/general |

Protože byl adresář vytvořen s sudo oprávněním, vlastník bude root:
|
1 |
$ ls -la /var/nfs/general |

V rámci výchozí konfigurace NFS přeloží jakoukoli operaci uživatele root z klientské strany na nobody:nogroup přihlašovací údaje z bezpečnostních důvodů. Pro konzistenci změňte vlastnictví adresáře tak, aby odpovídalo těmto údajům:
|
1 |
host$ sudo chown nobody:nogroup /var/nfs/general |
![]()
-
Domovský adresář
Druhým příkladem je zpřístupnění domovského adresáře host uživatele pro klienty. Důvěryhodní administrátoři z vybraných klientů k němu mohou přistupovat pro pohodlnou správu uživatelů. /home adresář existuje ve výchozím nastavení, takže není nutné vytvářet žádný adresář. Co se týče oprávnění adresáře, není třeba provádět žádné změny, protože by to způsobilo více problémů než užitku.
Konfigurace exportů NFS
Adresáře ke sdílení jsou nyní vytvořeny. Dále je třeba nakonfigurovat NFS, aby byly dostupné pro klienty. NFS používá konfigurační soubor ke sledování toho, které adresáře se mají sdílet. Otevřete následující konfigurační soubor NFS ve svém oblíbeném textovém editoru:
|
1 |
host$ sudo nano /etc/exports |

Komentářová sekce souboru popisuje obecnou syntaktickou strukturu konfigurace. Stručně řečeno, jakýkoli adresář musí být deklarován v následujícím formátu:
|
1 |
$ <directory> <client>(<option_1>,<option_2>,...,<option_N>) |
Pro dva adresáře, které jsme se rozhodli sdílet, bude konfigurace vypadat takto. Oba adresáře mají téměř stejné možnosti konfigurace:
|
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) |

Zde je rychlý přehled možností konfigurace:
-
rw: Klientovi je uděleno oprávnění ke čtení i zápisu na svazek.
-
sync: Nutí NFS zapsat změny na disk před odesláním odpovědi. Nabízí stabilnější a konzistentnější chování. Odpověď bude odrážet skutečný stav vzdáleného svazku. Souborové operace však budou pomalejší.
-
no_subtree_check: Zabraňuje kontrole podstromu (subtree checking). Pokud není zakázána, hostitelé budou nuceni kontrolovat existenci souboru v exportovaném stromu při každém jednotlivém požadavku od klienta. To může vést k mnoha problémům, například k přejmenování souboru, zatímco jej klient používá. Ve většině případů je nejlepším řešením kontrolu podstromu zakázat.
-
no_root_squash: Jak již bylo zmíněno dříve, NFS přeloží jakýkoli požadavek od vzdáleného uživatele root na neprivilegovaného uživatele. Jedná se o záměrný bezpečnostní prvek, který má zabránit nechtěnému přístupu k hostitelskému systému. Použití této možnosti však toto chování zakáže.
Uložte konfigurační soubor a ukončete editor. Aby se změny projevily, restartujte NFS server:
|
1 |
host$ sudo systemctl restart nfs-kernel-server |
![]()
Nastavení firewallu
Pro jakýkoli server je správná konfigurace firewallu nutností. Za předpokladu, že máte odpovídajícím způsobem nakonfigurovaný server Ubuntu 20.04, měl by být firewall UFW aktivní. Je to jednoduchý, ale výkonný firewall, se kterým se dodává většina linuxových distribucí. Pro začátečníky je zde rychlý průvodce vysvětlující UFW, jak funguje a běžné použití UFW s příklady.
Ve výchozím nastavení bude firewall blokovat veškerý příchozí i odchozí provoz. Abychom zajistili, že se NFS server může správně připojit a vyměňovat si data, musíme přidat výjimku pro protokol NFS. Nejprve zkontrolujte stav firewallu. Vypíše také všechna aktuální pravidla:
|
1 |
host$ sudo ufw status |

Jak vidíme, do systému je povolen pouze provoz SSH. Musíme přidat výjimku pro povolení provozu NFS.
Ve většině případů se důrazně doporučuje použít co nejvíce omezující pravidlo, které stále umožňuje nezbytný provoz. Budeme tedy povolovat připojení k hostiteli pouze vybraným klientům:
|
1 |
host$ sudo ufw allow from 31.171.250.221 to any port nfs |

Poté znovu zkontrolujte stav firewallu:
|
1 |
host$ sudo ufw status |

Vytvoření přípojného bodu
Server je nyní připraven povolit klientskému systému připojit se k protokolu NFS. Dále musíme připravit klienta. Pro přístup ke vzdálenému svazku musí být připojen lokálně na klientovi. Pokud jde o přípojný bod, doporučuje se použít vyhrazený prázdný adresář.
Pro dva vzdálené svazky vytvořte dva samostatné přípojné body:
|
1 |
client$ sudo mkdir -pv /nfs/general |

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

Nyní, když jsou přípojné body připraveny, musíte připojit vzdálené svazky:
|
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 ověřit, zda bylo připojení úspěšné. Zkontrolujte seznam všech připojených svazků:
|
1 |
client$ df -h |

Voila! Vzdálené svazky jsou úspěšně připojeny. Využití místa můžeme také zkontrolovat pomocí následujícího příkazu:
|
1 |
client$ du -sh /nfs/home |

Testování přístupu k NFS
Dosud byly vzdálené svazky správně připojeny. Nebude to však k ničemu, pokud klient nebude moci číst/zapisovat data na vzdáleném svazku. Pro ověření vytvořte testovací soubor na přípojném bodu (bodech) NFS. Zde bude soubor vytvořen s oprávněním root k otestování, zda konfigurace specifické pro root fungují správně:
|
1 |
client$ sudo touch /nfs/general/write_test.txt |
![]()
Dále zkontrolujte vlastnictví souboru:
|
1 |
client$ ls -l /nfs/general/write_test.txt |

Jak vidíme, NFS převádí vlastníka souboru na nobody:nogroup. Adresář /var/nfs/ general má vlastnictví nobody:nogroup, takže NFS převádí vlastnictví souboru. Je čas otestovat druhý přípojný bod NFS:
|
1 |
client$ sudo touch /nfs/home/test_home.txt |
![]()
Zkontrolujte existenci a vlastnictví souboru:
|
1 |
Client $ ls -l /nfs/home/test_home.txt |

V tomto případě NFS nepřeložilo vlastnictví souboru. Tento klient byl nakonfigurován tak, aby mohl provádět administrativní akce. Navíc původní hostitelský adresář /home nemá vlastnictví nastaveno na nobody:nogroup.
Další triky
-
Připojení při spuštění
Dosud jsme museli svazek NFS připojovat k lokálnímu adresáři ručně. Pokud nejsou odpojeny, připojení NFS vydrží až do restartu systému. Pokud se svazek NFS používá pravidelně, stává se ruční připojování extrémně zdlouhavým. V případě více připojení NFS je pak nepraktické připojovat je ručně jedno po druhém.
Pomocí souboru /etc/fstab můžeme tento proces automatizovat. Během spouštění tento skript automaticky připojí svazky NFS k cílovým přípojným bodům. Otevřete soubor v textovém editoru:
|
1 |
client$ sudo nano /etc/fstab |

Přidejte následující řádky pro připojení vzdálených svazků hostitelské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 zavřete textový editor. Při příštím spuštění Linux automaticky připojí vzdálené svazky. Upozorňujeme, že spuštění systému může chvíli trvat, protože se připojuje ke svazkům a připojuje je.
-
Odpojení svazku NFS
Pokud již vzdálený svazek není potřeba, jeho odpojením jej odeberete z klientského systému. Před odpojením se však ujistěte, že vzdálený svazek nepoužívá žádná aplikace ani skript. Odpojování svazků NFS je podobné odpojování jakýchkoli jiných svazků. V tomto případě odpojte /nfs/home a /nfs/general:
|
1 2 3 |
client$ sudo umount /nfs/home client$ sudo umount /nfs/obecné |

Poté akci ověřte:
|
1 |
klient$ df -h |

Závěr
V této příručce jsme vytvořili NFS server a ukázali si některé základy vzdáleného sdílení NFS. Pokud máte zájem o implementaci NFS v produkčním prostředí, mějte na paměti, že protokol NFS není šifrovaný. To může představovat určité bezpečnostní obavy, například útoky typu man-in-the-middle.
Příjemnou práci s počítačem!
Komentáře
Zatím žádné komentáře. Buďte první.