close

Sistem de fișiere de rețea

Mergi la navigare Mergi la căutare
Sistemul de fișiere în rețea
(NFS)
Familie Protocoale de sistem de fișiere de rețea
Funcţie Acces la sistemul de fișiere prin rețea.
Ultima versiune NFSv4
porturi 2049
Locație în stiva de protocoale *
App NFS
Prezentare XDR
Sesiune ONC RPC
Transport TCP sau UDP
Net IP
* conform modelului OSI
standardele
RFC 1094 (versiunea 2)
RFC 1813 (versiunea 3)
RFC 3530 (versiunea 4)

Network File System , sauNFS , este un protocol de nivel de aplicație , conform modelului OSI . Este utilizat pentru sistemele de fișiere distribuite într-un mediu de rețea de computere locale . Permite diferitelor sisteme conectate la aceeași rețea să acceseze fișierele de la distanță ca și cum ar fi locale. A fost dezvoltat inițial în 1984 de Sun Microsystems , cu scopul de a fi independent de mașină, sistem de operare și protocol de transport, posibil prin implementarea pe lângă protocoalele XDR (prezentare) și ONC RPC (sesiune). [ 1 ] Protocolul NFS este inclus implicit în sistemele de operare UNIX și în majoritatea distribuțiilor Linux .

  • Sistemul NFS este împărțit în cel puțin două părți principale: un server și unul sau mai mulți clienți . Clienții accesează de la distanță datele stocate pe server.
  • Stațiile de lucru locale utilizează mai puțin spațiu pe disc, deoarece datele sunt centralizate într-un singur loc, dar pot fi accesate și modificate de mai mulți utilizatori, astfel încât informațiile nu trebuie să fie replicate.
  • Utilizatorii nu trebuie să aibă un director „acasă” pe fiecare dintre mașinile din organizație. Directoarele de acasă pot fi create pe serverul NFS, astfel încât să poată fi accesate ulterior de pe orice mașină prin infrastructura de rețea.
  • Dispozitivele de stocare, cum ar fi unitățile de dischetă, CD-ROM-urile și unitățile ZIP pot fi, de asemenea, partajate în rețea . Acest lucru poate reduce investiția în astfel de dispozitive și poate îmbunătăți utilizarea hardware -ului existent în organizație.

Toate operațiunile asupra fișierelor sunt sincrone . Aceasta înseamnă că operația revine numai atunci când serverul a finalizat toate lucrările asociate pentru operația respectivă. În cazul unei cereri de scriere, serverul va scrie fizic datele pe disc și, dacă este necesar, va actualiza structura directorului, înainte de a returna un răspuns clientului. Acest lucru garantează integritatea fișierelor.

Arhitectură

Să presupunem că un client de sistem de fișiere de rețea (NFS) încearcă să monteze un director preluat de pe serverul NFS într-un director local. Pentru a face acest lucru, veți avea nevoie de următoarea comandă:

$sudo mount -t nfs remote_machine:/home /local_dir

În această comandă specificăm tipul de sistem de fișiere care trebuie montat cu -t, mașina de la distanță și directorul în care urmează să-l montem.

Această comandă se referă la conectarea la demonul rpc mountd care rulează pe mașina de la distanță prin RPC. Serverul verifică permisiunile clientului pe directorul /home unde urmează să fie montat și dacă le are, montarea se face ca și cum ar fi orice alt dispozitiv fizic. Odată ce montarea este finalizată, când accesați directorul client, veți accesa directorul serverului la distanță.

Când directorul /local_dir are deja montat directorul /home al mașinii la distanță, singurele fișiere de protecție din acel director sunt permisiunile.

La accesarea fișierelor din directorul NFS, pe server va fi generat un apel RPC către demonul rpc nfsd , în care sunt incluși parametrii corespunzători UID-ului și GID-ului utilizatorului și descriptorul fișierului, cu care se vor verifica permisiunile.

Implementare tipică

Presupunând un scenariu în stil Unix în care o mașină (clientul) trebuie să acceseze datele stocate pe o altă mașină (serverul NFS):

  • Serverul implementează procese demon NFS, care rulează implicit ca nfsd, pentru a-și face datele disponibile în mod generic clienților.
  • Administratorul serverului determină ce să facă disponibil exportând numele și parametrii directoarelor, de obicei folosind fișierul de configurare /etc/exports și comanda exportfs.
  • Managementul securității serverului asigură că poate recunoaște și aproba clienții validați.
  • Configurația rețelei serverului asigură că clienții corespunzători pot negocia cu acesta prin orice sistem de firewall.
  • Computerul client solicită acces la datele exportate, de obicei prin lansarea unei comenzi de montare. Clientul întreabă serverul (rpcbind) ce port folosește serverul NFS, clientul se conectează la serverul NFS (nfsd), nfsd trece cererea către mountd.
  • Dacă totul merge bine, utilizatorii de pe computerul client pot vizualiza și interacționa cu sistemele de fișiere montate pe server în limitele parametrilor permisi.
  • Rețineți că automatizarea procesului de montare NFS poate avea loc, poate folosind /etc/fstab și/sau facilități de montare.

Acest sistem de fișiere este folosit astfel încât într-o rețea locală diferite computere să poată accesa fișiere și să le partajeze, în acest fel, un computer poate accesa informațiile altui computer ca și cum ar fi un hard disk. NFS se concentrează pe consistență, presupunând operațiuni grele de scriere, care este puțin probabil să fie foarte frecvente.

Una dintre principalele utilizări ale protocolului NFS este de a putea avea toate fișierele centralizate pe un singur server. Acest lucru va face posibilă renunțarea la unitățile de memorie din celelalte computere și posibilitatea de a accesa de la distanță pentru a citi orice fișier sau a-l descărca.

Este foarte util, mai ales atunci când mulți utilizatori vor trebui să se autentifice pentru a modifica acele fișiere.

Avantaj

  • Mai mulți clienți pot accesa fișiere
  • Reduce necesarul de spațiu pe disc
  • Orice utilizator poate modifica și actualiza fișierele
  • Compatibilitate cu multe dispozitive

Dezavantaje

  • Securitate: utilizați numai în rețele securizate și în spatele unui firewall
  • Necesită supraîncărcare mare pentru a citi fișierele
  • Nu este ușor să blocați fișiere sau să acordați permisiuni


Client NFS

Clientul simulează funcționalitățile sistemului de fișiere UNIX, integrat direct în kernel. Este responsabil de controlul cererilor de la VFS către server. Trimiteți blocurile sau fișierele de pe server și către server. Când este posibil, memorează în cache blocurile local.

Memoria cache

Modulul client NFS memorează în cache rezultatele operațiunilor <readwritegetattlookup> și readdir. Clienții sunt responsabili pentru sondarea serverului pentru a verifica moneda datelor lor din cache.

Metoda de marcare temporală pentru menținerea cache-urilor:

Fiecare element este etichetat cu două momente diferite, unul când elementul a fost validat ultima dată și celălalt când a fost modificat ultima dată pe server. O intrare în cache este validă la momentul t dacă data t-ului la care a fost validată ultima dată este mai mică decât intervalul de reîmprospătare tolerat. Dacă intrarea nu este validă, se obține ora la care a fost modificată ultima dată pe server și dacă este egală cu cea a clientului, atunci intrarea este validă și ora clientului este actualizată, în caz contrar intrarea este invalidă.

Pentru a minimiza apelurile către getattr, atunci când o valoare este primită de la serverul unui fișier, aceasta este aplicată tuturor intrărilor relevante din acel fișier.

Chiar și cu aceasta vor exista probleme de consistență dacă avem scrieri pe doi clienți cu o diferență de timp mai mică decât intervalul de reîmprospătare tolerat. Pentru a rezolva această problemă, va trebui să folosim blocarea fișierelor transformând fișierul într-o secțiune critică, acest lucru se realizează în NFS prin protocolul Network Lock Manager (NLM) .

Server NFS

Serverul NFS face parte din nucleul Linux, în nucleele pe care Debian le furnizează este compilat ca un modul kernel. Interfața sa este definită în RFC 1813.

Este responsabil de primirea cererilor, care pot fi similare cu cele ale modelului de fișier plat sau pot simula pe cele ale sistemului UNIX.

Serverul oferă, de asemenea, servicii de montare, autentificare și control al accesului și un cache.

Memoria cache

Există două opțiuni pentru a menține și asigura coerența scrisului:

  • write-through : Datele din operațiunile de scriere sunt stocate în cache și scrise pe disc înainte de a răspunde clientului.
  • Commit : Datele din operațiunile de scriere sunt stocate numai în cache. Ele sunt scrise pe disc numai atunci când este primită o operație de commit.

Demonii esențiali ai serviciului NFS sunt următorii:

  • rpc.mountd : Daemon care se ocupă de montarea de la distanță. Acesta primește cererea de la clientul NFS și verifică dacă sistemul de fișiere este exportat și, dacă este disponibil, permite cererile de acces NFS și oferă informații despre acesta ( showmount ).
  • rpc.nfsd: demon care servește fișiere. Pot fi pornite mai multe copii ale acestui demon. Utilizează portul TCP/UDP 2049.
  • rpc.portmap : este responsabil pentru indicarea clienților unde se află serviciul real pe server. Serviciile bazate pe RPC folosesc portmap pentru a servi cererile clientului, astfel încât acest serviciu trebuie să fie disponibil mai întâi. Nu este folosit în NFSv4. Pentru a verifica dacă este activ, rulați:
    • starea $ sudo portmap
  • rpc.lockd : responsabil pentru furnizarea serviciului de blocare a fișierelor pentru a asigura consistența acestora, deoarece pot fi accesate concomitent. Se rulează atât pe server, cât și pe client.
  • rpc.statd : Acest daemon funcționează împreună cu lockd pentru a se recupera de la blocarea sistemului. Menține informații despre procesele din clienții care au blocări de fișiere ale unui anumit server. Când serverul NFS se recuperează, statd informează ceilalți clienți că serverul s-a recuperat și astfel rezolvă blocările pe care le aveau.

Securitate

Dacă dorim ca serviciul nostru NFS să fie mai sigur, ar trebui să luăm în considerare o serie de detalii, cum ar fi:

  1. Folosiți metacaracterele cât mai puțin posibil, deoarece putem oferi acces la mai multe echipe decât credem.
  2. Utilizați regulile Iptables (firewall) pentru a limita accesul la porturile utilizate de demonii de serviciu NFS.
  3. Utilizarea fișierelor /etc/hosts.allow și /etc/hosts.deny nu este obligatorie, dar este de preferat să le configurați pentru a asigura securitatea datelor.
  4. Exportați sisteme de fișiere lizibile (ro) ori de câte ori este posibil.
  5. Proprietarul fișierelor și directoarelor exportate trebuie să fie root, deoarece este posibil să mapați UID-ul root cu cel al utilizatorului nimeni.
  6. Încercați să faceți fișierele exportate neinscriptibile pentru grup ( ACL ).
  7. Versiunile 2 și 3 ale NFS nu au control de acces pentru anumiți utilizatori. În ele, atunci când un sistem de fișiere este exportat, orice utilizator de pe orice mașină la distanță conectată la serverul NFS poate accesa datele partajate. Singurul mecanism de securitate pe care îl au este să folosească accesul doar în citire și să reducă toți utilizatorii la unul comun al cărui UID și GID le specificăm.
  8. Dacă nu este utilizată opțiunea de export squash , orice utilizator root de pe computerul client poate deveni utilizator cu acces privilegiat pur și simplu rulând comanda: su - . Este întotdeauna recomandabil să aveți o opțiune de squash activată .
  9. Cea mai sigură versiune de NFS este 4.

<Kerberos>

NFS include identitatea utilizatorului implicit în cererile către server, dar doar pentru a o compara cu permisiunile de acces, nu o validează.

Cu Kerberos, autentificarea utilizatorului se realizează la momentul instalării sistemului de fișiere. Rezultatele acestor autentificări sunt stocate și utilizate pentru fiecare solicitare NFS. Acest lucru protejează împotriva majorității atacurilor.

Versiuni NFS

Versiunile NFS majore sunt NFSv2 (RFC 1094), NFSv3 (RFC 1813) și NFSv4 (RFC 3530).

Versiunea 2 NFS este cea mai utilizată și suportată de sistemele de operare, precum și cea mai veche și mai nesigură. Versiunea 3 este mai puternică decât versiunea 2, dar nu este pe deplin compatibilă cu clienții versiunii anterioare. Aceste două versiuni pot funcționa atât cu TCP, cât și cu UDP ca protocol de transport, creând conexiuni de rețea între client și server. Avantajul utilizării UDP este că traficul de rețea este minimizat, dar dacă ar scădea, clienții ar continua să trimită mesaje și ar fi saturat.

În general, versiunile NFS 2 și 3 vă permit să controlați exportul și montarea sistemelor de fișiere bazate pe mașina solicitantă, dar nu pe utilizator. Cu alte cuvinte, nu este avut în vedere controlul accesului la sistemul de fișiere de către utilizator. Doar pentru echipe. Acest lucru implică faptul că, dacă un sistem de fișiere este exportat de pe serverul NFS, acesta poate fi accesat de orice utilizator pe o mașină client NFS la distanță. Singurele mecanisme de securitate rămase în acest caz sunt permisiunile de acces (numai pentru citire) sau utilizarea doar a unui utilizator și a unui grup. În mod logic, acest lucru limitează foarte mult ideea de a împărtăși pe care o avem cu toții.

În cazul versiunii 4 a NFS aceste probleme de securitate dispar dar, în schimb, are cerințe de configurare mult mai importante și servicii suplimentare. De exemplu, în versiunea 4 utilizarea mecanismelor de autentificare a utilizatorilor este obligatorie. Pentru aceasta, și în funcție de tipul de securitate selectat, este necesară utilizarea serviciului Kerberos, a cărui misiune va fi să funcționeze ca un server de livrare a biletelor (KDC) și care trebuie să fie configurat și să funcționeze corect înainte de a configura serverul NFSv4. Această cerință oferă securitate serviciului NFS în schimbul adăugării de mai multă complexitate la configurarea și configurarea acestuia.

O altă caracteristică importantă a NFS4 este utilizarea ACL-urilor (liste de control acces) în stil Windows, care nu sunt acceptate de versiunile 2 și 3 ale NFS. Când vorbim despre ACL-uri ne referim la permisiunile sau drepturile de acces pe care fiecare utilizator le are asupra unui fișier sau director și care sunt specificate ca liste editabile de către administratorul de sistem.

Avantajele NFS

  • Acestea reduc riscul ca defecțiunea unui singur echipament să împiedice accesul la date.
  • Ele oferă locații centralizate pentru date care ar trebui sau ar trebui să fie partajate între toți utilizatorii.
  • Ele simplifică accesul la datele existente pe sisteme mai rapide.
  • Ele oferă posibilitatea de a centraliza operațiunile administrative, cum ar fi backup-uri de date ( back-up-uri ).
  • Ele oferă interoperabilitate și flexibilitate. Sistemele de fișiere din rețea pot fi accesate de obicei de pe computere care rulează Linux, Windows, Mac OS X, BeOS, BSD și multe altele. În acest fel, este ușor să utilizați hardware-ul și software-ul cel mai potrivit pentru cerințele desktop-ului și să accesați în continuare aceleași date din mediul sistemului de fișiere din rețea.

Dezavantaje NFS

  • NFSv2 și NFSv3 pot folosi UDP ca protocol de transport care, fiind o conexiune nesupravegheată, minimizează traficul de rețea, dar dacă serverul NFS s-ar defecta din orice motiv, clienții NFS ar continua să trimită cereri către server, producând efectul opus. , care este saturația rețelei.
  • Versiunile 2 și 3 ale NFS vă permit să controlați exportul și montarea sistemelor de fișiere în funcție de mașina solicitantă, dar nu de utilizator. Cu alte cuvinte, nu este avut în vedere controlul accesului la sistemul de fișiere de către utilizator. Doar pentru echipe. Acest lucru implică faptul că, dacă un sistem de fișiere este exportat de pe serverul NFS, acesta poate fi accesat de orice utilizator pe o mașină client NFS la distanță.
  • NFS suferă de unele probleme de performanță din cauza designului său „apatrid” (unele dintre aceste probleme sunt atenuate în cele mai recente versiuni de NFS). În special, deoarece clientul presupune că o operație de scriere este completă odată ce primește o confirmare de la server, serverul trebuie să se asigure că scrie fiecare bloc pe disc înainte de a răspunde, pentru a evita discrepanțe în cazul unui accident. Acest lucru introduce o întârziere semnificativă în cazul scrierilor NFS.

Operațiuni

NFS a acceptat inițial 18 proceduri pentru toate operațiunile de bază I/O. [ 1 ]​ Comenzile protocolului versiunea 2 sunt după cum urmează: [ 2 ]

  • NULL : nu face nimic, dar este folosit pentru a ping serverul și pentru a măsura timpii.
  • CREATE : creează un fișier nou.
  • CĂUTARE : caută un fișier în directorul curent și, dacă este găsit, returnează un descriptor la acel fișier plus informații despre atributele fișierului.
  • READ and WRITE : primitive de bază pentru a accesa fișierul.
  • RENUMIRE : Redenumiți un fișier.
  • REMOVE : ștergeți un fișier.
  • MKDIR și RMDIR : creați/ștergeți subdirectoare.
  • READDIR : pentru a citi lista de directoare.
  • GETATTR și SETATTR : returnează seturi de atribute de fișier.
  • LINK : Creați un fișier, care este un link către un fișier dintr-un director specificat.
  • SYMLINK și READLINK : pentru crearea și, respectiv, citirea legăturilor simbolice (într-un „șir”) către un fișier dintr-un director.
  • STATFS : Returnează informații despre sistemul de fișiere.
  • ROOT , pentru a merge la rădăcină (învechit în versiunea 2).
  • WRITECACHE : Rezervat pentru utilizare ulterioară.

În versiunea 3 a protocolului, comenzile STATFS, ROOT și WRITECACHE sunt eliminate; și s-au adăugat următoarele: [ 3 ]

  • ACCES : Pentru a verifica permisiunile de acces.
  • MKNOD : Creează un dispozitiv special.
  • READDIRPLUS : O versiune îmbunătățită a READDIR.
  • FSSTAT - Returnează informații despre sistemul de fișiere în mod dinamic.
  • FSINFO - Returnează informații despre sistemul de fișiere în formă statică.
  • PATHCONF : Preluați informații POSIX .
  • COMMIT : Trimiteți date cache pe un server către un sistem de stocare stabil.

Versiunea 4 a fost lansată în aprilie 2003 și nu este compatibilă. Suportă 41 de comenzi: NULL, COMPOUND, ACCESS, CLOSE, COMMIT, CREATE, DELEGPURGE, DELEGRETURN, GETATTR, GETFH, LINK, LOCK, LOCKT, LOCKU, LOOKUP, LOOKUPP, NVERIFY, OPEN, OPENATTR, OPEN_CONFIRMH, OPENATTR, OPEN_CONFIRMHGRADE,_PUUBTPPURG,_PUUBTP,_ PUTROOTFH, READ, READDIR, READLINK, REMOVE, REDENUMIRE, RENEW, RESTOREFH, SAVEFH, SECINFO, SETATTR, SETCLIENTID, SETCLIENTID_CONFIRM, VERIFY, WRITE, RELEASE_LOCKOWNER, ILLEGAL. [ 4 ]

Vezi și

Subiecte legate de NFS:

  • ONC RPC , apel de procedură la distanță utilizat cu NFS.
  • XDR , protocol de prezentare a datelor folosit de NFS.
  • VFS , sistem de fișiere virtual.

Alte sisteme:

Referințe

  1. ^ a b Sandberg, R. Goldberg, D. Kleiman, S. Walsh D. Lyon, B. (iunie 1985). „Proiectarea și implementarea sistemului de fișiere Sun Network . Proceedings of the Summer 1985 Usenix Conference. 
  2. RFC 1094 Protocol Specification versiunea 2. (în engleză)
  3. RFC 1813 Protocol Specification versiunea 3. (în engleză)
  4. RFC 3530 Protocol Specification versiunea 4. (în engleză)

Link- uri externe