Instalare server NFS. Crearea directoarelor partajate pe serverul gazdă. Descărcați și instalați componente.

Înainte de a continua să citiți acest document, va trebui să faceți Telnet cu succes între mașinile pe care le veți folosi ca server și client. Dacă ceva nu funcționează, trebuie să citiți NET-3 HOWTO și să configurați corect rețeaua.

Primul pas

Înainte de a putea face ceva, trebuie să setăm serverul NFS. Dacă faci parte dintr-o rețea de facultate sau universitate, atunci probabil că ai mai multe servere NFS configurate. Desigur, dacă vă permit să le accesați și dacă citiți acest document pentru a accesa unul dintre ele, atunci nu trebuie să citiți această secțiune și o puteți sări peste instalarea unui client NFS.

Dacă trebuie să configurați o mașină non-Linux ca server, atunci trebuie să citiți manualul pentru sistemul dorit pentru a determina cum să activați serverul NFS și să exportați sistemul de fișiere prin NFS. Descrierea modului de a face acest lucru pe diferite platforme este într-o secțiune separată. Odată ce ați determinat de ce aveți nevoie, puteți continua să citiți următoarea secțiune a acestui document. Sau citiți mai departe în această secțiune, deoarece pentru unele dintre lucrurile despre care voi vorbi, nu contează ce tip de mașină utilizați ca server.

Dacă vă grăbiți, vă rugăm să consultați secțiunea Linux 2.2 înainte de a continua să citiți aceasta.

Ceea ce citiți vă va cere să configurați mai multe programe.

Portmapper

Portmapper pe Linux se numește fie portmap, fie rpc.portmap. Pagina de manual de pe sistemul meu spune că este „Transformarea numerelor de port DARPA în apeluri de program RPC adecvate”. Aceasta este prima gaură de securitate pe care o veți descoperi în timp ce citiți acest document. O descriere a modului de închidere a uneia dintre aceste găuri se află în secțiunea de securitate, pe care vă sfătuiesc să o citiți.

Porniți portmapper. Se numește portmap sau rpc.portmap și ar trebui să fie în directorul /usr/sbin (se numește rpcbind pe unele mașini). Îl puteți porni manual acum, dar trebuie să fie pornit de fiecare dată când porniți mașina, așa că trebuie să creați/editați scripturile rc. Conținutul scripturilor dumneavoastră rc este explicat mai detaliat în pagina de manual init. Acestea se găsesc de obicei în directoarele /etc/rc.d, /etc/init.d sau /etc/rc.d/init.d. Dacă există un script numit inet, atunci îl vom edita. Dar ceea ce trebuie să fie scris în el sau ce altceva trebuie făcut nu intră în domeniul de aplicare al acestui document. Porniți portmap și verificați dacă rulează cu ps aux urmat de rpcinfo -p. Este gata? Bun.

Un lucru. Acces de la distanță programului dumneavoastră portmapper este determinat de conținutul fișierelor dumneavoastră /etc/hosts.allow și /etc/hosts.deny. Dacă rpcinfo -p nu funcționează, dar portmapper rulează, atunci vă rugăm să verificați fișierele specificate. Consultați secțiunea de securitate pentru descriere detaliata aceste fișiere.

mountd și nfsd

Următoarele programe pe care trebuie să le rulăm sunt mountd și nfsd. Dar mai întâi vom edita un alt fișier. Acesta este fișierul /etc/exports. Să presupunem că vreau ca sistemul de fișiere /mn/eris/local de pe mașina eris să fie accesibil mașinii apollon. Apoi trebuie să pun următoarele linii în fișierul /etc/exports pe mașina eris:

/mn/eris/local apollon(rw)

Liniile de mai sus dau mașinii Apollon permisiunea de citire/scriere în directorul /mn/eris/local. În loc de rw putem spune ro, ceea ce înseamnă doar citire (dacă nu introduceți nimic, va fi implicit doar citire. Există și alte opțiuni pe care le puteți seta aici și voi acoperi unele dintre ele mai târziu, care sunt relevante pentru problemă, pentru siguranță.Toate sunt listate în pagina de manual pentru exporturi, pe care ar trebui să o citiți cel puțin o dată în viață.Există, de asemenea, moduri mai bune decât listarea tuturor mașinilor la export. Puteți, de exemplu, să utilizați grupuri de rețele dacă aveți un sistem NIS (sau NYS) (NIS este cunoscut și sub numele de YP) și să utilizați întotdeauna wild carduri ale domeniilor și subrețelelor IP ca liste de mașini cărora li se permite să monteze ceva. Dar trebuie să luați în considerare cine poate accesa serverul într-un mod neautorizat dacă utilizați o astfel de autorizare generalizată.

Notă: Acest fișier de export nu are aceeași sintaxă ca celelalte. sisteme Unix. Acest document are o secțiune separată despre fișierele de export ale altor sisteme Unix.

Acum suntem gata să rulăm programele mountd (numite și rpc.mountd) și nfsd (care ar putea fi numite rpc.nfsd). Ambele programe citesc date din fișierul de export.

Dacă ați editat fișierul /etc/exports, atunci trebuie să vă asigurați că nfsd și mountd știu că fișierul s-a schimbat. Modul tradițional de a face acest lucru este să rulați programul exportfs. Pe multe distribuții program Linux exportfs lipsește. Dacă da, atunci puteți crea un script ca acesta pe mașina dvs.:

#!/bin/sh
killall -HUP /usr/sbin/rpc.mountd
killall -HUP /usr/sbin/rpc.nfsd
sisteme de fișiere reexportate echo

Salvați-l într-un fișier, spuneți /usr/sbin/exportfs și nu uitați să modificați a+rx pe el. Acum că ați modificat fișierul de export, ar trebui să rulați programul exportfs ca administrator.

Acum ar trebui să verificați dacă mountd și nfsd sunt pornite corect. Acest lucru se face mai întâi cu comanda rpcinfo -p. Ieșirea programului ar trebui să arate ceva similar cu următorul:

program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 745 mountd
100005 1 tcp 747 montat
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs

După cum puteți vedea, portmapper și-a făcut publicitate serviciilor și că mountd și nfsd rulează.

Dacă primiți mesajul rpcinfo: nu se poate contacta portmapper: RPC: la distanță eroare de sistem- Conexiune refuzată, RPC_PROG_NOT_REGISTERED sau ceva de genul în schimb, portmapper nu rulează. Sau este posibil să aveți ceva în fișierele dvs. /etc/hosts.(allow,deny) care împiedică portmapper-ul să răspundă, vă rugăm să consultați secțiunea de securitate pentru descriere detaliata aceste fișiere. Dacă primiți un mesaj No remote programs registered., atunci fie portmapper-ul nu vrea să vă vorbească, fie ceva nu este în regulă. Opriți nfsd, mountd și portmapper și încercați să reporniți secvența de pornire.

După ce ați verificat că portmapper-ul are servicii de publicitate, puteți verifica și funcționarea cu comanda ps. Portmapper va continua să-și facă publicitate serviciilor chiar și după ce programele care își extind capacitățile și-au încheiat activitatea. Deci, verificarea cu ps poate fi necesară dacă credeți că ceva nu funcționează.

Desigur, va trebui să remediați fișierele rc de sistem pentru a porni mountd și nfsd la pornire. Este foarte probabil ca aceste scripturi să existe deja pe mașina dvs. și trebuie doar să decomentați secțiunea dorită sau să activați scriptul la nivelul de rulare corect.

Paginile de manual la care ar trebui să te uiți deja sunt portmap, mountd, nfsd și exports.

Dacă ați făcut totul așa cum am spus, atunci ar fi trebuit să instalați tot ce este necesar pentru ca serverul NFS să funcționeze.

Configurarea unui client NFS

În primul rând, aveți nevoie de un nucleu cu suport pentru sistemul de fișiere NFS, fie compilat în nucleu, fie disponibil ca modul. Acesta este configurat înainte ca nucleul să fie compilat. Dacă nu ați compilat niciodată un nucleu, atunci poate fi necesar să citiți Rernel HOWTO și să aflați cum. Dacă utilizați buna distributie(cum ar fi RedHat) și nu ați experimentat niciodată cu nucleul sau modulele (și astfel le-ați distrus ;-), atunci este probabil ca suportul nfs să fie deja în nucleu.

Acum puteți, la promptul de comandă al administratorului, să introduceți comanda de montare corespunzătoare și sistemul de fișiere va apărea pentru dvs. Continuând exemplul din secțiunea anterioară, dorim să montam /mn/eris/local de pe mașina eris. Acest lucru se face cu următoarea comandă:

mount -o rsiize=1024,wsize=1024 eris:/mn/eris/local /mnt

(Vom reveni la opțiunile rsiize și wsize mai târziu.) Sistemul de fișiere este acum disponibil în /mnt și puteți merge acolo și rula ls pe el și vă uitați la fișierele individuale. Veți observa că această operațiune nu este la fel de rapidă ca pe sistemul de fișiere local, dar este mai convenabilă decât ftp. Dacă, în loc să monteze sistemul de fișiere, comanda mount dă eroarea mount: eris:/mn/eris/local failed, motiv dat de server: Permisiune refuzată, atunci fișierul de export este greșit sau ați uitat să rulați exportfs după editarea fișierului exporturi. Dacă comanda spune mount clntudp_create: RPC: Program not registered înseamnă că nfsd sau mountd nu rulează pe server. Sau aveți o problemă cu gazdele (permiteți, refuzați) menționate mai sus.

Pentru a opri utilizarea sistemului de fișiere, puteți rula:

Pentru a monta automat sistemul de fișiere nfs la pornire, trebuie să editați fișierul /etc/fstab ca de obicei. Exemplul nostru necesită această linie:


...
eris:/mn/eris/local/mnt nfs rsize=1024,wsize=1024 0 0
...

Cam de asta este tot ce trebuie. Vă rugăm să citiți mai departe.

Opțiuni de montare

Iată câteva dintre opțiunile pe care ar trebui să le luați în considerare imediat când le adăugați la fișierul de setări. Ei controlează modul în care clientul NFS gestionează o oprire a serverului sau o întrerupere a rețelei. Unul dintre lucrurile grozave despre NFS este că poate gestiona cu grație aceste probleme dacă configurați corect clientul. Există două moduri distincte de gestionare a erorilor:

Un client NFS va raporta o eroare unui program care încearcă să acceseze un fișier situat pe un sistem de fișiere montat pe NFS. Unele programe tratează destul de bine acest tip de eroare, dar majoritatea programelor nu o fac. Nu recomand utilizarea acestei opțiuni, poate duce la fișiere corupte și pierderi de date. În special, nu ar trebui să utilizați această opțiune pentru unitățile folosite pentru e-mail dacă e-mailul înseamnă ceva pentru dvs.

Un program care accesează un fișier pe un sistem de fișiere montat pe NFS va suspenda pur și simplu execuția atunci când conexiunea la server este întreruptă. Procesul nu poate fi întrerupt sau ucis decât dacă specificați în mod explicit opțiunea intr. Când serverul NFS este repornit, programul va continua netulburat de unde a rămas. Acesta este cel mai probabil ceea ce aveți nevoie. Recomand să utilizați opțiunile hard,intr pe toate sistemele de fișiere montate NFS.

Continuând cu exemplul anterior, intrarea noastră fstab va arăta acum astfel:

# dispozitiv mountpoint opțiuni de tip fs dump fsckorder
...
eris:/mn/eris/local /mnt nfs rsize=1024,wsize=1024,hard,intr 0 0
...

Optimizare NFS

În mod normal, dacă opțiunile rsiize și wsize nu sunt setate, atunci NFS va citi și scrie în blocuri de 4096 sau 8192 de octeți. Unele combinații de nuclee Linux și plăci de rețea nu poate gestiona blocuri atât de mari și poate să nu fie optim. Așadar, trebuie să experimentăm și să găsim valori rsiize și wsize care funcționează cât mai repede posibil. Puteți testa viteza de transfer cu opțiunile date cu câteva comenzi simple. Rulând comanda de montare de mai sus și obținând acces de scriere pe disc, puteți testa performanța de scriere secvențială:

time dd if=/dev/zero of=/mnt/testfile bs=16k count=4096

Această comandă creează un fișier de 64 Mb plin cu zerouri (acest fișier ar trebui să fie suficient de mare, suficient de mare încât stocarea în cache să nu joace un rol semnificativ în performanță, utilizați o dimensiune mai mare a fișierului dacă aveți suficientă memorie). Faceți această operație de mai multe ori (5-10?) și mediați rezultatele. Valoarea rezultată este „timpul de trecere”, adică valoarea care ne interesează cel mai mult în acest experiment. Apoi puteți măsura performanța de citire citind fișierul înapoi pe computer:

time dd if=/mnt/testfile of=/dev/null bs=16k

efectuați această operație de mai multe ori și mediați rezultatul. Apoi demontați sistemul de fișiere și montați-l din nou cu dimensiune și wsize crescute. Probabil ar trebui să fie multipli de 1024 și nu mai mult de 16384 de octeți, deoarece aceasta dimensiune maximă bloc de date în versiuni NFS 2. Imediat după montare cu valori crescute, mergeți la sistemul de fișiere montat și rulați o comandă ca ls, examinați sistemul de fișiere pentru a vă asigura că totul este în regulă. Dacă valorile rsiize/wsize sunt prea mari, atunci simptomele sunt foarte neobișnuite și nu sunt 100% evidente. Un simptom tipic este o listă incompletă de fișiere atunci când rulează comanda „ls” și niciun mesaj de eroare. Sau citirea fișierelor eșuează în mod misterios fără un mesaj de eroare. După ce instalezi asta puncte de referință rsiize/wsize lucrează, puteți continua să testați performanța. Variat platforme de server probabil să aibă diferite dimensiuni optime de bloc. SunOS și Solaris sunt, în general, considerate a fi destul de mai rapide, cu o dimensiune a blocului de 4096 de octeți decât cu alte valori.

Nucleele Linux mai noi (începând cu 1.3) efectuează citire preliminară pentru valori de dimensiune mai mari sau egale cu dimensiunea paginii mașinii. Pe procesoarele Intel, dimensiunea paginii este de 4096 de octeți. Read-ahead îmbunătățește considerabil performanța de citire NFS. Deci pe mașinile cu procesor Intel poate doriți să utilizați o valoare a dimensiunii de 4096 de octeți.

Amintiți-vă că trebuie să editați /etc/fstab pentru a utiliza valorile găsite rsiize/wsize.

Un truc pentru a îmbunătăți performanța de scriere NFS este dezactivarea scrierilor sincrone pe server. Specificația NFS cere ca cererile de scriere NFS să nu fie considerate complete până când datele sunt scrise pe suport (de obicei, un disc). Acest lucru limitează performanța de scriere, iar scrierile asincrone vor crește foarte mult viteza de scriere NFS. Daemonul Linux nfsd nu scrie niciodată sincron, deoarece implementarea sistemului de fișiere Linux în sine îl împiedică să facă acest lucru, dar pe serverele care rulează pe sisteme non-Linux, puteți crește performanța în acest fel introducând fișierul dvs. de export:

/dir -async,access=linuxbox

sau ceva asemanator. Vă rugăm să consultați pagina manual de exporturi de pe această mașină. De asemenea, rețineți că acest lucru crește riscul de pierdere a datelor.

NFS pe linii lente

Liniile lente includ modemuri, ISDN și alte conexiuni la distanță lungă.

Această secțiune se bazează pe cunoașterea protocoalelor utilizate și nu pe experimente reale. Te rog spune-mi daca incerci asta :-)

Primul lucru pe care ar trebui să-l rețineți este că NFS este un protocol lent. Utilizarea NFS seamănă cu utilizarea protocolului Kermit pentru transferurile de fișiere. Acest lucru este lent. Aproape totul este mai rapid decât NFS. FTP este mai rapid. HTTP este mai rapid. rcp este mai rapid. ssh este mai rapid.

Mai vrei să încerci la serviciu? O.K.

Setările implicite pentru NFS sunt setate la linii destul de rapide, cu latență scăzută. Dacă utilizați aceste setări pentru linii cu latență mare, va avea ca rezultat mesaje de eroare, operațiuni întrerupte, sistemul poate pretinde că fișierele sunt mai scurte decât sunt în realitate și funcționează ciudat în alte cazuri.

Primul lucru pe care trebuie să-l faceți este să nu utilizați opțiunea de montare moale. Acest lucru va face ca semnalele de eroare să fie returnate software-ului la expirări. În cea mai mare parte, software-ul obișnuit nu tratează prea bine astfel de erori. aceasta mod bun obține accidente ciudate. Utilizați în schimb opțiunea de montare rigidă. Când opțiunea hard este activată, timeout-urile provoacă încercări nesfârșite de reluare în loc să vă întrerupă programele. Acesta este ceea ce ai nevoie cu adevărat.

Următorul lucru de făcut este să experimentați cu opțiunile de montare timeo și retrans. Sunt descrise în pagina de manual nfs(5), iată un extras din aceasta:

timeo=n Valoare în zecimi de secundă înainte de trimitere
primul releu după expirarea timpului RPC. De
implicit, această valoare este de 7 zecimi
secunde. După primul timeout, timeout time
dublat după fiecare timeout până la
va fi atinsă valoarea maximă de timeout
este egal cu 60 de secunde sau se va întâmpla destul
releu, provocând un timeout major. Atunci dacă
sistemul de fișiere este montat cu opțiunea hard, atunci
fiecare nou timeout este cascat cu
valoarea inițială este de două ori mai mare decât at
cascada anterioară, pe lângă dublarea
fiecare releu. Timeout maxim este întotdeauna
este egal cu 60 de secunde. Cel mai bun per total
performanța poate fi atinsă
creșterea timpului de expirare la montare
rețea ocupată, către un server lent sau
prin mai multe routere.

retrans=n Această valoare specifică numărul de non-baze
timeout-uri și retransmisii, care ar trebui
apar înainte de expirarea timpului principal. De
această valoare este 3 în mod implicit.
timeout principal, apoi operațiunile de fișiere
sunt întrerupte sau este tipărit un mesaj pe consolă
„serverul nu răspunde”.

Cu alte cuvinte: dacă cererea nu este transmisă într-un interval de 0,7 secunde (700 ms), atunci clientul NFS va reîncerca solicitarea și va dubla timpul de expirare la 1,4 secunde. Dacă răspunsul nu este primit în 1,4 secunde, cererea va fi repetată și timpul de expirare va crește la 2,8 secunde.

Viteza liniei poate fi măsurată folosind comanda ping cu o dimensiune a pachetului egală cu valoarea stabilite de opțiuni mărime/mărime.

$ ping -s 8192 lugulbanda
PING lugulbanda.uio.no (129.240.222.99): 8192 octeți de date
8200 de octeți de la 129.240.222.99: icmp_seq=0 ttl=64 time=15,2 ms
8200 de octeți de la 129.240.222.99: icmp_seq=1 ttl=64 time=15,9 ms
8200 de octeți de la 129.240.222.99: icmp_seq=2 ttl=64 time=14,9 ms
8200 de octeți de la 129.240.222.99: icmp_seq=3 ttl=64 time=14,9 ms
8200 de octeți de la 129.240.222.99: icmp_seq=4 ttl=64 time=15.0 ms

Statistici ping Lugulbanda.uio.no ---
5 pachete transmise, 5 pachete primite, 0% pierdere de pachete
dus-întors min/medie/max = 14,9/15,1/15,9 ms

Aici, timpul indică cât durează pachetul de ping pentru a călători înainte și înapoi la aparatul lugulbanda. 15 ms este destul de rapid. Când lucrați printr-un modem la 28.000 baud vă puteți aștepta undeva la 4000-5000ms, iar dacă linia este încărcată de altcineva, atunci timpul va fi și mai mare, poate de două ori. Când acest timp este mare, spunem că este „latență mare”. În general, pentru pachetele mai mari și pentru liniile mai ocupate, latența va crește. Creșteți timeo în funcție de linia și sarcina dvs. Și pentru că latența crește atunci când utilizați linia pentru alte lucruri: chiar dacă doriți să utilizați FTP și NFS în același timp, ar trebui să încercați să măsurați timpul de ping în timp ce utilizați FTP pentru a transfera fișiere.

Securitate și NFS

Nu sunt deloc un expert în domeniu. Securitatea calculatorului. Dar am un mic sfat pentru cei conștienți de securitate. Dar fiți atenți: această listă nu este în niciun caz lista completa probleme legate de NFS și dacă crezi că ești în siguranță odată ce citești și faci tot ce dau aici, atunci vreau să te avertizez.

Această secțiune nu ar trebui să vă deranjeze dacă vă aflați într-o rețea închisă în care aveți încredere în toți utilizatorii și nimeni în care aveți încredere nu poate accesa mașinile din rețea. De exemplu, nu ar trebui să existe o conexiune dial-up la rețea și nu ar trebui să existe nicio modalitate de a vă conecta la o rețea în care aveți oameni în care nu aveți încredere. Crezi că sunt paranoic? Nu sunt paranoic. Acesta este un sfat de bază de siguranță. Securitatea necesită un administrator atent și informat, care știe unde să găsească informații despre problemele actuale și potențiale de securitate.

Principala problemă cu NFS este că clientul, dacă nu este setat, va avea încredere în server și invers. S-ar putea să fie rău. Aceasta înseamnă că, dacă intrarea de administrator a serverului NFS este compromisă, atunci și intrarea de administrator a mașinii client poate fi ușor compromisă. Si invers. Există un set de strategii ale poliției pentru asta, vom reveni la ele mai târziu.

Ceea ce trebuie să citiți este materialul consultativ CERT legat de NFS. Majoritatea textelor de mai jos sunt legate de sfaturi scrise în probleme CERT. Consultați ftp.cert.org/01-README pentru o listă actualizată a materialelor consultative CERT. Iată câteva materiale de consiliere legate de NFS:

CA-91:21.SunOS.NFS.Jumbo.and.fsirand 12/06/91
Vulnerabilitatea Sun Network File System (NFS).
Microsystems Inc. (Soare) și programe fsirand. Această vulnerabilitate
disponibil în SunOS 4.1.1, 4.1 și 4.0.3 pentru toate
arhitecturi. Patch-uri disponibile pentru SunOS
4.1.1. Este disponibil și un patch inițial pentru SunOS 4.1 NFS. Soare
va furniza corecții complete pentru SunOS 4.1 și SunOS 4.0.3 la o dată ulterioară.

CA-94:15.NFS.Vulnerabilities 19/12/94
Acest material consultativ oferă măsurători
securitate de care să ne ferim împotriva unor găuri de securitate
pe sistemul de fișiere de rețea (NFS). Acest articol a fost lansat în legătură cu
creșterea cazurilor de hacking de mașini folosind utilități pentru
piratarea prin puncte vulnerabile.

CA-96.08.pcnfsd 18/04/96
Acest material descrie problemele de securitate din programul pcnfsd.
(cunoscut și ca rpc.pcnfsd). Patch de remediere a erorilor
atașat.

Securitatea clientului

Pe partea de client, putem decide că nu vrem să avem prea multă încredere în server. Acest lucru se face în mai multe moduri folosind opțiunile de montare. De exemplu, putem dezactiva execuția programelor cu bitul suid setat pe un sistem de fișiere NFS, acest lucru se face cu opțiunea de montare nosuid. aceasta o idee bunași ar trebui să luați în considerare utilizarea NFS montat sisteme de fișiere. Aceasta înseamnă că administratorul serverului nu va putea face programe cu suid-ul de administrare setat pe sistemul de fișiere, apoi va putea conecta la computerul client ca utilizator normal și va folosi programul cu suid-ul de administrator pentru a obține drepturi de administrator pe mașina client ca bine. De asemenea, putem împiedica executarea fișierelor pe un sistem de fișiere montat cu opțiunea noexec. Dar este mai puțin frecventă decât opțiunea nosuid, deoarece sistemul de fișiere poate conține cel puțin unele scripturi sau programe care trebuie executate. Puteți introduce aceste opțiuni în coloana Opțiuni împreună cu opțiunile rsiize și wsize, separate prin virgule.

Securitate server: nfsd

Pe partea de server, putem decide că nu vrem să avem încredere în administratorul clientului. Putem face acest lucru specificând opțiunea root_squash în fișierul de export:

/mn/eris/local apollon(rw,root_squash)

Acum, dacă un utilizator cu UID 0 pe partea clientului încearcă să acceseze (citește, scrie, șterge), atunci server de fișiere va efectua „nobody” UID squash pe server. Aceasta înseamnă că administratorul clientului nu va putea accesa sau modifica fișierele pe care doar administratorul serverului le poate modifica sau accesa. Acest lucru este bine și ar trebui să utilizați opțiunea root_squash pe toate sistemele de fișiere exportate Veți spune că „Administratorul clientului poate încă rula comanda „su” pentru a se autentifica ca orice alt utilizator și pentru a accesa și modifica orice fișier de utilizator.” Răspunsul la aceasta este „Da, există o modalitate și funcționează pe Unix și NFS. . Aceasta are o concluzie importantă: toate fișierele și programele importante ar trebui să fie deținute de utilizatorul root și nu de utilizatorul bin sau alt utilizator non-administrator, deoarece numai administratorul clientului nu poate accesa ca administrator de server. Există câteva alte opțiuni similare din pagina de manual NFSd, așa că ați putea decide că nu aveți (nu) încredere în nimeni din partea clientului. De asemenea, aveți opțiuni pentru a trunchia orice interval UID și GID. Acest lucru este descris în pagina de manual Linux NFSd.

Opțiunea root_squash este implicită pentru NFSd pe Linux, utilizați opțiunea no_root_squash pentru a acorda permisiuni de administrator pentru a accesa sistemul de fișiere.

Un alt lucru important de făcut este să vă asigurați că nfsd verifică dacă toate cererile provin dintr-un port privilegiat. Dacă acceptă solicitări de la orice port vechi al clientului, atunci un utilizator fără privilegii speciale poate rula un program ușor de accesat prin Internet. Poate „vorbi” limbajul protocolului nfs și va pretinde că utilizatorul este orice utilizator dorește să fie. NFSD pe Linux face această verificare în mod implicit, dar pentru alte sisteme de operare trebuie să activați singur această verificare. Acest lucru ar trebui să fie descris în pagina de manual nfsd pentru sistemul dvs. de operare.

Alt lucru. Nu exportați niciodată un sistem de fișiere pentru o mașină numită „localhost” sau 127.0.0.1. Aveţi încredere în mine.

Securitate server: portmapper

Portmapper-ul de bază, împreună cu nfsd, are o problemă de design care face posibilă obținerea fișierelor de pe serverele NFS fără privilegii. Din fericire, portmapper-ul folosit de majoritatea distribuțiilor Linux este relativ sigur împotriva unui astfel de atac și poate fi mai sigur prin configurarea unei liste de acces în două fișiere.

Nu tot distribuții Linux au şanse egale. Unele distribuții care par actualizate nu includ opțiune sigură programul portmapper, chiar și acum, la mulți ani după ce vulnerabilitățile sale au devenit cunoscute. Cel puțin o distribuție conține chiar și o pagină de manual pentru un portmapper mai sigur, dar portmapper-ul său nu este de fapt sigur. cu cel mai mult calea ușoară pentru a verifica dacă portmapper-ul tău este bun sau nu este să rulezi programul strings(1) și să te uiți la ieșirea acestuia pentru fișierele /etc/hosts.deny și /etc/hosts.allow. Presupunând că portmapper-ul dumneavoastră este /usr/sbin/portmap, puteți verifica acest lucru rulând următoarea comandă: șiruri de caractere /usr/sbin/portmap | gazde grep. pe mașina mea a funcționat cu următoarele rezultate:

/etc/hosts.allow
/etc/hosts.deny
@(#) hosts_ctl.c 1.4 94/12/28 17:42:27
@(#) hosts_access.c 1.20 96/02/11 17:01:27

Mai întâi vom edita fișierul /etc/hosts.deny. Trebuie să conțină linia

care va interzice accesul tuturor. Deoarece acest lucru a refuzat accesul tuturor, rulați rpcinfo -p doar pentru a verifica dacă portmapper-ul dvs. citește acest fișier și execută instrucțiunile date. Comanda rpcinfo nu ar trebui să scoată nimic sau ar trebui să returneze un mesaj de eroare. Repornirea portmapper-ului nu este necesară.

Închiderea portmap-ului pentru toată lumea ar putea fi prea drastică, așa că vom deschide din nou accesul prin schimbarea fișierului /etc/hosts.allow. Dar mai întâi trebuie să stabilim ce vom pune acolo. Acest fișier listează toate mașinile care vă pot accesa portmapper-ul. Dintre numeroasele sisteme care rulează Linux, doar câteva mașini au nevoie de acces complet pentru a face orice. Portmapper servește servicii nfsd, mountd, ypbind/ypserv, pcnfsd și „r”, cum ar fi ruptime și rusers. Dintre acestea, doar nfsd, mountd, ypbind/ypserv și, eventual, pcnfsd au vreo importanță. Toate mașinile care trebuie să acceseze serviciile de pe computerul dvs. ar trebui să aibă permisiunea să facă acest lucru. Să presupunem că adresa mașinii este 129.240.223.254 și se află pe subrețeaua 129.240.223.0 și trebuie să acceseze serviciile pe mașina dvs. (acești termeni sunt introduși de HOWTO-ul de rețea, reveniți și periați dacă este necesar). Pentru a face acest lucru, vom scrie în fișierul hosts.allow

Portmap: 129.240.223.0/255.255.255.0

Aceasta este aceeași cu adresa de rețea pe care o dați cu comanda de rută și cu masca de subrețea pe care o dați cu comanda ifconfig. Pentru dispozitivul eth0 de pe această mașină, ar trebui să se afișeze ifconfig

...
eth0 Link Encap: 10Mbps Ethernet HWaddr 00:60:8C:96:D5:56
inet adresa:129.240.223.254 Bcast:129.240.223.255 Masca:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Pachete RX:360315 erori:0 scăpat:0 depășiri:0
Pachete TX:179274 erori:0 dropped:0 overruns:0
Întrerupere: 10 Adresă de bază: 0x320
...

și netstat -rn ar trebui să arate

Tabel de rutare a nucleului
Destination Gateway Genmask Flags Metric Ref Utilizare Iface
...
129.240.223.0 0.0.0.0 255.255.255.0 U 0 0 174412 eth0
...

(Adresa de rețea este în prima coloană).

Fișierele hosts.deny și hosts.allow sunt descrise în paginile de manual cu același nume.

IMPORTANT: Nu introduceți nimic în aceste fișiere în afară de NUMERE IP pe linii pentru a configura portmap. Căutarea numelui de gazdă poate invoca o activitate portmap, care va invoca o căutare a numelui de gazdă, care va invoca o portmap, care va invoca...

Lucrurile de mai sus ar trebui să declanșeze comutarea serverului. Problema rămasă este că cineva va pirata administratorul (sau va porni MS-DOS) pe o mașină de încredere și va folosi acele privilegii pentru a trimite cereri către un port securizat ca orice utilizator pe care își dorește să fie.

NFS și firewall

Este o idee foarte bună să aplicați firewall porturile nfs și portmap de pe router. Nfsd rulează pe portul 2049 folosind ambele protocoale -- udp și tcp. Portmapper rulează pe porturile 111, tcp și udp, iar mountd rulează pe porturile 745 și 747, tcp și udp. Mod implicit. Ar trebui să verificați numerele de porturi utilizate folosind comanda rpcinfo -p.

Dacă doriți să utilizați NFS prin firewall, există opțiuni pentru noile versiuni de NFSd și mountd pentru a le forța să folosească porturi non-standard, care poate fi deschis în firewall.

rezumat

Dacă utilizați hosts.allow/deny, root_squash, nosuid și porturi privilegiate în software portmapper/nfs, atunci puteți evita bug-uri cunoscuteîn nfs și aproape că te poți simți în siguranță. Dar totuși: atunci când un intrus are acces la rețeaua dvs., el/ea poate adăuga comenzi ciudate la fișierul dvs. .forward sau cutie poștală când /home sau /var/spool/mail este montat NFS. Din același motiv, nu ar trebui să accesați niciodată cheile private PGP prin nfs. Sau cel puțin ar trebui să știi care este riscul. Și știu măcar puțin despre el.

NFS și portmapper creează un sistem complex și, prin urmare, nu este deloc de necrezut că vor fi găsite noi erori, fie în nucleul proiectului, fie în implementarea pe care o folosim. De asemenea, pot exista găuri cunoscute pe care cineva le exploatează. Dar așa este viața. Ar trebui să citiți cel puțin grupurile de știri comp.os.linux.announce și comp.security.announce pentru a fi la curent cu astfel de lucruri.

Montați lista de verificare pentru depanare

Această secțiune se bazează pe Lista de verificare a problemelor montate, acest document este scris de IBM Corp. Le sunt recunoscător pentru că l-au pus la dispoziție pentru utilizare în acest document. Dacă aveți o problemă la montarea unui sistem de fișiere prin NFS, vă rugăm să verificați această listă înainte de a depune un raport de eroare. Fiecare item descrie o problemă specifică și soluția ei.

Comanda mount continuă să spună RPC: Program not registered Portmapper rulează?

Remediere: rulați-l.

Mountd rulează?

Remediere: rulați-l.

Funcționează nfsd?

Remediere: rulați-l.

Portmapper nu are voie să răspundă solicitărilor dumneavoastră cu fișierul /etc/hosts.deny?

Remediere: fie eliminați regula din fișierul hosts.deny, fie adăugați o regulă în fișierul hosts.allow, astfel încât portmapper-ul să aibă voie să vă vorbească.

Sistemul de fișiere nu este exportat sau nu este exportat atunci când este solicitat de client. Remediere: exportați-l

Sistemul de rezoluție de nume nu se potrivește cu lista de mașini din exporturi. De exemplu: Lista resurselor exportate specifică exportul lui johnmad, dar numele johnmad se rezolvă în johnmad.austin.ibm.com și montarea este refuzată.

Remediere: Exportați resursa pentru ambele forme ale numelui mașinii.

Acest lucru se întâmplă și dacă clientul are 2 interfețe cu nume diferite pentru fiecare și sistemul de fișiere este exportat doar pentru numele specificat.

Remediere: exportați ambele interfețe.

Acest lucru se poate întâmpla și dacă serverul nu poate executa funcțiile lookuphostbyname sau lookuphostbyaddr (acestea sunt funcții de bibliotecă) pe client. Asigurați-vă că clientul poate rula comenzi gazdă ; gazdă ; și amândoi arată către aceeași mașină.

Corecție: remediați sistemul de rezoluție a numelor.

Sistemul de fișiere a fost montat după ce a fost pornit NFS (pe acel server). În acest caz, serverul exportă punctul de montare în sine, nu sistemul de fișiere montat. Remediere: închideți NFSd și apoi reporniți-l.

Notă: Clienții care au fost deja montați pe un punct de montare a sistemului de fișiere vor avea probleme la accesarea acestuia după repornirea serverului.

Data este schimbată aleatoriu pe una sau ambele mașini (acest lucru poate încurca marca). Corecție: setați data corectă.

Autorul HOWTO recomandă utilizarea NTP pentru sincronizarea ceasului. Deoarece există restricții de export pentru US NTP, puteți obține NTP pentru Debian, Red Hat sau Slackware de la ftp://ftp.hacktic.nl/pub/replay/pub/linux sau de pe un server oglindă.

Serverul nu permite montarea de la un utilizator care se află în mai mult de 8 grupuri. Corectare: reduceți numărul de grupuri din care aparține utilizatorul sau le montează sub numele altui utilizator.

Întrebări frecvente (FAQ)

Aceasta este secțiunea Întrebări frecvente (FAQ). O mare parte se bazează pe un vechi Întrebări frecvente scris de Alan Cox.

Dacă întâmpinați probleme la montarea unui sistem de fișiere, vă rugăm să vedeți dacă acesta este descris în secțiunea ``Montarea listei de verificare''.

Primesc erori ``stale nfs handle (stale nfs handle)"" când folosind Linux ca servere nfs. Acest lucru este cauzat de o eroare în una dintre versiunile mai vechi de nfsd. Acest lucru a fost remediat în nfs-server2.2beta16 și mai târziu.

Când încerc să montez sistemul de fișiere, primesc mesajul
nu se poate înregistra cu portmap: eroare de sistem la trimitere
(nu se poate înregistra cu portmap: eroare de sistem la trimitere)

Probabil că utilizați sistemul Caldera. Acesta este o eroare în scripturile rc. Vă rugăm să contactați Caldera pentru o remediere.

De ce nu pot executa un fișier după ce l-am copiat pe un server NFS? Motivul este că nfsd memorează în cache descriptori de fișiere deschise pentru a îmbunătăți performanța (rețineți că rulează în spațiul utilizatorului). Atâta timp cât nfsd menține fișierul deschis (ca în acest caz, după ce ați scris în el), nucleul nu vă va lăsa să-l executați. Nfsd-urile mai noi decât versiunile de primăvară 95 păstrează fișierele deschise pentru câteva secunde, cele mai vechi pot păstra un fișier deschis zile întregi.

Fișierele mele de pe NFS sunt toate tratate ca doar pentru citire În mod implicit, NFS Server pentru Linux emite totul ca doar pentru citire. Recitiți secțiunile ``Mountd și nfsd"" și ``Exporting Filesystems"" din acest document, precum și paginile de manual ``exports"" și nfsd. Trebuie să modificați /etc/exports.

Montez un sistem de fișiere de pe un server nfs sub Linux și în timp ce comanda ls rulează, nu pot citi sau scrie fișiere. Pe versiunile mai vechi de Linux, trebuie să montați serverul NFS cu opțiunile rsize=1024,wsize=1024.

Montez un sistem de fișiere de pe un server Linux NFS cu o dimensiune a blocului între 3500-4000 și blochează mașina Linux în mod regulat. Nu faceți acest lucru în mod normal. Acest lucru nu se întâmplă cu versiunile de kernel 2.0 și 2.2. Nu există nicio problemă cu nucleele din seria 2.1.

Poate Linux să facă NFS peste TCP Nr

Primesc erori ciudate când montez o mașină de pe o mașină Linux. Asigurați-vă că utilizatorul este în 8 sau mai puține grupuri. Serverele mai vechi o necesită.

Când îmi repornesc aparatul, uneori se blochează când încerc să demontez de pe un server NFS blocat. Nu demontați de pe serverele NFS la repornire sau oprire, ignorați-l, nimic nu va fi deteriorat dacă nu demontați de pe el. Comanda va arăta astfel umount -avt nonfs.

Clientul NFS pentru Linux este foarte lent când scrieți pe sistemele Sun și BSD. În mod normal, NFS scrie în modul sincron (puteți dezactiva acest lucru dacă nu credeți că riscați să pierdeți date). Cel mai rău dintre toate, nucleele derivate din BSD nu pot face față blocurilor mici. Deci, când scrieți date 4K de pe o mașină Linux în pachete de 1K, atunci BSD procedează așa


schimba 1K
citește pagina în 4K
schimba 1K
scrieți o pagină de 4K înapoi pe disc
etc...

Când conectez mulți clienți la un server Linux NFS, performanța acestuia scade brusc. Protocolul NFS utilizează pachete UDP fragmentate. Nucleul are o limită a numărului de fragmente sau pachete incomplete care vor ajunge înainte de a începe să arunce pachete. În nucleele din seria 2.2, aceasta este configurată în timpul rulării prin sistemul de fișiere /proc: /proc/sys/net/ipv4/ipfrag_high_thresh și ipfrag_low_thresh. În nucleele din seria 2.0, aceste constante sunt definite în timpul compilării și sunt definite în .../linux/net/ipv4/ip_fragment.c, IPFRAG_HIGH_THRESH și IPFRAG_LOW_THRESH. Aceste opțiuni înseamnă că atunci când consumul de memorie al fragmentelor de pachete UDP necolectate atinge valoarea „ipfrag_high_thresh”” în octeți (implicit 256K în nucleele 2.2.3 și 2.0.36) va scădea la valoarea „ipfrag_low_tresh””. Acest lucru se face prin aruncarea fragmentelor. Aceasta va arăta ca o pierdere aproape completă de pachete, iar dacă limita superioară este atinsă, atunci performanța serverului dumneavoastră va fi mult redusă.

256K este suficient pentru a servi până la 30 de clienți. Dacă aveți 60 de clienți, atunci creșteți această valoare de 2 ori. Și, de asemenea, crește valoarea limitei inferioare.

Folosesc Linux 2.2 (sau mai târziu) cu knfsd și nu pot face ca mașinile mele AIX, IRIX, Solaris, DEC-Unix, ... să se monteze pe el. Knfsd pretinde că implementează versiunea 3 a NFS. Nu o face. Există o opțiune care îl împiedică să-l anunțe. Folosește-o. Sau puteți pune „vers=2” în lista de opțiuni de montare pe client.

Aparatul meu AIX 4 nu poate monta servere NFS sub Linux. Ea raportează
mount: 1831-011 acces refuzat pentru server:/dir
montură: 1831-008 renunțând la:
server:/dir
Permisiunile de acces la fișiere nu permit acțiunea specificată.

sau ceva asemanator. AIX 4.2 folosește porturi rezervate (<1024) для NFS. AIX 4.2.1 и 4.3 не ограничены резервированными портами. Также AIX 4.2.1 и 4.3 пытаются произвести монтирование используя версию NFS3, затем NFS/TCP, и только потом NFS/UDP.

Adăugarea de rânduri

nfso -o nfs_use_reserved_ports=1

până la sfârșitul fișierului rc.tcpip îl va forța să folosească porturi rezervate. (Acest sfat a fost trimis de Brian Gorka).

Exportarea sistemelor de fișiere

Modul în care sistemele de fișiere sunt exportate folosind NFS nu este pe deplin compatibil între platforme. În acest caz, diferă Linux și Solaris 2. Această secțiune listează pe scurt modalități de a efectua această operație pe majoritatea sistemelor. Dacă sistemul dumneavoastră nu este listat aici, vă rugăm să consultați paginile de manual pentru sistemul dumneavoastră de operare. Cuvintele cheie sunt: ​​nfsd, instrument de administrare a sistemului, scripturi rc, scripturi de pornire, secvență de pornire, /etc/exports, exportfs. Voi folosi un exemplu pentru întreaga partiție: cum să exportați sistemul de fișiere /mn/eris/local pentru o mașină Apollon cu permisiuni de citire/scriere.

IRIX, HP-UX, Digital-UNIX, Ultrix, SunOS 4 (Solaris 1), AIX

Aceste sisteme de operare folosesc formatul tradițional de export Sun. În fișierul /etc/exports scrieți:

/mn/eris/local -rw=apollon

Documentația completă este în pagina de manual pentru exporturi. După editarea fișierului, rulați exportfs -av pentru a exporta sistemele de fișiere.

Sintaxa exactă a comenzii exportfs variază. În unele sisteme de operare este posibil să descoperiți că rândurile introduse sunt citite ca:

/mn/eris/local apollo

sau chiar asa:

Solaris 2

Sun a reinventat complet roata cu Solaris 2. Deci este complet diferit de alte sisteme de operare. Ceea ce trebuie să faceți este să editați fișierul /etc/dfs/dfstab. În acesta, trebuie să plasați comenzile de partajare așa cum este descris în pagina de manual share(1M). Aproximativ aceste rânduri:

share -o rw=apollon -d "Eris Local" /mn/eris/local

După editare, rulați programul shareall pentru a exporta sistemul de fișiere.

NFS în Linux 2.2

Așa cum am scris, Linux 2.2.12 este versiunea actuală a kernelului și poate fi nevoie de câteva treburi pentru a folosi NFS pe el. Sau nu este necesar.

Nu știu care va fi starea NFS în Linux 2.4.

O mare caracteristică nouă în Linux 2.2 este suportul pentru un daemon nfs în nucleu numit knfsd. Acest mod de implementare a nfsd are mai multe avantaje, principalul fiind viteza. O mașină cu Linux 2.2 și knfsd este un server nfs solid. Puteți folosi în continuare vechiul nfsd cu Linux 2.2 și există și câteva avantaje, mai ales simplitatea.

Dacă utilizați surse de kernel sau pachete binare create de cineva precum RedHat (6.0 și versiuni ulterioare), SuSE (6.1 sau mai recente) sau alt integrator de sistem profesionist, cel mai probabil acestea vor veni cu integrare completă „knfsd” în nucleu și nu va trebui să vă faceți griji. În cele mai multe cazuri. Până când ajungi să compilați singur nucleul. Dacă utilizați un nucleu Linux 2.2 obișnuit (cel puțin 2.2.12), atunci knfsd nu va funcționa.

Pentru a face acest lucru singur trebuie să obțineți pachetul knfsd realizat de H.J. Lus. Acest pachet este o colecție de patch-uri și utilități necesare pentru nucleele din seria 2.2 pe care Lu le menține în timpul liber. Îl puteți obține de la oglinda serverului local de kernel sau de pe serverul principal, la ftp.kernel.org:/pub/linux/devel/gcc/. Nu este destinat utilizării generale. Dacă nu înțelegeți acest pachet, atunci nu încercați să îl utilizați singur. Așteptați ca pachetele de nucleu să fie lansate de către integratorul dvs. de sistem favorit (de exemplu, Red Hat, SuSE sau...).

De asemenea, vă rog să nu-mi trimiteți întrebări despre acest pachet, nu vă pot ajuta. Nu am niciun server care rulează knfsd. Dacă găsiți o eroare sau o omisiune în documentație, vă rugăm să-mi scrieți, voi corecta acest document și îl voi elibera din nou.

Mai citești? O.K. H.J.Lu trimite mesaje despre noile versiuni ale pachetului său către lista de corespondență linux-kernel. Alte mesaje legate de NFS în versiunea de kernel 2.2 sunt de asemenea trimise acolo. Citeste-le.

Există un lucru interesant de spus despre pachetul knfsd. Face reclamă că folosește NFS versiunea 3. Cu toate acestea, nu acceptă această versiune. Există o opțiune pe care o puteți folosi pentru a împiedica un pachet să facă publicitate NFS3, sau pe clienți trebuie să specificați opțiunea „vers=2” printre alte opțiuni de montare.

Client

Clientul este foarte simplu. Pentru a obține o blocare adecvată, trebuie să aveți statd (din pachetul knfsd) compilat, instalat și pornit din scripturile de boot. Fă-o. statd are nevoie de directorul /var/lib/nfs pentru a funcționa, altfel se va închide fără mesaje de eroare, așa că trebuie să creați directorul înainte de a rula programul.

Odată ce statd rulează, puteți utiliza programul testlk (în directorul instrumente/locktest) pentru a testa că blocarea fișierelor funcționează pe sistemele de fișiere montate NFS. Ar trebui să funcționeze bine. Dacă programul spune Nu există blocaje disponibile, atunci statd nu rulează.

De fapt, puteți evita complet blocările (rețineți că nu vă recomand să faceți acest lucru) utilizând opțiunea „nolock” din lista de opțiuni de montare.

Din câte știu eu, asta este tot ceea ce este necesar pentru munca clienților.

Dacă aveți un server Sparc sau Alpha NFS, veți descoperi că clientul nfs din Linux 2.2 este complet defect. Viteza de transfer către și de la server este atât de slabă încât este greu de imaginat. Acest lucru este chiar mai rău decât sub Linux 2.0. Mult mai rau. Dar există o soluție pentru această problemă. Seria de nuclee 2.2 a lui Alan Cox (care sunt mai experimentale decât nucleele 2.2 normale furnizate de Linus) include un patch care permite Linux 2.2 să îmbunătățească performanța atunci când rulează serverele Alpha și Sparc. Dacă doriți să utilizați kernel-uri patch-uri de Alan Cox, atunci ar trebui să citiți lista de corespondență linux-kernel și ar trebui să aflați unde puteți găsi patch-urile necesare. Serverul principal pentru acest patch este http://www.uio.no/~trondmy/src/, în cazul în care doriți să îl încercați pe un nucleu normal din seria 2.2. Cel mai probabil, acest patch nu va fi inclus în Linux 2.4, deoarece necesită prea multe modificări pentru a fi făcute în timpul ciclului de dezvoltare actual. Fiți atenți la Linux 2.5.

trondmy are, de asemenea, patch-uri pentru ca Linux să folosească NFS versiunea 3, ele vă vor permite, de asemenea, să utilizați tcp ca transport în loc de UDP. NFSv3 este foarte bun pentru rețelele cu multe hopuri, precum și pentru rețelele în care pierderea de pachete este diferită de zero sau în care latența este foarte mare.

Ar trebui să citiți lista de corespondență Linux-kernel dacă veți folosi aceste corecții, deoarece primesc erori urâte din când în când. Erori care vă corup fișierele. Așa că vă rog să aveți grijă.

Server

Daemonul serverului nfs din Linux 2.2 și mai târziu se numește „knfsd”. Este greu de instalat. Îl puteți personaliza singur sau puteți instala ceea ce vă oferă SuSE, Red Hat și alții ca pachete de nucleu din seria 2.2. Îmi pare rău. Deși puteți utiliza în continuare vechiul nfsd pe Linux 2.2. Este lent, dar ușor de instalat.

server NFS dischetă

Această secțiune a fost scrisă de Ron Peters, [email protected] Acesta explică cum să configurați un server NFS atunci când porniți de pe dischetă. Acesta a fost conceput inițial pentru a oferi acces NFS la un cdrom pe o altă mașină non-Linux/UNIX pentru a instala Linux pe o mașină care nu are un cdrom.

Network File System NFS, sau Network File System, este un protocol popular de sistem de fișiere de rețea care permite utilizatorilor să monteze directoare de rețea la distanță pe mașina lor și să transfere fișiere între servere. Puteți utiliza spațiul pe disc pe o altă mașină pentru fișierele dvs. și puteți lucra cu fișiere aflate pe alte servere. Practic, este o alternativă acces public Windows pentru Linux, spre deosebire de Samba, este implementat la nivel de kernel și este mai stabil.

Acest articol va acoperi instalarea nfs pe Ubuntu 16.04. Vom analiza instalarea tuturor componentelor necesare, configurarea unui folder partajat, precum și conectarea folderelor de rețea.

Un pic de teorie

După cum am menționat deja, NFS este un sistem de fișiere de rețea. Pentru a funcționa, aveți nevoie de un server care va găzdui folderul partajat și clienți care pot monta folderul de rețea ca o unitate obișnuită din sistem. Spre deosebire de alte protocoale, NFS oferă acces transparent la fișierele de la distanță. Programele vor vedea fișierele ca într-un sistem de fișiere obișnuit și vor lucra cu ele ca fișiere locale, nfs returnează doar partea solicitată a fișierului, în loc de întregul fișier, astfel încât acest sistem de fișiere va funcționa bine pe sisteme cu internet rapid sau în retea locala.

Instalarea componentelor NFS

Înainte de a putea lucra cu NFS, va trebui să instalăm câteva programe. Pe mașina care va fi server, trebuie să instalați pachetul nfs-kernel-server, care va deschide bilele nfs în ubuntu 16.04. Pentru a face acest lucru, rulați:

sudo apt install nfs-kernel-server

Acum să verificăm dacă serverul este instalat corect. Serviciul NFS ascultă conexiunile atât pentru TCP, cât și pentru UDP pe portul 2049. Puteți vedea dacă aceste porturi sunt într-adevăr utilizate în acest moment cu comanda:

rpcinfo -p | grep nfs


De asemenea, este important să verificați dacă NFS este acceptat la nivel de kernel:

cat /proc/sisteme de fișiere | grep nfs


Vedem că funcționează, dar dacă nu, trebuie să încărcați manual modulul kernel nfs:

Să adăugăm și nfs la încărcarea automată:

sudo systemctl enable nfs

Pe computerul client, trebuie să instalați pachetul nfs-common pentru a putea lucra cu acest sistem de fișiere. Nu trebuie să instalați componentele serverului, doar acest pachet va fi suficient:

sudo apt install nfs-common

Configurarea unui server NFS în Ubuntu

Putem deschide accesul NFS la orice folder, dar haideți să creăm unul nou în acest scop:

folder_address client (opțiuni)

Adresa folderului este folderul pe care doriți să îl faceți disponibil în rețea. Client - adresa IP sau adresa de rețea din care poate fi accesat acest folder. Dar opțiunile sunt puțin mai complicate. Să luăm în considerare câteva dintre ele:

  • rw- permite citirea și scrierea în acest folder
  • ro- permite numai citire
  • sincronizare- răspunde la următoarele solicitări numai atunci când datele sunt salvate pe disc (implicit)
  • asincron- nu blocați conexiunile în timp ce datele sunt scrise pe disc
  • sigur- utilizați numai porturi sub 1024 pentru conectare
  • nesigur- utilizați orice porturi
  • ascunde- nu ascundeți subdirectoare când deschideți accesul la mai multe directoare
  • rădăcină_dovleac- înlocuiți solicitările de la root cu cele anonime
  • all_squash- faceți toate cererile anonime
  • anonimși anonim- Specifică uid-ul și gid-ul pentru utilizatorul anonim.

De exemplu, pentru folderul nostru, această linie ar putea arăta astfel:

/var/nfs 127.0.0.1(rw,sync,no_subtree_check)

Când totul a fost configurat, rămâne să actualizați tabelul de export NFS:

sudo exportfs -a

Asta este, deschiderea acțiunilor nfs în ubuntu 16.04 este completă. Acum să încercăm să configuram clientul și să încercăm să-l montem.

conexiune NFS

Nu ne vom opri asupra acestei probleme în detaliu în articolul de astăzi. Acesta este un subiect destul de amplu care merită un articol separat. Dar voi spune câteva cuvinte.

Pentru a monta un folder de rețea, nu aveți nevoie de niciun client ubuntu nfs, trebuie doar să utilizați comanda mount:

sudo mount 127.0.0.1:/var/nfs/ /mnt/

Acum puteți încerca să creați un fișier în directorul atașat:

Ne vom uita, de asemenea, la sistemele de fișiere montate cu df:

127.0.0.1:/var/nfs 30G 6.7G 22G 24% /mnt

Pentru a dezactiva acest sistem de fișiere, este suficient să utilizați umountul standard:

sudo umount /mnt/

concluzii

În acest articol, a fost luată în considerare configurarea nfs ubuntu 16.04, după cum puteți vedea, totul se face foarte simplu și transparent. Montarea partajărilor NFS se face în câteva clicuri folosind comenzi standard, iar deschiderea partajărilor NFS în ubuntu 16.04 nu este mult mai dificilă decât conectarea. Dacă aveți întrebări, scrieți în comentarii!

Direcționez instrucțiuni pentru instalarea și configurarea NFS (Network File System). NFS este un sistem de fișiere de rețea care vă permite să accesați fișiere și directoare de pe un computer (server) la distanță ca și cum acele fișiere și directoare ar fi locale. Principalul avantaj al unui astfel de sistem este că stațiile de lucru individuale pot folosi mai puțin spațiul pe disc, deoarece datele partajate sunt stocate pe o mașină separată (magazin de date) și sunt disponibile pentru alte mașini din rețea. NFS este o aplicație client-server în care rolul de stocare este atribuit serverului. Fiecare membru al rețelei este un client NFS care montează unitatea de rețea a serverului în sistemul său de fișiere.

Să luăm Ubuntu 12.04 ca server.
Vom folosi și testa Centos și Winows 7 ca clienți.

Server principal: 192.168.2.213 (Ubuntu)

Clienți: 192.168.2.72 (Centos), 192.168.2.180 (Windows)

Ajustarea serverului

Mai întâi trebuie să configurați serverul. Deoarece vom folosi Ubuntu ca server, trebuie să instalăm pachetul corespunzător

[email protected]:~# apt-get install nfs-kernel-server

După instalarea pachetului necesar, am creat două fișiere de configurare. Din jurnalul de instalare:

… Se creează fișierul de configurare /etc/idmapd.conf cu noua versiune. Se creează fișierul de configurare /etc/default/nfs-common cu noua versiune...

Primul fișier descrie utilizatorul (creat la instalarea pachetului) și grupul, pentru a participa la mapping-e (identificarea utilizatorului).

[email protected]:~# cat /etc/idmapd.conf Verbosity = 0 Pipefs-Directory = /run/rpc_pipefs # setează-ți propriul domeniu aici, dacă id-ul diferă de FQDN minus hostname # Domain = localdomain Nimeni-Utilizator = nimeni Nimeni-Group = niciun grup

După cum știm, în Linux fiecare fișier aparține unui anumit utilizator care are propriul său (UID, GID), dar în sistemele Windows schema este ușor diferită. Și în acest sens, a fost inventat mecanismul de mapare, care face ca traducerea diferiților utilizatori din diferite sisteme de operare într-o formă să fie ușor de înțeles pentru sistemul de fișiere Linux.
Al doilea fișier este necesar pentru a configura autentificarea Kerberos și a configura un port non-standard pe care demonul va asculta. Încă nu avem nevoie de el. Configurația Kerberos va fi discutată în articolul următor.

[email protected]:~# cat /etc/default/nfs-common # Dacă nu setați valori pentru opțiunile NEED_, acestea vor fi încercate # autodetectate; acest lucru ar trebui să fie suficient pentru majoritatea oamenilor. Alternativele valide # pentru opțiunile NEED_ sunt „da” și „nu”. # Doriți să porniți demonul statd? Nu este necesar pentru NFSv4. NEED_STATD= # Opțiuni pentru rpc.statd. # Ar trebui rpc.statd să asculte pe un anumit port? Acest lucru este util mai ales # când aveți un firewall bazat pe porturi. Pentru a utiliza un port fix, setați această # această variabilă la un argument statd precum: „--port 4000 --outgoing-port 4001”. # Pentru mai multe informații, consultați rpc.statd(8) sau http://wiki.debian.org/SecuringNFS STATDOPTS= # Doriți să porniți demonul gssd? Este necesar pentru monturile Kerberos. NEED_GSSD=

Acum să continuăm cu configurarea.
Toate directoarele pentru partajare trebuie să fie înregistrate în fișierul /etc/exports. Pentru început, să creăm 2 foldere în directorul principal și să aruncăm fișierele în ele. Arborele directoarelor și fișierelor pentru export:

[email protected]:~# arbore /home/alex/ /home/alex/

Acum trebuie să atribuiți un utilizator și un grup pentru aceste directoare (le luăm din fișierul /etc/idmapd.conf).

[email protected]:~# chown -R nimeni:nogroup nfs_dir1/ [email protected]:~# chown -R nimeni:nogroup nfs_dir2/

Mai întâi, să exportăm directorul nfs_dir1 pentru un anumit IP. Editarea fișierului /etc/exprots.

[email protected]:~# vim /etc/exports # Pentru o anumită gazdă (Windows) /home/alex/nfs_dir1 192.168.2.180(rw,sync,all_squash,no_subtree_check,insecure) # Pentru orice gazdă de pe subrețea /home/alex/nfs_dir2 192. .2.0/ 24(rw,no_root_squash,sync,no_subtree_check)

Aici puteți vedea setul minim de opțiuni pentru funcționarea corectă a stocării cu sistemul de operare Windows.

  • /home/alex/nfs_dir1– calea către folderul pentru care se distribuie accesul;
  • 192.168.2.180 – Adresa IP la care este distribuit accesul la folder (puteți specifica întreaga rețea, apoi intrarea va arăta ca 192.168.2.0/24)
  • (rw,sync,all_squash,no_subtree_check)- un set de opțiuni.

Opțiuni populare:

  • rw–read/write (poate lua valoarea ro-read-only);
  • no_root_squash- Mod implicit utilizator root pe computerul client nu va avea acces la directorul partajat al serverului. Cu această opțiune, eliminăm această limitare. Din motive de securitate, este mai bine să nu faci asta;
  • sincronizare- mod de acces sincron (poate lua valoarea opusă - asincron);
  • fără acces– Interzice accesul la directorul specificat. Poate fi util dacă ați setat anterior accesul pentru toți utilizatorii rețelei la un anumit director, iar acum doriți să restricționați accesul într-un subdirector doar la unii utilizatori.
  • all_squash- implică faptul că toate conexiunile vor fi făcute de la un utilizator anonim (necesar pentru un client Windows)
  • anonuid= 1000 - leagă un utilizator anonim de un utilizator „local”;
  • anongid= 1000 - leagă utilizatorul anonim de grupul de utilizator „local”.
  • no_subtree_check(subtree_check)– dacă se exportă un subdirector al sistemului de fișiere, dar nu întregul sistem de fișiere, serverul verifică dacă fișierul solicitat se află în subdirectorul exportat. Dezactivarea verificării reduce securitatea, dar crește viteza de transfer al datelor.
  • De obicei, Linux (și alte sisteme de operare asemănătoare Unix) rezervă porturile TCP și UDP de la 1-1023 (așa-numitele porturi securizate) pentru a fi utilizate de către procesele utilizatorului root. Pentru a se asigura că root a fost cel care a inițiat conexiunea NFS la distanță, serverul NFS solicită de obicei clienților la distanță să utilizeze porturi securizate. Această convenție, însă, nu este respectată de unele sisteme de operare (ex. Windows). În astfel de cazuri, opțiunea nesigur permite clientului NFS să utilizeze orice port TCP/UDP. De obicei, este necesar atunci când deserviți clienții Windows.

Toate opțiunile și sintaxa disponibile pentru înregistrarea gazdelor, a grupurilor de gazde etc. poate fi citit in manual

[email protected]:~# exportfs -a

Acum verificăm ce am exportat.

[email protected]:~# exportfs -v /home/alex/nfs_dir1 192.168.2.180(rw,wdelay,all_squash,no_subtree_check,nesecure) /home/alex/nfs_dir2 192.168.2.0/24(rw,wdelay,wdelay)subtree_check,no_rot_check,nesigur

Serverul este configurat.

Stabilirea clienților

Configurare client Windows

Dacă nu ar exista mesaje de eroare. Puteți începe montarea pe partea clientului.
Mai întâi, trebuie să adăugați serviciul (serviciu client) NFS. Pentru a face acest lucru, accesați Start —> Panou de control —> Programe și caracteristiciși faceți clic pe elementul de meniu din stânga Activați sau dezactivați funcțiile Windows. În fereastra care apare, selectați Client pentru NFSși faceți clic O.K(Fig. 1).



Poza 1

Apoi, trebuie să montați unitatea. Pentru aceasta puteți folosi Linie de comanda sau doar faceți clic Click dreapta faceți clic pe My Computer și selectați Map Network Drive. Și introduceți linia \\192.168.2.213\home\alex\nfs_dir1. Acesta este IP-ul serverului și calea către folder (Fig. 2).



Figura 2

Dacă totul este în regulă, vom vedea discul (Fig. 3).



Figura 3

Același lucru se poate face folosind linia de comandă (Fig. 4).



Figura 4

Posibile greșeli:

Nu veți putea mapa o unitate de rețea NFS la sistemul de operare Windows (Figura 5) dacă
1. Clientul NFS nu este instalat
2. Firewall activat (neconfigurat).
3. Nu acces la retea la server
4. Au fost introduse opțiuni de montare incorecte
5. Export neconfigurat (setări neaplicate) pe server.
6. Adăugați opțiunea nesigură în setările de export



Figura 5 - Eroare la conectarea unei unități NFS de rețea

Nu veți putea adăuga un fișier la un sistem de fișiere montat (Figura 6) dacă:
1. Drepturile asupra folderului nu sunt setate pe server (nobody:nogroup)
2. Opțiunea all_squash nu este setată în setările de export
3. Opțiunea rw nu este setată în setările de export



Figura 6 - Eroare la adăugarea unui fișier pe un disc NFS

Configurarea clientului Centos

Configurarea sistemelor Linux este destul de simplă și nedureroasă. Trebuie doar să instalați pachetele necesare și să montați discul. Centos are nevoie de următoarele pachete

# yum install nfs-utils nfs-utils-lib

# mkdir -p /mnt/nfs # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/nfs # mount /dev/mapper/vg_slave-lv_root on / type ext4 (rw) proc on /proc type proc (rw) sysfs pe /sys tip sysfs (rw) devpts pe /dev/pts tip devpts (rw,gid=5,mode=620) tmpfs pe /dev/shm tip tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0" ) /dev/sda1 pe /boot tip ext4 (rw) niciunul pe /proc/sys/fs/binfmt_misc tip binfmt_misc (rw) sunrpc pe /var/lib/nfs/rpc_pipefs tip rpc_pipefs (rw) 192.218./16. alex/nfs_dir1 pe /mnt/nfs tip nfs (rw,vers=4,addr=192.168.2.213,clientaddr=192.168.2.72)

În acest caz, putem adăuga orice fișier și director în folderul montat nfs_dir1 în numele oricărui utilizator de sistem ( all_squash). Dar dacă montem al doilea folder nfs_dir2, atunci DOAR root poate scrie în el, deoarece există o opțiune no_root_squash. Verificăm.

# mkdir /mnt/dir1 # mkdir /mnt/dir2 # mount 192.168.2.213:/home/alex/nfs_dir1 /mnt/dir1 # mount 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 sau # mount -t -o rw,hard,intr,bg 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 # echo "Hello" > /mnt/dir1/file1 # echo "Hello" > /mnt/dir2/file1 # su alex $ echo "Bună ziua" > /mnt/dir1/file1 $ echo "Bună ziua" > /mnt/dir2/file1 bash: /mnt/dir2/file1: Permisiune refuzată

Posibile steaguri de montare.

Steag Descriere
rw Montarea unui sistem de fișiere de citire/scriere (trebuie să fie exportat de server în modul de citire/scriere)
al Montarea unui sistem de fișiere doar pentru citire
bg Dacă nu este posibil să montați sistemul de fișiere (serverul nu răspunde), ar trebui să schimbați operația la modul de fundalși continuați să procesați alte solicitări de montare
greu Dacă serverul se defectează, operațiunile care încearcă să îl acceseze sunt blocate până când serverul revine
moale Dacă serverul este oprit, operațiunile care încearcă să-l acceseze eșuează cu un mesaj de eroare. Acest flag este util de setat pentru a preveni procesele de suspendare în cazul instalării nereușite a sistemelor de fișiere nu foarte importante.
intr Vă permite să întrerupeți operațiunile blocate de la tastatură (vor fi emise mesaje de eroare)
nointr Nu vă permite să întrerupeți operațiunile blocate de la tastatură
retrans=n Specifică de câte ori trebuie repetată cererea înainte ca un mesaj de eroare să fie returnat (pentru sistemele de fișiere montate cu indicatorul soft)
timeo=n Specifică intervalul de expirare pentru solicitări (în zecimi de secundă)
dimensiune=n Setează dimensiunea tamponului de citire la n octeți
wsize=fl Setează dimensiunea tamponului de scriere la n octeți
sec=mod Setează modul de securitate
vers=n Setează versiunea protocolului NFS
proto = protocol Selectează un protocol de transport; ar trebui să fie protocolul tcp pentru NVS versiunea 4

De asemenea, puteți verifica din consolă dacă serverul a exportat corect sistemul de fișiere.

[email protected]~# showmount -e 192.168.2.213 Exportați lista pentru 192.168.2.213: /home/alex/nfs_dir2 192.168.2.0/24 /home/alex/nfs_dir1 192.168.2.180

Adăugați suport la încărcarea automată

# cat /etc/fstab ... 192.168.2.213:/home/alex/nfs_dir2 /mnt/dir2 nfs4 rw,bg,intr,hard,nodev,nosuid 0 0

[email protected]~# mount -a -t nfs4

Posibile greșeli.

[email protected]~# mount -a -t nfs4 mount.nfs4: punctul de montare /mnt/dir2 nu există [email protected]~# mount -a -t nfs4 mount.nfs4: partajarea la distanță nu este în format „gazdă:dir”

În primul caz, trebuie să creați un folder. In secunda - erori de sintaxăîn fstab.
Dacă întâmpinați erori la montarea partițiilor NFS, parcurgeți lista Posibile greșeli din secțiunea anterioară.
De asemenea, puteți utiliza autofs pentru a monta partiții NFS. Ce se va discuta în.

Dacă aveți mai multe computere acasă (sau la serviciu), atunci dorința firească ar fi să le combinați într-o rețea pentru a utiliza resursele partajate pe computere. Ubuntu vă permite să faceți acest lucru căi diferite- SMB (Server Message Block) folosind Samba (voi scrie despre această metodă data viitoare) și folosind NFS (sistem de fișiere de rețea). Dacă aveți computere în rețea care rulează diferite sisteme de operare (Linux, Windows), atunci este mai convenabil să utilizați Samba. Dar dacă toate computerele rulează Ubuntu, atunci este logic să instalați NFS

Beneficiile NFS sunt încărcarea mai uniformă a rețelei, utilizarea redusă a CPU și afișarea resurselor partajate ca foldere obișnuite pe sistem.

Instalarea NFS pe Ubuntu constă în doi pași: Instalarea unui client NFS și a unui server NFS. Pentru a accesa folderele de pe alt computer, aveți nevoie de un client. Pentru a oferi acces la folderele de pe computer, aveți nevoie de un server. Deci, să trecem la setări.

Desigur, există o mulțime de informații despre nfs în rețea, dar trebuie să dai cu lopata o mulțime de site-uri în căutarea „capcanelor”, așa că am decis să-mi adun experiența în acest articol.

Instalați pachetele necesare client (nfs-common) și server (nfs-kernel-server). În terminal, rulați următoarea comandă:

sudo apt-get install nfs-kernel-server nfs-common portmap

Configurarea unui server NFS.

De exemplu, vom partaja folderele /common, /common1 și /common2 aflate în folderul de acasă /user al utilizatorului, sub numele căruia suntem conectați la computer cu adresa 192.168.0.1.

Condiții de utilizare a folderelor (de exemplu):

  • /uzual— acces de scriere/citire pentru toate computerele din rețeaua locală (din orice subrețea);
  • /comun1- acces de citire la calculatorul cu adresa 192.168.0.100, restul accesului este interzis;
  • /comune2- acces de scriere/citire la toate computerele din intervalul de adrese 192.168.0.1 - 192.168.0.255 cu excepția computerului cu adresa 192.168.0.200.

Toate informațiile de partajare a folderelor sunt stocate în fișierul /etc/exports. Executăm comanda în terminal:

sudo gedit /etc/exports

În editorul care apare, scrieți:

/home/user/common *(rw,async)

/home/user/common1 192.168.0.100(ro,async)

/home/user/common2 192.168.0.1/24(rw,sync) 192.168.0.200(noaccess)

Salvăm fișierul.

Rețineți că:

  • scrie calea completă către folderul pentru partajarea chiar de la rădăcină;
  • nu există spații între adresa computerului și opțiunile de montare!

Notă despre spații:

/home/user/common1 192.168.0.100(rw,async)

În acest caz, computerul cu adresa 192.168.0.100 cu drepturi de citire/scriere va avea acces la folderul /home/user/common1, restul nu va avea acces.

/home/user/common1 192.168.0.100 (rw,async)

În acest caz, computerul cu adresa 192.168.0.100 cu drepturi de citire va avea acces la folderul /home/user/common1, celelalte computere vor avea acces de citire/scriere!

Optiuni Disponibile:

    ro(rw)- Permite doar cereri de citire (citire/scriere).

    subtree_check (fără_subtree_check)- Dacă este exportat un subdirector al sistemului de fișiere, dar nu întregul sistem de fișiere, serverul verifică dacă fișierul solicitat se află în subdirectorul exportat. Dezactivarea verificării reduce securitatea, dar crește viteza de transfer al datelor.

    sincronizare (async) Specifică faptul că serverul ar trebui să răspundă la solicitări numai după ce modificările făcute de aceste solicitări au fost scrise pe disc. Opțiunea asincronă îi spune serverului să nu aștepte ca informațiile să fie scrise pe disc, ceea ce îmbunătățește performanța, dar reduce fiabilitatea. Pierderea informațiilor este posibilă dacă conexiunea este întreruptă sau echipamentul se defectează.

    wdelay (fără_wdelay)- instruiește serverul să întârzie execuția cererilor de scriere dacă o cerere de scriere ulterioară este în așteptare, scriind datele în blocuri mai mari. Acest lucru îmbunătățește performanța la trimiterea unor cozi mari de comenzi de scriere. no_wdelay specifică să nu întârzie execuția comenzii de scriere, ceea ce poate fi util dacă serverul primește un numar mare de comenzi care nu au legătură între ele.

    fără acces— Interzice accesul la directorul specificat. Poate fi util dacă ați setat anterior accesul pentru toți utilizatorii rețelei la un anumit director, iar acum doriți să restricționați accesul într-un subdirector doar la unii utilizatori.

Reporniți nfs-kernel-server:

sudo /etc/init.d/nfs-kernel-server restart

în viitor, la schimbarea fișierului de configurare, va fi suficient să recitiți fișierul de configurare:

sudo exportfs -a

Configurarea serverului este completă.

Configurare CLIENT

Instalare și Configurare NFS-client.

Instalare (dacă nu am instalat serverul, altfel clientul este deja instalat):

sudo apt-get install portmap nfs-common

Montare:

Pentru început, să creăm foldere în care vor fi montate resursele de rețea. Lăsați-le, în exemplul nostru, să fie montate în folderul principal al utilizatorului2, în care vom crea foldere de resurse partajate: /net/disk1, /net/disk2, /net/disk3. Pentru a face acest lucru, rulați următoarele comenzi în terminal:

mkdir net
cd /net
mkdir disc1
mkdir disc2
mkdir disc3

Același lucru se poate face pur și simplu în Nautilus.

Montare resursele rețelei se poate face atât automat, cât și manual.

Pentru a monta manual în terminal, executați următoarele comenzi:

sudo mount -t nfs -o rw,hard,intr 192.168.0.1:/home/user/common ~/net/disk1
sudo mount -t nfs -o ro,soft,intr 192.168.0.1:/home/user/common1 ~/net/disk2
sudo mount -t nfs -o rw,soft,intr 192.168.0.1:/home/user/common2 ~/net/disk3

Notă: Opțiune greu conectează un folder de pe client la server și, dacă serverul se destramă, computerul se poate bloca. Opțiune moale, după cum sugerează și numele, nu este atât de categoric. Puteți vedea lista completă de opțiuni tastând man nfs în terminal.

Această metodă nu este foarte convenabilă, deoarece de fiecare dată după repornire va trebui să rulați aceste comenzi. Să facem montura automată.

Pentru a monta automat, editați fișierul /etc/fstab

sudo gedit /etc/fstab

La sfarsit deschide fișierul adăugând datele noastre

192.168.0.1:/home/user/common /home/user2/net/disk1 nfs defaults 0 0
192.168.0.1:/home/user/common1 /home/user2/net/disk2 nfs defaults 0 0
192.168.0.1:/home/user/common2 /home/user2/net/disk3 nfs implicite 0 0

Salvăm fișierul.

Să montem discurile:

Acum, unitățile noastre de rețea sunt vizibile în Explorer ca simple foldere.

Pentru distribuirea fișierelor într-o rețea locală, se pot distinge următoarele tehnologii (se iau în considerare sistemele bazate pe Linux):

  • Network File System (NFS) - protocol pentru accesul în rețea la sistemele de fișiere;
  • Fișierele transferate prin protocolul Shell (FISH) - un protocol de rețea care utilizează sau RSH pentru a transfera fișiere între computere;
  • Secure SHell FileSystem (SSHFS) - un client de sistem de fișiere pentru montarea dispozitivelor de disc pe sisteme la distanță, folosit pentru a interacționa cu un sistem la distanță SFTP;
  • Samba este un pachet software care vă permite să accesați unități de rețeași imprimante pe diverse sisteme de operare prin protocolul SMB/CIFS;

În această notă, vom vorbi despre NFS.

NFS (sistem de fișiere de rețea) util atunci când trebuie să distribuiți fișiere/directoare tuturor din rețea. Transparența accesului prin NFS permite clienților să monteze un sistem de fișiere la distanță ca director local, iar sistemele de fișiere pot fi tipuri diferite. Aceasta înseamnă că orice aplicație client cu care poate funcționa fișier local, cu același succes poate funcționa cu un fișier conectat prin NFS fără nicio modificare a programului în sine.

La beneficii NFS pot fi atribuite:

  • reducerea sarcinii procesorului;
  • afișarea resurselor partajate ca directoare obișnuite în sistem;
  • Pe acest moment disponibil NFS v4.1, în care am intrat noua oportunitate pNFS permițând paralelizarea implementării partajării fișierelor. Există, de asemenea, o extensie pentru NFS 2 și 3 - WebNFS, care permit integrarea mai ușoară în browserele web și capacitatea de a lucra printr-un firewall.

    Schema de lucru NFS protocol.

    Instalarea și configurarea unui server NFS sub Linux

    Verificați dacă sistemul acceptă NFS

    Cat /proc/sisteme de fișiere | grep nfs

    Sub Arch Linux serverul și clientul sunt în același pachet

    Yaourt -S nfs-utils

    Pentru a instala serverul nfs-kernel-server) și client ( nfs-comun) sub ubuntu pachetele necesare

    sudo apt-get install nfs-kernel-server nfs-common portmap

    Mai departe, în notă, IP-ul va fi folosit pentru server 192.168.1.100 . Pentru ca serverul să aibă întotdeauna același IP alocat, este necesar să specificați distribuția unui anumit IP la o anumită adresă MAC în serverul DHCP (cel mai adesea un router). Sau ridicați-vă serverul DNS local. De exemplu sau .

    Puteți afla adresa MAC folosind ifconfig (câmp eterîn Arch Linux).

    NFSv4 presupune că există un director rădăcină, în interiorul căruia sunt deja localizate fișierele pentru distribuire. De exemplu, /srv/nfs- radacina, /srv/nfs/audio- director pentru distribuirea muzicii. Dacă nu urmați această nouă direcție în versiune 4 , atunci puteți primi o eroare la conectarea de către client:

    Mount.nfs: acces refuzat de server în timpul instalării 192.168.1.100:/home/proft/torrents

    Dacă totuși doriți să utilizați abordarea no-root-directory pe server pentru NFS, apoi la montare de către client, trebuie să specificați în mod explicit versiunea 3

    # pentru comanda de montare mount -o "vers=3" 192.168.1.100:/home/proft/torrents /home/proft/nfs/torrents # pentru fstab 192.168.1.100:/home/proft/torrents /home/proft/nfs/ torrents nfs soft,nfsvers=3 0 0

    voi folosi NFSv4 cu directorul rădăcină în /srv/nfs/și montarea directoarelor imbricate cu mount --bind .

    Să presupunem că vrem

    • directorul de distribuție ~/torrenți Cu rw acces pentru toateîn cadrul rețelei locale;
    • directorul de distribuție ~/fotografii Cu ro acces pentru gazdă cu IP 192.168.1.101 ;

    Mai întâi, să creăm directorul rădăcină și subdirectoarele necesare.

    Sudo mkdir -p /srv/nfs/(torrents,photos)

    Montați directoarele existente torrente, fotografiiîn /srv/nfs.

    # sudo vim /etc/fstab /home/proft/torrents /srv/nfs/torrents none bind 0 0 /home/proft/photos /srv/nfs/photos none bind 0 0

    Editați | × /etc/exports, care descrie toate directoarele partajate

    # sudo vim /etc/exports # format de fișier: directorul permit-hosts(opțiuni) /srv/nfs/torrents 192.168.1.1/24(rw,async) /srv/nfs/photos 192.168.1.101(ro,async)

    Observați că nu există spațiu între gazde permiseși (Opțiuni). Prezența unui spațiu introduce o interpretare diferită a regulilor.

    Optiuni Disponibile:

    • ro (rw) - permite accesul numai în citire (citire/scriere);
    • subtree_check (no_subtree_check) - în unele cazuri, trebuie să exportați nu întreaga secțiune, ci doar o parte a acesteia. În același timp, serverul NFS ar trebui să efectueze verificări suplimentare asupra solicitărilor clienților pentru a se asigura că aceștia încearcă doar să acceseze fișierele din subdirectoarele corespunzătoare. Un astfel de control subarboresc ( verificări subarbore) încetinește oarecum interacțiunea cu clienții, dar dacă o refuzați, este posibil să aveți probleme cu securitatea sistemului. Puteți anula controlul unui subarboresc folosind opțiunea no_subtree_check. Opțiune subtree_check, care include un astfel de control, se presupune implicit. Controlul subarboresc poate fi omis dacă directorul exportat este același cu o partiție de disc;
    • sync (async) Specifică faptul că serverul ar trebui să răspundă la solicitări numai după ce modificările făcute de acele cereri au fost scrise pe disc. Opțiune asincron instruiește serverul să nu aștepte ca informațiile să fie scrise pe disc, ceea ce îmbunătățește performanța, dar reduce fiabilitatea, deoarece în caz de întrerupere a conexiunii sau defecțiune a echipamentului, datele se pot pierde;
    • noaccess - Interzice accesul la directorul specificat. Poate fi util dacă anterior ați setat accesul pentru toți utilizatorii rețelei la un anumit director, iar acum doriți să restricționați accesul într-un subdirector doar la unii utilizatori;
    • no_root_squash - utilizator implicit rădăcină pe computerul client nu va avea aceleași drepturi la directorul de pe server. Această opțiune elimină această limitare;
    • ascunde- NFS nu afișează automat resurse non-locale (de exemplu, montate cu mount --bind), această opțiune permite afișarea acestor resurse;
    • nesigur - folosirea porturilor neprivilegiate (> 1024);

    Pornirea serverului NFS

    # sub archlinux sudo systemctl start rpc-idmapd.service rpc-mountd.service # sub ubuntu sudo /etc/init.d/nfs-kernel-server start

    În viitor, la schimbarea fișierului de configurare, este suficient să-l recitiți cu comanda:

    sudo exportfs -rav

    comanda rpcinfo -p | grep nfs vă permite să verificați dacă serverul a pornit cu succes.

    Client pentru Linux

    Instalare

    # sub archlinux yaourt -S nfs-utils # sub ubuntu sudo apt-get install portmap nfs-common

    Creați directoare pentru montarea resurselor de rețea torrenteși fotografii

    Mkdir -p ~/nfs/(torrenți, fotografii)

    Pentru a monta manual, rulați

    sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/torrents /home/proft/nfs/torrents sudo mount -t nfs -o rw,soft 192.168.1.100:/srv/nfs/photos /proft/nfs/photos

    Opțiune moale specifică anularea în tăcere a încercărilor de a conecta partajarea după o anumită perioadă de timp (ora este setată de opțiunea retrans). Citiți mai multe în man nfs.

    Această metodă nu este foarte convenabilă, deoarece de fiecare dată după repornire va trebui să rulați aceste comenzi. Să facem montura automată.

    Pentru a monta automat, editați fișierul /etc/fstab

    # sudo vim /etc/fstab 192.168.1.100:/srv/nfs/torrents /home/proft/net/torrents nfs rw,soft 0 0 192.168.1.100:/srv/nfs/photos /home/proft/net/photos ro,soft 0 0

    Dar această metodă are și dezavantajele sale, de exemplu, dacă serverul nu este disponibil, atunci încărcarea clientului se poate îngheța din cauza încercărilor de conectare la serverul NFS. Pentru a remedia acest lucru, consultați mai jos despre AutoFS.

    AutoFS - conectarea automată a resurselor de rețea

    Este posibil să montați o resursă la distanță folosind AutoFS la primul acces și demontează automat când nu există activitate.

    AutoFS folosește șabloane situate în /etc/autofs. Modelul principal este numit auto.master, poate indica unul sau mai multe alte șabloane pentru anumite tipuri de media.

    Instalare

    # sub archlinux yaourt -S autofs # sub ubuntu sudo apt-get install autofs

    Există mai multe moduri de a specifica metodele de montare automată. Eu il folosesc pe acesta: /home/proft/nfs este creat automat un director cu numele serverului NFS, în care sunt create automat directoarele disponibile pe server.

    # sudo vim /etc/autofs/auto.master /home/proft/nfs /etc/autofs/auto.nfs --timeout=60

    Parametru suplimentar pauză setează numărul de secunde după care dispozitivul va fi demontat. Parametru fantomă specifică că resursele configurate vor fi întotdeauna afișate, nu numai atunci când sunt disponibile (această opțiune este activată implicit în AutoFS 5)

    Vom descrie în /etc/autofs/auto.nfs Server NFS și director rădăcină.

    # sudo vim /etc/autofs/auto.nfs nfsserver 192.168.1.100:/srv/nfs

    Acum la primul apel /home/proft/nfs/torrents partajarea NFS va fi montată automat.

    Reporniți serviciul autofs:

    # sub archlinux sudo systemctl restart autofs # sub ubuntu sudo /etc/init.d/autofs restart

    De asemenea, puteți specifica timpul de așteptare pentru disponibilitatea unei resurse NFS. Pentru a face acest lucru, trebuie să modificați valorile MOUNT_WAIT.

    # sub archlinux # sudo vim /etc/conf.d/autofs MOUNT_WAIT=5 # sub ubuntu sudo /etc/default/autofs MOUNT_WAIT=5

    Forțarea utilizării NFS v3

    In unele cazuri NFSv4 poate rula încet. Pentru a remedia acest lucru, puteți forța utilizarea a treia versiune.

    #sduo vim /etc/nfsmount.conf Defaultvers=3 Nfsvers=3

    Pe client, dacă este folosit AutoFS trebuie de asemenea specificate NFSv3

    # sudo vim /etc/conf.d/autofs MOUNT_NFS_DEFAULT_PROTOCOL=3

    După aceea, trebuie să reporniți serverul NFSși AutoFS.

    Monitorizarea resurselor NFS

    nfsstat -s (pe server) - Afișează statistici utile, de exemplu, dacă apeluri rele mai mare de 0 înseamnă probleme cu transferul fișierelor.

    showmount -e (pe server) Listează resursele partajate.

    showmount -e 192.168.1.100 (client) Listează resursele partajate pe serverul 192.168.1.100.

    nfsstat -c (client) Imprimă statistici utile.

    nfsstat -m (client) Afișează informații despre partajările NFS montate.

    Client Windows

    Și de aici începe aventura :). Există un client NFS pentru Windows 7, dar nu este instalat implicit.

    Pentru a activa clientul NFS, accesați Panou de control > Programe si caracteristici > Instalarea și ștergerea programelor > Activați sau dezactivați funcțiile Windows >

    Lansăm NekoDrive, introduceți IP-ul serverului, montați resursa.

    Lectură suplimentară