EXPORTS(5) | File Formats Manual | EXPORTS(5) |
JMÉNO¶
exports - souborové systémy exportované pomocí NFS
SYTAXE¶
/etc/exports
POPIS¶
Soubor /etc/exports definuje přístupová práva pro souborové systémy, které mohou být exportovány NFS klientům. Je používán programem exportfs(8) pro předávání informací jak NFS mount démonu mountd(8), tak i NFS server démonu nfsd(8).
Formát souboru je podobný formátu souboru exports na SunOS, přičemž definuje některá rozšíření. Každá řádka obsahuje bod připojení (mount point) a seznam počítačů či síťových skupin, které mají právo tento souborový systém v tomto bodě připojit. Ke každému jménu počítače je možno připojit seznam připojovacích parametrů v závorkách. Prázdné řádky jsou ignorovány a znak # uvozuje komentář až do konce řádku.
Každý řádek také může mít jednu nebo více specifikací implicitního nastavení za jménem cesty v podobě pomlčky ("-") následované seznamem voleb. Tento seznam voleb je použit pro všechny následující exporty daného řádku.
Prázdné řádky jsou ignorovány. Znak mříže ("#") uvozuje komentář a platí do konce řádku. Jednotlivé položky mohou pokračovat na novém řádku použitím zpětného lomítka. Pokud exportované jméno obsahuje mezery, mělo by být uvozeno dvojitými uvozovkami. Můžete také specifikovat mezery a jiné speciální znaky v exportovaném jméně pomocí zpětného lomítka následovaného číslem znaku v podobě tří číslic v osmičkové soustavě.
Pro uložení změn v tomto souboru spusťte exportfs -ra nebo restartujte NFS server.
Formát jména počítače¶
- NFS klienti mohou být specifikováni několika způsoby:
- jeden host
- Toto je nejčastěji používaný formát. Hosta lze specifikovat buď zkráceným jménem rozeznávaným resolverem plným doménovým jménem nebo IP adresou.
- netgroups
- NIS netgroups mohou být zadány jako @group. Při kontrole členství je kontrolováno pouze jméno hosta. Prázdná jména hosta a jména obsahující pomlčku (-) jsou ignorovány.
- zástupné znaky
- Jména strojů mohou obsahovat zástupné znaky * a ?. Toho lze výhodně využít pro zmenšení velikosti exports souboru. Například *.cs.foo.edu označuje všechny hosty v doméně cs.foo.edu. Jelikož tyto znaky zastupují i tečky v doménovém jméně, daný vzor bude odpovídat i doméně cs.foo.edu.
- IP sítě
- Můžete také exportovat všem hostům na dané IP (pod)síti najednou. Toho lze dosáhnout pomocí specifikace dvojice IP adresa a maska sítě adresa/maska kde maska může být specifikována jako dotted decimal nebo délkou masky (např. hodnoty '/255.255.252.0' nebo '/22' připojené za adresu sítě povede k identickým podsítím s desetibitovou adresou hosta). Zástupné znaky nefungují u IP adres, ačkoliv mohou náhodně fungovat pokud selže reverzní DNS vyhledávání.
RPCSEC_GSS bezpečnost¶
Speciální řetězce "gss/krb5", "gss/krb5i" nebo "gss/krb5p" lze použít pro omezení přístupu ke klientům za použití rpcsec_gss. Nicméně tato syntaxe je zastaralá. V linuxových jádrech od verze 2.6.23 by mělo být používáno exportní nastavení "sec="
- sec=
- Volba sec= následovaná seznamem bezpečnostních flagů oddělených dvojtečkami, zpřísňuje export ke klientům, kteří používají tyto flagy. Dostupná bezpečností nastavení zahrnují sys (implicitní nastavení - žádná kryptografická ochrana), krb5 (pouze autentizace), krb5i (ochrana integrity) a krb5p (privacy protection). Záleží na pořadí specifikace flagů: preferované flagy by měly být na předních místech. Na pořadí samotného sec= nezáleží, pokud nemusí být ostatní parametry na předních místech kvůli vynucení provedení. V tom případě lze vložit několik sec= sekcí.
Základní přepínače¶
exportfs rozeznává následující exportní nastavení:
- secure
- Tento přepínač vyžaduje, aby připojení vycházelo z portu s číslem menším než IPPORT_RESERVED (1024). Toto je standardní nastavení. Pro jeho změnu zadejte insecure.
- rw
- Povoluje jak čtení tak zápis na tomto NFS zařízení. Implicitně není povolen žádný požadavek, který mění stav souborového systému. Toho lze dosáhnout pomocí nastavení ro.
- async
- Toto nastavení dovoluje NFS serveru neposlechnout NFS protokol a
odpovědět na požadavek dříve,
než byly jakékoliv změny provedené
daným požadavkem uloženy (např. na disk).
Použití tohoto nastavení obvykle zlepšuje výkonnost, ale za cenu, že při nečistém restartu serveru (například při pádu) se mohou ztratit nebo poškodit data
- sync
- Odpoví na dotaz až když jsou změny promítnuty do stabilního úložiště (viz async výše.) V nfs-utils do verze 1.0.0 včetně bylo toto nastavení implicitní. Od verze 1.0.0 je sync implicitní nastavení a async musí být explicitně specifikováno. Aby si byly administrátoři vědomi této změny, tak program 'exportfs' vypíše varovnou hlášku v případě, že není specifikováno ani sync ani async.
- no_wdelay
- Toto nastavení nemá žádný efekt, je-li nastaveno i async. NFS server totiž běžně zpozdí provedení požadavku o zápis na disk pokud se domnívá, že další podobný požadavek o zápis je již zpracováván nebo brzy přijde. Toto umožňuje provedení několik požadavků na zápis najednou, což může zlepšit výkon. Pokud NFS server vyřizuje malé nesouvisející požadavky, pak toto nastavení může naopak výkon snížit, takže volba no_wdelay je možno použít pro vypnutí. Implicitního nastavení lze dosáhnout pomocí volby wdelay.
- nohide
- Tato volba je založena no volbě z IRIX NFS nesoucí
stejné jméno. Běžně pokud server
exportuje dva systémy souborů přičemž
jeden je připojený do druhého, tak klient musí
explicitně připojit oba systémy souborů, aby k
nim získal přístup. Pokud se připojí
pouze rodičovský souborový systém, pak bude
vidět pouze prázdný adresář v
místě, kde má být připojen druhý
systém. Ten je totiž skrytý.
Nastavením volby nohide způsobí, že tento souborový systém nebude skrytý a klient s dostatečnými právy bude moci přecházet z rodičovského souborového systému do systému podřízeného bez toho, aby zaznamenal jakoukoli změnu.
Nicméně někteří NFS klienti si nedokáží dost dobře v takovéto situaci poradit. Například je možné, že dva soubory v jednom souborovém systému budou mít stejné číslo inodu.
Volba nohide je momentálně efektivní pouze při exportu na jednoho osta. Nefunguje spolehlivě při exportu internetové skupiny, podsítě ani za použití zástupných znaků.
Tato volba může být v některých situacích velmi užitečná, nicméně by měla být používána obezřetně a po ověření, že klient zvládá situaci bez problémů.
Tato volba může být zrušena pomocí hide.
- crossmnt
- Tato volba je podobná nohide, ale umožňuje klientovi přesunout se ze systému označeného crossmnt do exportovaného systému, který je do něj připojen. Takže pokud synovský souborový systém "B" je připojen do rodičovského systému "A", pak nastavení crossmnt na "A" má stejný efekt jako nastavení nohide na "B".
- no_subtree_check
- Tato volba znemožní kontrolu podstromů což
má sice mírné bezpečností
důsledky, ale může to zlepšit spolehlivost za
určitých podmínek.
Pokud je podadresář souborového systému exportován, ale celý souborový systém nikoli, pak vždy když dorazí NFS požadavek, tak server musí kontrolovat nejen přítomnost souboru v daném souborovém systému (což je snadné), ale také zda je soubor v exportovaném stromě (což je složitější). Takováto kontrola je nazvána kontrola podstromu.
Aby mohla být tato kontrola provedena, musí server poskytnout informace o místě, kde je soubor uložen ve "filehandle", který je poslán klientovi. Toto může způsobit problémy s přístupem k souborům, které jsou přejmenovány zatímco je má klient otevřené (ačkoli v některých jednoduchých případech to stále funguje).
Kontrola podstromu je také často používána pro ověření, že soubory, které jsou v adresářích ke kterým má přístup pouze root, jsou přístupné pouze když je souborový systém exportován s no_root_squash (viz níže), i když soubor sám může povolovat přístup i ostatním.
Obecně lze říci, že souborový systém domovského adresáře, který je běžně exportován jako root a může se v něm vyskytnout mnoho přejmenování, by měl být exportován bez kontroly podstromů. Na druhou stranu souborový systém, který je pouze pro čtení a neočekává se přinejmenším velké množství přejmenování (např. /usr nebo /var) a pro něž je možný export podadresářů, mohou být exportovány s kontrolou podstromů.
povolení kontroly podstromů lze zapnout pomocí subtree_check.
Od verze 1.1.0 včetně je defaultní nastavení no_subtree_check, protože kontrola podstromů většinou nadělá více škody než užitku. Pokud na kontrole podstromů trváte měli by jste explicitně uvést tuto volbu v exports souboru. Pokud nezadáte žádnou volbu budete na to upozorněni.
- insecure_locks
- no_auth_nlm
- Tato volba (dvě výše uvedená jména jsou
ekvivalentní) říká NFS serveru, aby
nevyžadoval autentizaci blokujících
požadavků (například požadavků,
které používají NLM protokol). Za
normálních podmínek bude NFS server vyžadovat,
aby měl blokující požadavek údaje od
uživatele, který má práva na
čtení daného souboru. Pokud je však nastavena
tato volba pak takováto kontrola nebude prováděna.
První implementace NFS klientů neposkytovaly uživatelské údaje blokujícím požadavkům a dnes ještě stále existuje mnoho NFS klientů, kteří jsou založeni na starých implementacích. Použijte tuto volbu pokud zjistíte, že máte problému s uzamykáním souborů.
Běžné chování znamenající vyžadování autentizace for NLM požadavku může být explicitně vynuceno jedním z příkazů auth_nlm nebo secure_locks.
- no_acl
- Na některých speciálně patchovaných kernelech a při exportu souborových systémů podporujících ACL říká tato volba nfs démonovi, aby neodhaloval ACL klientům, takže klienti budou vidět pouze podmnožinu povolení na daném souborovém systému. Tato volba je bezpečná pro souborové systémy používané NFSv2 a staršími NFSv3 klienty, kteří rozhodují o přístupu lokálně. Noví NFSv3 klienti používají ACCESS RPC pro rozhodování o přístupu k serveru. Je důležité vědět, že volba no_acl má efekt pouze u kernelů, které jsou speciálně patchované a při exportu souborového systému podporujícího ACL. Bežně se exportuje s ACL (takže no_acl je vypnuté).
- mountpoint=cesta
- mp
- Tato volba dovoluje exportovat pouze adresář, který
již byl úspěšně připojen. Pokud
není zadána žádná cesta
(například mountpoint nebo mp) pak
exportní bod musí být také bodem
připojení. Pokud tomu tak není, pak
exportní bod není exportován. Toto
zajišťuje, že adresář,
který je ve struktuře pod bodem připojení,
nebude náhodně exportován, pokud se
například vyskytne chyba disku při
připojování.
Pokud je zadána cesta (například mountpoint=/cesta nebo mp=/cesta) pak zadaná cesta musí být připojovacím bodem kam bude exportován bod exportu.
- fsid=num|root|uuid
- NFS musí být schopen identifikovat každý
souborový systém, který exportuje. Za
běžných okolností použije UUID
souborového systému (pokud souborový systém
nějaké UUID má) nebo číslo
zařízení na kterém se souborový
systém nachází(pokud je souborový
systém uložen na zařízení).
Jelikož ne všechny souborové systémy jsou uložené na zařízeních a zdaleka ne všechny souborové systémy mají UUID, je někdy nutné říci NFS jak má daný souborový systém identifikovat. K tomu slouží volba fsid=.
V NFSv4 existuje speciální souborový systém, který je kořenem pro všechny exportované souborové systémy. To je určeno pomocí fsdi=0 nebo fsid=root. Obě volby znamenají přesně to samé.
Jiné souborové systémy mohou být identifikovány malým celým číslem (small integer) nebo pomocí UUID, které by mělo obsahovat 32 hexadecimálních číslic a příslušnou interpunkci.
Linuxová jádra až do verze 2.6.20 neumí pracovat s UUID a proto musí být pro identifikaci použito malého celého čísla, v případě, že je to třeba. Je povoleno nastavit identifikaci pomocí UUID a čísla, takže stejná konfigurace může pracovat jak na starém tak i na novém kernelu.
- refer=path@host[+host][:path@host[+host]]
- Klient odkazující se na exportní bod bude vyzván, aby vybral z nabízeného listu alternativních lokací pro souborový systém. (Je důležité vědět, že musí mít vlastní bod připojení, tak aby nebyl vyžadován jiný souborový systém, například mount -- bind /path /path je dostačující.)
- replicas=path@host[+host][:path@host[+host]]
- Pokud klient žádá alternativní lokalitu pro svůj exportní bod, bude mu poskytnut seznam alternativ. (Je důležité vědět, že samotnou replikaci souborového systému je třeba ošetřit jinde.)
Mapování uživatelských identifikací¶
nfsd zakládá kontrolu přístupu k souborům na serveru na uid a gid, které je součástí každého NFS RPC požadavku. Logický požadavek, aby uživatel přistupoval na soubory na serveru stejně jako na lokální vyžaduje, aby uid a gid byla na klientu i serveru totožná. Toto však není vždy pravda a někdy je dokonce vyžadováno, aby tomu tak nebylo.
Velmi často není vhodné, aby uživatel root na jednom počítači byl také rootem, když přistupuje na soubory na NFS serveru. Proto se uid 0 obvykle mapuje na jiné uid zvané anonymní nebo nobody . Tento mód je standardní (nazývá se root squashing) a lze jej vypnout pomocí no_root_squash.
Nfsd standardně získává anonymní uid a gid hledáním uživatele nobody v souboru /etc/passwd při startování démona. Jestliže jej nenalezne, použije -2 (65534) jako uid i gid. Tyto hodnoty mohou být změněny pomocí přepínačů anonuid a anongid.
Navíc nfsd umožňuje nastavit mapování dalších uid a gid na uživatele nobody. Mapování všech na nobody lze nastavit přepínačem all_squash.
Aby bylo možno dynamicky nastavit mapování lokálních a vzdálených uid a gid použijte nfsd přepínač map_daemon , který používá UGID RPC protokol. Aby vše fungovalo, je třeba spustit ugidd(8) mapovací démon na straně klienta.
Zde je kompletní seznam mapovacích přepínačů:
- root_squash
- Mapuje požadavky uid/gid 0 na anonymní uid/gid. Všimněte si, že se to netýká jiných stejně citlivých uživatelů, jako je např. bin.
- no_root_squash
- Vypíná root_squash. Obvykle je vhodný pro bezdiskové stanice.
- all_squash
- Mapuje všechny uživatele na anonymního. Lze jej s výhodou použít na NFS-export veřejných FTP stromů či jiných veřejně sdílených adresářů. Vypíná se pomocí no_all_squash, což je standardní nastavení.
- anonuid a anongid
- Tyto přepínače explicitně nastavují anonymní uid a gid. Primární použití je pro PC/NFS klienty, kde se může každý požadavek jevit, jako byl přišel od jediného klienta. Jako příklad uveďme export pro /home/joe v příkladech dole, které mapuje každý požadavek na uid 150 (o kterém se předpokládá, že patří uživateli joe).
PŘÍKLAD¶
# příklad souboru /etc/exports / master(rw) trusty(rw,no_root_squash) /projects proj*.local.domain(rw) /usr *.local.domain(ro) @trusted(rw) /home/joe pc001(rw,all_squash,anonuid=150,anongid=100) /pub (ro,insecure,all_squash)
První řádka exportuje celý souborový systém počítačům master a trusty. Navíc, veškerý squashing je vypnut pro klienta trusty. Druhý a třetí příklad ukazuje, jak použít zástupné znaky pro jména počítačů a jména síťových skupin (to je @trusted). Čtvrtá řádka ukazuje export pro klienta PC/NFS (viz výše). Poslední řádka exportuje veřejný FTP adresář libovolnému počítači, přičemž všechny požadavky jsou prováděny jako uživatel nobody. Přepínač insecure dovoluje připojit klienty, kteří nepoužívají porty rezervované pro NFS.
SOUBORY¶
- /etc/exports(8)
VIZ TÉŽ¶
exportfs(8), netgroup(5), mountd(8), nfsd(8), showmount(5).
27. listopadu 2009 | 4.2 Berkeley Distribution |