Network File System (NFS) je protokol distribuovaného systému souborů, který umožňuje sdílet vzdálené adresáře v síti. Pomocí NFS můžete připojit vzdálené adresáře na váš systém a pracovat se soubory na vzdáleném počítači, jako by to byly místní soubory.
Protokol NFS není ve výchozím nastavení šifrován a na rozdíl od Samby neposkytuje ověření uživatele. Přístup k serveru je omezen IP adresami nebo názvy hostitelů klientů.
V tomto tutoriálu se podíváme na to, jak nastavit server NFSv4 na Ubuntu 18.04. Také vám ukážeme, jak připojit systém souborů NFS na klienta.
Předpoklady #
Tento příklad předpokládá, že máte jeden server se systémem Ubuntu 18.04 a druhý s jakoukoli jinou distribucí Linuxu. Server a klienti by měli být schopni spolu komunikovat přes privátní síť. Pokud váš poskytovatel hostingu nenabízí soukromé IP adresy, můžete použít veřejné IP adresy a nakonfigurovat bránu firewall serveru tak, aby umožňovala provoz na portu 2049
pouze z důvěryhodných zdrojů.
Počítače v tomto příkladu mají následující IP adresy:
NFS Server IP: 192.168.33.10
NFS Clients IPs: From the 192.168.33.0/24 range
Nastavení serveru NFS #
Začneme instalací a konfigurací serveru NFS.
Instalace serveru NFS #
Obnovte index balíčků a nainstalujte balíček serveru NFS:
sudo apt update
sudo apt install nfs-kernel-server
Po dokončení instalace se služby NFS automaticky spustí.
Ve výchozím nastavení je na Ubuntu 18.04 NFS verze 2 zakázán. Verze 3 a 4 jsou povoleny. Můžete to ověřit spuštěním následujícího cat
příkaz:
sudo cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2
NFSv2 je už docela starý a není důvod ho povolovat.
Možnosti konfigurace serveru NFS se nastavují v /etc/default/nfs-kernel-server
a /etc/default/nfs-common
soubory. Výchozí nastavení je v našem případě dostačující.
Vytvoření systémů souborů #
Při konfiguraci serveru NFSv4 je dobrým zvykem použít globální kořenový adresář NFS a svázat připojení skutečných adresářů ke sdílenému přípojnému bodu. V tomto příkladu použijeme /srv/nfs4
adresář jako kořenový adresář NFS.
Budeme sdílet dva adresáře (/var/www
a /opt/backups
), s různými konfiguračními nastaveními, abyste lépe vysvětlili, jak lze konfigurovat připojení NFS.
Vytvořte exportní souborový systém pomocí mkdir
příkaz:
sudo mkdir -p /srv/nfs4/backups
sudo mkdir -p /srv/nfs4/www
Připojte skutečné adresáře:
sudo mount --bind /opt/backups /srv/nfs4/backups
sudo mount --bind /var/www /srv/nfs4/www
Chcete-li, aby připojení byla trvalá, otevřete /etc/fstab
soubor:
sudo nano /etc/fstab
a přidejte následující řádky:
/etc/fstab/opt/backups /srv/nfs4/backups none bind 0 0
/var/www /srv/nfs4/www none bind 0 0
Exportování systémů souborů #
Dalším krokem je definovat systémy souborů, které budou exportovány serverem NFS, možnosti sdílení a klienty, kteří mají k těmto systémům souborů povolen přístup. Chcete-li tak učinit, otevřete /etc/exports
soubor:
sudo nano /etc/exports
Soubor /etc/exports
soubor také obsahuje komentáře, které popisují, jak exportovat adresář.
V našem případě potřebujeme exportovat www
a backups
adresářů a umožňují přístup pouze klientům na 192.168.33.0/24
síť:
/srv/nfs4 192.168.33.0/24(rw,sync,no_subtree_check,crossmnt,fsid=0)
/srv/nfs4/backups 192.168.33.0/24(ro,sync,no_subtree_check) 192.168.33.3(rw,sync,no_subtree_check)
/srv/nfs4/www 192.168.33.110(rw,sync,no_subtree_check)
První řádek obsahuje fsid=0
které definují kořenový adresář NFS /srv/nfs4
. Přístup k tomuto svazku NFS je povolen pouze klientům z 192.168.33.0/24
podsíť. crossmnt
volba je vyžadována pro sdílení adresářů, které jsou podadresáři exportovaného adresáře.
Druhý řádek ukazuje, jak zadat více pravidel exportu pro jeden souborový systém. Exportuje /srv/nfs4/backups
adresář a umožňuje pouze přístup pro čtení k celému 192.168.33.0/24
rozsah a přístup pro čtení i zápis na 192.168.33.3
. sync
volba říká NFS, aby zapsal změny na disk, než odpoví.
Poslední řádek by měl být samozřejmý. Pro více informací o všech dostupných možnostech zadejte man exports
ve vašem terminálu.
Uložte soubor a exportujte sdílené položky:
sudo exportfs -ra
Výše uvedený příkaz musíte spustit pokaždé, když upravíte /etc/exports
soubor. Pokud se vyskytnou nějaké chyby nebo varování, zobrazí se na terminálu.
Chcete-li zobrazit aktuální aktivní exporty a jejich stav, použijte:
sudo exportfs -v
Výstup bude zahrnovat všechny akcie s jejich opcemi. Jak můžete vidět, existují také možnosti, které jsme nedefinovali v /etc/exports
soubor. Toto jsou výchozí možnosti a pokud je chcete změnit, budete muset tyto možnosti explicitně nastavit.
/srv/nfs4/backups
192.168.33.3(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/www 192.168.33.110(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4 192.168.33.0/24(rw,wdelay,crossmnt,root_squash,no_subtree_check,fsid=0,sec=sys,rw,secure,root_squash,no_all_squash)
/srv/nfs4/backups
192.168.33.0/24(ro,wdelay,root_squash,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
Na Ubuntu root_squash
je ve výchozím nastavení povoleno. Toto je jedna z nejdůležitějších možností zabezpečení NFS. Zabraňuje uživatelům root připojeným z klientů, aby měli oprávnění root na připojených sdílených položkách. Mapuje kořenový UID
a GID
nobody
/nogroup
UID
/GID
.
Aby měli uživatelé na klientských počítačích přístup, NFS očekává, že ID uživatele a skupiny klienta se budou shodovat s ID na serveru. Další možností je použít funkci NFSv4 idmapping, která převádí ID uživatelů a skupin na jména a naopak.
A je to. V tomto okamžiku jste na svém serveru Ubuntu nastavili server NFS. Nyní můžete přejít k dalšímu kroku a nakonfigurovat klienty a připojit se k serveru NFS.
Konfigurace brány firewall #
Pokud ve své síti používáte bránu firewall, budete muset přidat pravidlo, které povolí provoz na portu NFS.
Za předpokladu, že používáte UFW
ke správě vašeho firewallu a povolení přístupu z 192.168.33.0/24
subnet musíte spustit následující příkaz:
sudo ufw allow from 192.168.33.0/24 to any port nfs
Pro ověření změny spusťte:
sudo ufw status
Výstup by měl ukazovat, že provoz na portu 2049
je povoleno:
To Action From
-- ------ ----
2049 ALLOW 192.168.33.0/24
22/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
Nastavení klientů NFS #
Nyní, když je NFS server nastaven a sdílené složky jsou exportovány, je dalším krokem konfigurace klientů a připojení vzdálených souborových systémů.
Sdílení NFS můžete připojit také na počítačích MacOS a Windows, ale my se zaměříme na systémy Linux.
Instalace klienta NFS #
Na klientské počítače potřebujeme nainstalovat pouze nástroje potřebné k připojení vzdáleného souborového systému NFS.
-
Nainstalujte klienta NFS na Debian a Ubuntu
Název balíčku, který obsahuje programy pro připojení souborových systémů NFS v distribucích založených na Debianu, je
nfs-common
. Chcete-li jej nainstalovat, spusťte:sudo apt update
sudo apt install nfs-common
-
Nainstalujte klienta NFS na CentOS a Fedoru
Na Red Hat a jeho deriváty nainstalujte
nfs-utils
balíček:sudo yum install nfs-utils
Připojení souborových systémů #
Budeme pracovat na klientském počítači s IP 192.168.33.110
který má přístup pro čtení a zápis do /srv/nfs4/www
souborový systém a přístup pouze pro čtení k /srv/nfs4/backups
souborový systém.
Vytvořte dva nové adresáře pro přípojné body. Tyto adresáře můžete vytvořit na libovolném místě.
sudo mkdir -p /backups
sudo mkdir -p /srv/www
Připojte exportované systémy souborů pomocí mount
příkaz:
sudo mount -t nfs -o vers=4 192.168.33.10:/backups /backups
sudo mount -t nfs -o vers=4 192.168.33.10:/www /srv/www
Kde 192.168.33.10
je IP NFS serveru. Místo IP adresy můžete také použít název hostitele, ale musí být rozlišitelný klientským počítačem. To se obvykle provádí mapováním názvu hostitele na IP v /etc/hosts
soubor.
Při připojování souborového systému NFSv4 musíte vynechat kořenový adresář NFS, takže místo /srv/nfs4/backups
musíte použít /backups
.
Ověřte, že jsou vzdálené systémy souborů úspěšně připojeny pomocí mount nebo df
příkaz:
df -h
Příkaz vytiskne všechny připojené systémy souborů. Poslední dva řádky jsou připojené sdílené položky:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 38G 1.7G 36G 5% /
devtmpfs 236M 0 236M 0% /dev
tmpfs 244M 0 244M 0% /dev/shm
tmpfs 244M 4.5M 240M 2% /run
tmpfs 244M 0 244M 0% /sys/fs/cgroup
/dev/sda2 1014M 87M 928M 9% /boot
tmpfs 49M 0 49M 0% /run/user/1000
192.168.33.10:/backups 9.7G 1.2G 8.5G 13% /backups
192.168.33.10:/www 9.7G 1.2G 8.5G 13% /srv/www
Chcete-li, aby připojení byla při restartu trvalá, otevřete /etc/fstab
soubor:
sudo nano /etc/fstab
a přidejte následující řádky:
/etc/fstab192.168.33.10:/backups /backups nfs defaults,timeo=900,retrans=5,_netdev 0 0
192.168.33.10:/www /srv/www nfs defaults,timeo=900,retrans=5,_netdev 0 0
Chcete-li zjistit další informace o dostupných možnostech při připojování systému souborů NFS, zadejte man nfs
ve vašem terminálu.
Další možností, jak připojit vzdálené systémy souborů, je použít buď autofs
nástroj nebo vytvořit systémovou jednotku.
Testování přístupu NFS #
Pojďme otestovat přístup ke sdíleným složkám vytvořením nového souboru pro každou z nich.
Nejprve zkuste vytvořit testovací soubor do /backups
adresář pomocí touch
příkaz:
sudo touch /backups/test.txt
/backup
souborový systém je exportován pouze pro čtení a podle očekávání se zobrazí Permission denied
chybová zpráva:
touch: cannot touch ‘/backups/test’: Permission denied
Dále zkuste vytvořit testovací soubor do /srv/www
adresář jako kořenový adresář pomocí sudo
příkaz:
sudo touch /srv/www/test.txt
Opět uvidíte Permission denied
zprávu.
touch: cannot touch ‘/srv/www’: Permission denied
Pokud si vzpomenete na /var/www
adresář je vlastněn www-data
uživatel a tato sdílená položka má root_squash
sada voleb, která mapuje uživatele root na nobody
uživatel a nogroup
skupina, která nemá oprávnění k zápisu do vzdálené sdílené složky.
Za předpokladu, že máte www-data
použít na klientském počítači se stejným UID
a GID
jako na vzdáleném serveru (což by měl být případ, pokud jste například nainstalovali nginxon na oba počítače) můžete otestovat vytvoření souboru jako uživatel www-data
s:
sudo -u www-data touch /srv/www/test.txt
Příkaz neukáže žádný výstup, což znamená, že soubor byl úspěšně vytvořen.
Pro ověření uveďte soubory v /srv/www
adresář:
ls -la /srv/www
Výstup by měl zobrazovat nově vytvořený soubor:
drwxr-xr-x 3 www-data www-data 4096 Jun 23 22:18 .
drwxr-xr-x 3 root root 4096 Jun 23 22:29 ..
-rw-r--r-- 1 www-data www-data 0 Jun 23 21:58 index.html
-rw-r--r-- 1 www-data www-data 0 Jun 23 22:18 test.txt
Odpojení systému souborů NFS #
Pokud již nepotřebujete vzdálenou sdílenou složku NFS, můžete ji odpojit jako jakýkoli jiný připojený souborový systém pomocí příkazu umount. Chcete-li například odpojit /backup
sdílení, které byste spustili:
sudo umount /backups
Pokud je bod připojení definován v /etc/fstab
soubor, ujistěte se, že jste odstranili řádek nebo jej okomentovali přidáním #
na začátku řádku.