NILFS2 — sistem de fișiere rezistent la gloanțe pentru /home

NILFS2 — sistem de fișiere rezistent la gloanțe pentru /home

După cum se știe, dacă o problemă poate apărea, aceasta se va întâmpla cu siguranță. Probabil că fiecare a avut momente în care a șters din greșeală un fișier important proaspăt sau a selectat și distrus din greșeală un text în editorul de text.

Dacă sunteți un furnizor de găzduire sau proprietar de site, probabil că v-ați confruntat cu atacuri asupra conturilor utilizatorilor sau asupra site-ului dumneavoastră. În astfel de cazuri, este important să restabiliți cronologia, să găsiți metoda de pătrundere și vulnerabilitatea folosită de atacator.

Pentru a rezolva astfel de probleme, sistemul de fișiere NILFS2 este o alegere excelentă.

Acesta este inclus în nucleul Linux începând cu versiunea 2.6.30.

Particularitatea acestui sistem de fișiere este că este similar cu un sistem de control al versiunilor: puteți întoarce întotdeauna starea sistemului și vedea cum era cu un timp în urmă.

Pentru a asigura această funcționalitate, nu trebuie să configurați scripturi Cron, să faceți snapshoturi etc. Sistemul de fișiere NILFS2 se ocupă de toate acestea de unul singur. Acesta nu suprascrie niciodată datele vechi și scrie întotdeauna în zone noi ale discului, dacă există suficient spațiu liber pe disc. Conform principiului Copy-on-Write.

De fapt, orice modificare a unui fișier generează automat un nou snapshot al sistemului de fișiere, astfel încât puteți folosi acest FS ca o mașină a timpului pentru a restaura stările fișierelor.

Istoria

NILFS2 — sistem de fișiere rezistent la gloanțe pentru /homeNILFS2 a fost dezvoltat în cadrul Nippon Telegraph and Telephone Corporation, practic, o companie publică (controlată de stat, având pachetul de control) și cea mai mare companie de telecomunicații din Japonia. Mai exact, în laboratorul CyberSpace Laboratories sub conducerea lui Ryusuke Konishi.

Motivul specific pentru care a fost dezvoltată nu este cunoscut, dar se poate presupune că un astfel de FS, cu funcționalitatea sa de „mașină a timpului” este ideal pentru stocarea datelor care ar putea cădea în atenția agențiilor de securitate, pentru a reconstitui întreaga imagine a SMS-urilor, e-mailurilor etc.

NILFS2 este, de asemenea, un instrument foarte valoros pentru serviciile interne de securitate, deoarece permite recuperarea tuturor mesajelor șterse din baza de date a poștei, detectarea greșelilor angajaților care, ulterior, ar putea încerca să le ascundă, ștergând sau modificând fișierele lor.

Cum se poate urmări întreaga istorie a corespondenței?În Linux pe servere (unde ar trebui să fie instalat NILFS2 pentru scopuri de securitate internă) pentru stocarea mesajelor de e-mail se folosește foarte des metoda de stocare a fișierelor. Așa-numitul format Maildir. Este suficient să instalați Courier Mail Server și să configurați stocarea mesajelor în Maildir. Un alt format mbox reprezintă un fișier text mare, care poate fi parsat ușor în mesaje separate.

Dacă serverul de e-mail folosește o bază de date, atunci NILFS2 va oferi posibilitatea de a restaura cronologia exactă a modificărilor bazei și de a o recupera în oricare dintre acele momente. Apoi, trebuie să folosiți instrumentele BDS pentru a verifica ce era în ea la acea vreme…

Cu toate acestea, ceva nu a mers bine. Fie că guvernul Japoniei s-a răzgândit să supravegheze pe toată lumea (în stilul principiului Iarovoi), fie că performanța NILFS2 pe HDD-uri tradiționale a fost excepțional de scăzută, NILFS2 a fost lansată sub licența GPL și a fost integrată rapid în nucleul Linux, deoarece nu au existat reclamații semnificative cu privire la codul scris de specialiștii japonezi.

La ce seamănă NILFS2?

Din punct de vedere al utilizării: cu un sistem de control al versiunilor SVN. Fiecare checkpoint al FS-ului este un commit, care se face automat fără știrea utilizatorului la orice modificare: fie că este vorba de ștergere, modificarea conținutului unui fișier sau a drepturilor de acces. Fiecare commit are un număr, care crește liniar.

Din punct de vedere al programatorului: cu un buffer ciclic. Sistemul de fișiere adună modificările și le scrie într-un chunk de aproximativ 8 MB (2000 * 4096, unde 2000 este numărul de elemente în bloc, iar 4096 este dimensiunea paginii de memorie). Întreaga disc este împărțită în astfel de chunk-uri. Scrierea se face secvențial. Când se termină spațiul liber, cele mai vechi imagini sunt șterse, iar chunk-urile sunt rescrise.

Principalele avantaje ale NILFS2

  • Versiune!!!
  • Procedura de recuperare a FS-ului după o eroare este elementară: la pornire se caută ultimul chunk care are o sumă de control corectă, și pe acesta se instalează superblocat. Aceasta este o operație practic instantanee.
  • Având în vedere că scrierea se face întotdeauna liniar, atunci:
    • poate arăta rezultate bune atunci când lucrează pe SSD-uri, cu scriere aleatorie lentă.
    • NILFS2 economisește resursa SSD, deoarece factorul de multiplicare a scrierii este aproape inexistent.
      Mai exact, nu mai mult de 2.Ideea este că, în timpul rescrierii ciclice a întregului disc, NILFS2 va muta datele nemodificabile în noi fragmente (chunk-uri).

      Dacă avem pe disc 10% date nemodificabile, atunci vom obține un randament de scriere de 10% la 1 rescriere completă. Și un randament de 50% la 50% umplere a dispozitivului pentru 1 rescriere completă a discului.

      Coeficientul maxim de amplificare a scrierii este 2. Acesta este foarte mic, având în vedere că totul este scris secvențial. În general, multiplicarea scrierii va fi mai mică decât la un sistem de fișiere obișnuit fragmentat cu un sector de 4096 de biți. (Ideea este sugerată prin comentariu).

  • Posibila simplitate a implementării replicării pe un sistem de fișiere NILFS2 la distanță

NILFS2 pentru /home

În sistemele de operare de tip Unix, de obicei există un folder /home, în care sunt stocate datele utilizatorilor. Diferite programe își salvează în acest folder setările care se referă la utilizatorul specific.

Cine, dacă nu utilizatorii, greșește cel mai des? Așa că, cum se spune, Dumnezeu îți cere să folosești NILFS2 pe /home.

Mai ales că, cu răspândirea pe scară largă a SSD-urilor, acum nu mai trebuie să ne facem griji cu privire la scăderi severe atunci când folosim sisteme de fișiere CoW.

Da, putem crea instantanee ale sistemului de fișiere (snapshot-uri) cât de des dorim în ZFS și BTRFS, dar întotdeauna există riscul ca o modificare de fișier pierdut să se afle între instantanee. Și instantanele trebuie să fie administrate: ștergerea celor vechi. În NILFS2, totul se întâmplă automat, practic la fiecare câteva secunde.

Am creat un volum logic folosind lvcreate (în grupul de volume nvme, un pool subțire thin). Recomand să creați exact pe un volum lvm, deoarece poate fi extins cu ușurință ulterior. Vă recomand să aveți 50% spațiu liber pe disc cu NILFS2 pentru o adâncime decentă a versiunii.

lvcreate -V10G -T nvme/thin -n home

și l-am formatat în NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
A început să scrie datele inițiale ale sistemului de fișiere pe dispozitiv
      Dimensiunea blocului:4096  Dispozitiv:/dev/nvme/home1  Dimensiunea dispozitivului:10737418240
Inițializarea sistemului de fișiere a fost un succes !!

După aceasta, trebuie să copiați toate datele de pe actualul /home.

Am făcut asta imediat după ce am pornit computerul, înainte de a intra în contul meu, din contul de utilizator root. Dacă aș fi intrat cu utilizatorul meu, unele programe ar fi deschis socketuri și fișiere în directorul meu /home/user, ceea ce ar fi îngreunat copierea curată. Așa cum se știe, directorul de acasă pentru utilizatorul root se află, de obicei, la /root, prin urmare, în partția /home nu se va deschide niciun fișier.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Referitor la ultima linie vezi. articol.

Mai departe, edităm /etc/fstab, în care se montează sistemul de fișiere pentru /home, la

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Opțiune noatime este necesar pentru a îmbunătăți performanța, astfel încât la fiecare accesare a fișierelor să nu se schimbe atime. Apoi, repornim.

Tipuri de instantanee în NILFS2.

O instantanee obișnuită, fără imunitate la ștergere, se numește checkpoint (punct de restabilire).
O instantanee cu protecție împotriva ștergerii automate se numește snapshot, mai departe numită pur și simplu instantanee.

Vizualizarea checkpoint-urilor se face cu comanda lscp

Vizualizarea instantaneelor (snapshots) lscp -s

Putem crea și noi instantanee și checkpoint-uri în orice moment cu ajutorul:

mkcp [-s] dispozitiv

Recuperăm datele.

NILFS ne permite să montăm la nesfârșit instantanee vechi în paralel cu lucrul pe ramura principală a FS-ului. Dar doar în modul de citire.

Totul este organizat astfel. Checkpoint-urile obișnuite, pe care le face NILFS2, pot fi șterse automat în orice moment (când se termină spațiul pe disc sau conform regulilor nilfs_cleanerd), așa că înainte de montare trebuie să transformăm checkpoint-ul într-o instantanee sau, în termeni românești, să fixăm snapshot-ul.

chcp ss numărul_checkpoint-ului

După asta, putem monta instantaneea, de exemplu, astfel:

mount -t nilfs2 -r -o cp=numărul_checkpoint-ului /dev/nvme/home /mnt/nilfs/numărul_checkpoint-ului

După aceea, copiem fișierele recuperate din instantanee în /home.
Ulterior, eliminăm flagul de neștergere de pe instantanee, pentru ca mai târziu colectorul automat de gunoi să poată șterge datele învechite:

chcp cp numărul_checkpoint-ului

Utilitare pentru NILFS2

Aici se află problema. Da, desigur, putem crea FS, schimba dimensiunea ei online, vizualiza lista checkpoint-urilor, crea și șterge. Pachetul nilfs2-utils oferă un minim de funcționalitate de bază.

Întrucât NTT a întrerupt finanțarea, nu există instrumente rapide la nivel de bază care să permită obținerea istoricului modificărilor fișierelor sau să facă un diff între instantaneele acestora.

Instrumentul meu n2u

Pentru a umple acest vid, am scris instrumentul meu n2u, care poate să afișeze istoricul modificărilor pentru un anumit fișier/directory:

n2u log numefisier

Iată un exemplu de ieșire:

          CHECKPOINT        DATA      ORA      TIP            DIMENSIUNE  MOD
             1787552  2019-11-24 22:08:00    primul          7079    cp
             1792659  2019-11-25 23:09:05  modificat          7081    cp

Funcționează destul de repede pentru metoda preferată de implementare: caută diferențele între fișiere folosind metoda bisecției, montând rapid și comparând fișierul/directory în diferite instantanee.

Se poate specifica un interval de checkpoint-uri folosind cheia -cp CP1:CP2 sau -cp {AN-LUNA-ZI}:{AN-LUNA-ZI}.

De asemenea, se poate vedea diferența dintre checkpoint-uri pentru un anumit fișier sau directory:

n2u diff -r cp1:cp2 numefisier

Se poate obține întreaga cronică a schimbărilor: toate diferențele dintre checkpoint-urile unui anumit fișier/directory:

n2u blame [-r cp1:cp2] numefisier

Intervalul de date este de asemenea suportat în această comandă.

Apel pentru dezvoltatori

Există mulți specialiști pe Habr. Vă rog, perfecționați NILFS2. Implementați replicarea, un diff rapid la un nivel de bază între revizii, reflink și alte funcții interesante!

Linkuri

Site-ul oficial NILFS.

Repositoare:
NILFS2.
Utilitare și module NILFS2.

Listă de distribuție:
Newsletter-ul dezvoltatorilor NILFS2. Identificator pentru abonare linux-nilfs.
Arhiva newsletter-ului.

Ghid de configurare a nilfs_cleanerd.
Teste comparative de performanță EXT4, Btrfs, XFS & NILFS2.

Mulțumiri:

  • Dezvoltatorilor NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi și Satoshi Moriai. Alți contribuabili importanți sunt: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Companiilor Amblin Entertainment și Universal Pictures pentru minunatele serii de filme «Înapoi în viitor». Prima imagine a postării este preluată din filmul „Înapoi în viitor — 3”.
  • Companiei RUVDS pentru sprijin și posibilitatea publicării pe blogul său din Habr.

P.S. Errorele observate pot fi raportate în privat. Îmi cresc karma pentru asta.

Puteți experimenta cu NILFS2, comandând o mașină virtuală de la RUVDS cu cuponul de mai jos. Perioada de testare gratuită de 3 zile pentru toți clienții noi.

NILFS2 — sistem de fișiere rezistent la gloanțe pentru /home

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster