Úvod do NFS
Systém NFS (Network File system) umožňuje serveru sdílet hierarchie adresářů (systémy souborů) se vzdálenými systémy přes síť. Servery NFS exportují adresář a klienti NFS připojují exportovaný adresář. Adresář serveru se pak klientským systémům jeví, jako by to byly místní adresáře. NFS snižuje nároky na úložiště a zlepšuje konzistenci a spolehlivost dat, protože uživatelé přistupují k souborům, které jsou uloženy na centralizovaném serveru.
RedHat Linux 7 nepodporuje NFS verze 2 (NFSv2). Podporovány jsou následující dvě verze:
NFS verze 3 (NFSv3).
NFS verze 4 (NFSv4).
NFS se spoléhá na vzdálená volání procedur (RPC) mezi klienty a servery. Služby RPC jsou řízeny službou rpcbind. Služba rpcbind nahrazuje mapu portů, která se používala v předchozích verzích Linuxu k mapování čísel programů RPC na kombinace čísel portů IP adres. rpcbind odpovídá na požadavky na služby RPC a nastavuje připojení k požadované službě RPC. rpcbind se nepoužívá s NFSv4, protože server naslouchá na dobře známém portu TCP 2049. Protokoly pro připojení a zamykání byly také začleněny do protokolu NFSv4, takže NFSv4 neinteraguje ani s démony lockd a rpc.statd.
Procesy serveru NFS a RPC
Spuštěním služby nfs-server se spustí server NFS a další procesy RPC potřebné ke zpracování požadavků na sdílené systémy souborů NFS. Můžete použít krátký název „nfs “ spíše než „nfs-server “ při spuštění služby. Příklad:
# systemctl start nfs
Toto je proces serveru NFS, který implementuje část služby NFS na úrovni uživatele. Hlavní funkcionalitu má na starosti modul jádra nfsd. Program uživatelského prostoru pouze specifikuje, na jakém druhu soketů server jádra naslouchá, jaké verze NFS podporuje a kolik vláken jádra nfsd používá. Pomocí příkazu ps –e zobrazíte počet běžících vláken.
# ps -ef | grep nfs root 9093 2 0 11:21 ? 00:00:00 [nfsd4_callbacks] root 9099 2 0 11:21 ? 00:00:00 [nfsd] root 9100 2 0 11:21 ? 00:00:00 [nfsd] root 9101 2 0 11:21 ? 00:00:00 [nfsd] root 9102 2 0 11:21 ? 00:00:00 [nfsd] root 9103 2 0 11:21 ? 00:00:00 [nfsd] root 9104 2 0 11:21 ? 00:00:00 [nfsd] root 9105 2 0 11:21 ? 00:00:00 [nfsd] root 9106 2 0 11:21 ? 00:00:00 [nfsd]
Počet vláken nfsd ke spuštění je definován v /proc/fs/nfsd/threads soubor. V tomto příkladu je zadáno 8 vláken nfsd:
# cat /proc/fs/nfsd/threads 8
Spuštění služby nfs-server také spustí procesy RPC. K zobrazení názvů procesů RPC můžete použít příkaz ps –e.
# ps -e | grep -i rpc 177 ? 00:00:00 rpciod 9080 ? 00:00:00 rpc.statd 9081 ? 00:00:00 rpc.idmapd 9082 ? 00:00:00 rpcbind 9083 ? 00:00:00 rpc.mountd 9084 ? 00:00:00 rpc.rquotad
rpc.statd
Tento proces implementuje protokol RPC Network Status Monitor (NSM), který klienty NFS upozorní, když je server NFS restartován, aniž by byl řádně spuštěn. Toto se nepoužívá s NFSv4.
rpc.mountd
Toto je démon připojení NFS, který implementuje požadavky na připojení od klientů NFSv3 na straně serveru. Zkontroluje, zda je požadovaná sdílená složka NFS aktuálně exportována serverem NFS a zda k ní má klient povolen přístup. Pro NFSv4 je k nastavení exportů vyžadován démon rpc.mountd pouze na serveru NFS.
rpc.idmapd
To poskytuje NFSv4 klienta a server upcalls, která mapují mezi on-the-wire názvy NFSv4 (což jsou řetězce ve tvaru uživatel@doména) a místní UID a GID. Aby idmapd fungoval s NFSv4, musí být nakonfigurován /etc/idmapd.conf. Tato služba je vyžadována pro použití s NFSv4, i když ne v případě, že všichni hostitelé sdílejí stejný název domény DNS.
rpc.rquotad
Tento proces poskytuje informace o uživatelských kvótách pro vzdálené uživatele. Spouští se automaticky službou nfs a nevyžaduje uživatelskou konfiguraci. Výsledky jsou používány příkazem kvóty k zobrazení uživatelských kvót pro vzdálené systémy souborů a příkazem edquota k nastavení kvót pro vzdálené systémy souborů.
uzamčeno
Toto je vlákno jádra, které běží na klientech i serverech. Implementuje protokol Network Lock Manager (NLM), který umožňuje klientům NFSv3 zamykat soubory na serveru. Spouští se automaticky při každém spuštění serveru NFS a při každém připojení souborového systému NFS.
nfslock
Spuštěním této služby se spustí procesy RPC, které klientům NFS umožňují uzamknout soubory na serveru.
Konfigurace serveru NFS
Chcete-li začít konfigurovat systém jako server NFS, nainstalujte balíček nfs-utils:
# yum install nfs-utils
Hlavní konfigurační soubor pro NFS server je /etc/exports . Tento soubor ukládá seznam exportovaných hierarchií adresářů, které mohou vzdálené systémy připojit. Formát záznamů je:
export-point client1(options) [client2(options) ... ]
Exportní bod je absolutní název cesty k hierarchii adresářů, která má být exportována. Jeden nebo více klientských systémů, každý se specifickými možnostmi, může připojit exportní bod. Mezi atributem client a otevřenou závorkou nejsou žádné mezery. Pokud nejsou zadány žádné možnosti klienta, platí následující výchozí nastavení:
- ro:Pouze pro čtení . Klientští hostitelé nemohou měnit data sdílená v systému souborů. Chcete-li klientským hostitelům umožnit provádět změny v systému souborů, zadejte možnost rw (čtení/zápis).
- synchronizovat :NFS server odpovídá na požadavky pouze po zapsání změn provedených předchozími požadavky na disk. async určuje, že server nemusí čekat.
- wdelay :Server NFS zpožďuje potvrzení požadavků na zápis, když má podezření, že hrozí další požadavek na zápis. Chcete-li zpoždění zakázat, použijte volbu no_wdelay. no_wdelay je k dispozici pouze v případě, že je také zadána výchozí možnost synchronizace.
- root_squash :Zabraňuje vzdáleně připojeným uživatelům root v tom, aby měli oprávnění root, čímž účinně „zmačkají“ moc vzdáleného uživatele root. Zdá se, že požadavky pocházejí od uživatele nfsnobody, neprivilegovaného uživatele v místním systému nebo podle specifikace anonuid. Chcete-li zakázat squash root, zadejte volbu no_root_squash.
- no_all_squash :Nemění mapování vzdálených uživatelů. Chcete-li squash každého vzdáleného uživatele (včetně root), použijte volbu all_squash.
Chcete-li zadat ID uživatele (UID) a ID skupiny (GID), které server NFS přiřadí vzdáleným uživatelům, použijte možnosti anonuid a anongid takto:
export-point client(anonuid=uid,anongid=gid)
Možnosti anonuid a anongid vám umožňují vytvořit speciální uživatelský a skupinový účet, který mohou vzdálení uživatelé NFS sdílet. Ve výchozím nastavení jsou seznamy řízení přístupu (ACL) podporovány systémem NFS. Chcete-li tuto funkci zakázat, zadejte při exportu systému souborů volbu no_acl.
Ve jménech klientů můžete použít zástupné znaky, například (*) a (?). Můžete také exportovat adresáře do všech hostitelů v síti IP. Chcete-li to provést, zadejte pár IP adresy a masky sítě jako adresa/maska sítě. Platí kterýkoli z následujících formulářů:
192.168.1.0/24 192.168.1.0/255.255.255.0
/etc/exports Příklady
V následujícím příkladu může klientský systém s IP adresou 192.0.2.102 připojit adresář /export/s oprávněními pro čtení/zápis. Všechny zápisy na disk jsou asynchronní:
/export/directory 192.0.2.102(rw,async)
Následující příklad exportuje adresář /exports/apps do všech klientů, převede všechny připojující se uživatele na místního anonymního uživatele nfsnobody a učiní adresář pouze pro čtení:
/exports/apps *(all_squash, ro)
Následující příklad exportuje adresář /spreadsheets/proj1 s oprávněními pouze pro čtení všem klientům v podsíti 192.168.1.0 a oprávněními pro čtení/zápis do klientského systému s názvem mgmtpc:
/spreadsheets/proj1 192.168.1.0/24(ro) mgmtpc(rw)
Spuštění služby NFS
Služba rpcbind musí být spuštěna před spuštěním nfs. Následující příkaz zkontroluje, zda je služba rpcbind povolena a spuštěna.
# systemctl status rpcbind
Pokud je spuštěna služba rpcbind, lze spustit službu nfs. Po provedení jakýchkoli změn konfigurace v /etc/exports restartujte nfs nebo spusťte příkaz exportfs -a.
# systemctl start nfs
Zkontrolujte, zda je povolena a spuštěna služba nfslock. Spuštěním této služby se spustí procesy RPC, které klientům NFS umožňují uzamknout soubory na serveru.
# systemctl status nfslock
Použijte příkaz systemctl enable k automatickému spuštění služeb při spouštění. Při povolování služby NFS použijte celý název nfs-server.
# systemctl enable nfs-server
Zadejte možnosti konfigurace a argumenty jejich umístěním do /etc/sysconfig/nfs . Tento soubor obsahuje několik komentářů, které vám pomohou určit možnosti jsou argumenty. Pro zobrazení exportovaných systémů souborů použijte příkaz showmount –e:
# showmount –e
nástroj pro export
Server NFS můžete také nakonfigurovat z příkazového řádku pomocí exportfs. Tento příkaz umožňuje uživateli root selektivně exportovat nebo zrušit export adresářů bez změny /etc/exports a bez restartování služby NFS. Syntaxe příkazu je:
# exportfs [options] [client:dir ...]
Argument klienta je název klientského systému, do kterého je adresář exportován. Argument dir je název absolutní cesty k exportovanému adresáři. Následuje seznam některých možností:
- -r :Znovu exportujte položky v /etc/exports a synchronizujte /var/lib/nfs/etab s /etc/exports. Soubor /var/lib/nfs/etab je hlavní exportní tabulkou. rpc.mountd čte tento soubor, když klient odešle příkaz pro připojení NFS.
- -a :Exportujte položky v /etc/exports, ale nesynchronizujte /var/lib/nfs/etab. Po provedení jakýchkoli změn konfigurace spusťte exportfs –a.
- -i :Ignorujte položky v /etc/exports a používejte pouze argumenty příkazového řádku.
- -u :Zrušte export jednoho nebo více adresářů.
- -o :Zadejte možnosti klienta, jak je uvedeno v /etc/exports.
Konfigurace klienta NFS
Chcete-li začít konfigurovat systém jako klienta NFS, nainstalujte balíček nfs-utils:
# yum install nfs-utils
Pomocí příkazu mount připojte exportované systémy souborů (sdílené složky NFS) na straně klienta. Syntaxe příkazu je:
# mount -t nfs -o options host:/remote/export /local/directory
Následují popisy argumentů:
- -t nfs :Označuje, že typ systému souborů je nfs. S touto volbou mount používá NFSv4, pokud jej server podporuje; jinak používá NFSv3.
- -o možnosti :Čárkami oddělený seznam možností připojení
- hostitel :/remote/export:Název hostitele exportujícího souborový systém, za nímž následuje dvojtečka a za ním absolutní cesta ke sdílené složce NFS
- /local/directory :Přípojný bod na klientském systému
Chcete-li například připojit adresář /home exportovaný z hostitele abc s oprávněním pouze pro čtení (volba ro) na místní přípojný bod /abc_home a zabránit vzdáleným uživatelům získat vyšší oprávnění spuštěním programu setuid (volba nosuid):
# mount -t nfs -o ro,nosuid abc:/home /abc_home
Chcete-li připojit sdílené složky NFS při zavádění, přidejte položky do tabulky připojení systému souborů /etc/fstab. Záznamy jsou v následujícím formátu:
# vi /etc/fstab server:/exported-filesystem local_mount_point nfs options 0 0
Například položka /etc/fstab, která replikuje příkaz mount na předchozí stránce, je:
# vi /etc/fstab abc:/home /abc_home nfs ro,nosuid 0 0
Příkaz df zobrazí připojené systémy souborů, včetně systémů souborů připojených přes NFS. U připojení NFS se ve sloupci „Systém souborů“ zobrazují informace o server:/exported-filesystem. Použijte -T možnost zahrnout sloupec „Typ“:
# df -hT Filesystem Type Size Used Avail Use% Mounted on host03:/Dev nfs4 976M 2.5M 907M 1% /remote_devCentOS / RHEL 7 :Konfigurace serveru NFS a klienta NFS