NILFS2 — skudsikker filsystem til /home

NILFS2 — skudsikker filsystem til /home

Som det er velkendt, hvis noget skidt kan ske, så vil det også ske. Sandsynligvis har alle oplevet at miste en vigtig fil ved et uheld, eller at holde musemarkøren nede og slette tekst i tekstbehandleren ved en fejl.

Hvis du er vært eller ejer af et websted, er det sikkert, at du har oplevet hackede brugerkonti eller hackerangreb på dit websted. I sådanne tilfælde er det vigtigt at genoprette hændelsesforløbet, finde indtrængningsmetoden og sårbarheden, som angriberen har udnyttet.

Til at løse sådanne problemer er filsystemet NILFS2 en fremragende løsning.

Det er tilgængeligt i Linux-kernen fra version 2.6.30.

En af de karakteristiske træk ved dette filsystem er, at det minder om versionskontrolsystemer: du kan altid tilbagetrække systemets tilstand og se, hvordan det så ud for nogen tid siden.

For at sikre denne funktionalitet behøver du ikke at konfigurere cron-scripts, lave snapshots osv. Filsystemet NILFS2 tager sig af alt dette selv. Det overskriver aldrig gamle data og skriver altid til nye områder på disken, hvis der er tilstrækkelig ledig diskplads. Dette er helt i overensstemmelse med princippet om Copy-on-Write.

Faktisk fører enhver ændring af en fil til automatisk oprettelse af et nyt snapshot af filsystemet, så du kan bruge dette FS som en tidsmaskine og spole filsystemets tilstand tilbage.

Historik

NILFS2 — skudsikker filsystem til /homeNILFS2 blev udviklet i skødet af Nippon Telegraph and Telephone Corporation, som faktisk er en statsstyret virksomhed (den har kontrol over aktiemajoriteten) og den største telekommunikationsvirksomhed i Japan. Mere specifikt i CyberSpace Laboratories under ledelse af Ryusuke Konishi.

Hvorfor den specifikt blev udviklet, er ukendt, men man kan formode, at et sådant FS, med sin "tidsmaskine" funktionalitet, er ideelt til opbevaring af data, hvor efterretningstjenester kan have trang til at dykke ned i for at genskabe hele billedet af SMS'er, e-mails osv.

NILFS2 er også potentielt et meget værdifuldt værktøj for interne sikkerhedstjenester, da det tillader gendannelse af alle deleted emails i databasen, og afslører fejl fra medarbejdere, som senere kan forsøge at maskere dem ved at slette eller ændre deres filer.

Hvordan sporer man hele historien om korrespondanceI Linux-servere (og her bør NILFS2 installeres for interne sikkerhedsformål) anvendes der ofte en filbaseret metode til opbevaring af e-mails. Den såkaldte format Maildir. Det er tilstrækkeligt at installere Courier Mail Server og konfigurere opbevaring af e-mails i Maildir. Et andet format mbox består af en stor tekstfil, der nemt kan parses til separate beskeder.

Hvis mailserveren bruger en database, vil NILFS2 give mulighed for at genskabe den nøjagtige tidslinje for ændringer i databasen og muligheden for at genskabe databasen på et hvilket som helst af disse tidspunkter. Herefter skal databaseværktøjer anvendes for at se, hvad der var i den på det tidspunkt...

Men noget gik galt. Enten har den japanske regering ombestemt sig i forhold til at overvåge alle (à la Jarova-princippet), eller også viste ydelsen af NILFS2 på traditionelle HDD'er sig at være under al kritik, og NILFS2 blev udgivet under GPL-licensen og kom hurtigt ind i Linux-kernen, da udviklerne af Linux-kernen ikke havde særlige indvendinger mod den kode, der var skrevet af højt kvalificerede japanere.

Hvad ligner NILFS2?

Set fra et brugs-perspektiv: som et versionskontrolsystem SVN. Hver checkpoint i FS er et commit, der automatisk foretages uden brugerens viden ved enhver ændring: uanset om det er sletning, ændring af filens indhold eller adgangsrettigheder. Hver commit har et nummer, der stiger lineært.

Set fra programmørens perspektiv: som en cirkulær buffer. Filssystemet lagrer ændringer og skriver dem i et stykke, der er cirka 8 MB (2000 * 4096, hvor 2000 er antallet af elementer i blokken, og 4096 er hukommelsesside-størrelsen). Hele disken er opdelt i sådanne chunks. Skrivningen foregår sekventielt. Når der ikke længere er ledig plads, slettes de ældste snapshots, og chunks bliver overskrevet.

Hovedfordele ved NILFS2

  • Versionsstyring!!!
  • Proceduren til genopretning af FS efter et nedbrud er enkel: ved opstart søges der efter det sidste chunk, der har en gyldig kontrolsum, og superblokken installeres på det. Det er en næsten øjeblikkelig operation.
  • Da skrivningen altid sker lineært,
    • kan der opnås gode resultater ved brug på SSD med langsom tilfældig skrivning.
    • NILFS2 sparer SSD-ressourcer, da der næsten ikke er nogen skrivemultiplikator.
      Nærmere bestemt er den ikke mere end 2.Sagen er, at når hele disken skrives cyklisk over, vil NILFS2 flytte uforanderlige data til nye stykker (chunks).

      Hvis vi har 10% uforanderlige data på disken, så får vi 10% stigning i skrivningen ved 1 fuldstændig overskrivning. Og 50% stigning ved 50% fyldning af enheden ved 1 fuld overskrivning af disken.

      Den maksimale skrivemultiplikator er 2. Det er meget lidt, når alt skrives sekventielt. Generelt vil skrivemultiplikationen være mindre end for et almindeligt fragmenteret FS med en sektor på 4096 byte. (Dette blev inspireret af en kommentar).

  • Potentiel nem implementering af replikation til en fjern NILFS2 FS

NILFS2 til /home

I Unix-lignende OS'er findes der som regel en mappe /home, hvor brugernes data opbevares. Forskellige programmer gemmer deres indstillinger i denne mappe, som relaterer sig til den specifikke bruger.

Og hvem, hvis ikke brugerne, laver oftest fejl? Derfor er det, som man siger, genstand for gudernes vilje at bruge NILFS2 på /home.

Især nu hvor SSD'er er udbredte, kan vi være rolige vedrørende kraftige fald, når CoW-filsystemer anvendes.

Ja, vi kan skabe snapshots (FS-billeder) så ofte vi vil i ZFS og BTRFS, men der er altid en risiko for, at et mistet filændring er mellem snapshots. Og snapshots skal også administreres: gamle skal slettes. I NILFS2 sker alt dette automatisk, bogstaveligt talt hver få sekunder.

Jeg oprettede et logisk volumen med hjælp af lvcreate (i gruppen af NVMe-volumener, tynd pulje). Jeg anbefaler at oprette det på LVM-volumenet, da det senere kan udvides nemt. Jeg anbefaler at have 50% ledig plads på disken med NILFS2 for en anstændig dybde af versionering.

lvcreate -V10G -T nvme/thin -n home

og formaterede det i NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start skrive filsystemets initiale data til enheden
      Blokstørrelse: 4096  Enhed: /dev/nvme/home1  Enhedsstørrelse: 10737418240
Filsysteminitialisering lykkedes!!

Derefter skal alle data kopieres fra den nuværende /home.

Jeg gjorde dette straks efter at have startet computeren, før jeg loggede ind på min konto, fra root-bruger. Hvis jeg var logget ind som min bruger, ville nogle programmer have åbnet sockets og filer i min brugers mappe /home/user, hvilket ville gøre en ren kopi vanskelig. Som bekendt ligger root-brugerens hjemmemappe normalt på stien /root, så der åbnes ingen filer på /home.

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

Vedrørende den sidste linje se. artiklen.

Derefter redigerer vi /etc/fstab, hvor filsystemet for /home bliver monteret, til

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

Mulighed noatime er nødvendig for at forbedre ydeevnen, så atime ikke ændres ved hver adgang til filerne. Derefter genstarter vi.

Typer af snapshots i NILFS2.

Et almindeligt snapshot uden immunitet mod sletning kaldes et checkpoint (checkpoint eller gendannelsespunkt).
Et snapshot med beskyttelse mod automatisk sletning kaldes et snapshot, herefter blot snapshot.

Visning af checkpoints gøres ved hjælp af kommandoen lscp

Visning af snapshots (snapshots) lscp -s

Vi kan også selv oprette snapshots og checkpoints når som helst ved hjælp af:

mkcp [-s] enhed

Vi gendanner data.

NILFS允许我们并行挂载任意数量的旧快照,同时与主分支FS一起工作。但仅在只读模式下。

Alt er arrangeret således. Almindelige checkpoints, som NILFS2 laver, kan blive automatisk slettet af systemet når som helst (når diskpladsen er opbrugt eller efter reglerne for nilfs_cleanerd), derfor skal vi inden montering konvertere checkpointet til et snapshot eller, på dansk, fastlåse snapshotet.

chcp ss checkpoint_nummer

Derefter kan vi montere snapshotet, for eksempel sådan:

mount -t nilfs2 -r -o cp=checkpoint_nummer /dev/nvme/home /mnt/nilfs/checkpoint_nummer

Efterfølgende kopierer vi de gendannede filer fra snapshotet til /home.
Og derefter fjerner vi flaget om ikke-sletning fra snapshotet, så den automatiske affaldsamler i fremtiden kan fjerne forældede data:

chcp cp checkpoint_nummer

Værktøjer til NILFS2

Her har vi et problem. Ja, selvfølgelig kan vi oprette filsystemer, ændre deres størrelse online, se listen over checkpoints, lave og slette dem. Pakken nilfs2-utils giver et minimalt gentleman's sæt.

Da NTT har trukket finansieringen, er der ingen hurtige lavniveau værktøjer tilgængelige til at vise filændringshistorik eller lave diff mellem snapshots.

Mit værktøj n2u

For at fylde dette tomrum har jeg skrevet mit værktøj n2u, som kan vise ændringshistorik for en bestemt fil/directory:

n2u log filnavn

Outputtet ser cirka sådan ud:

          CHECKPOINT        DATO     TID     TYPE          STØRRELSE  MODE
             1787552  2019-11-24 22:08:00    første          7079    cp
             1792659  2019-11-25 23:09:05  ændret          7081    cp

Det fungerer ret hurtigt for den valgte implementeringsmetode: den søger efter forskelle mellem filer ved hjælp af bisektion, hurtigt monterer og sammenligner fil/directory i forskellige snapshots.

Man kan angive et interval af checkpoints med nøgle -cp CP1:CP2 eller -cp {ÅR-MÅNED-DAG}:{ÅR-MÅNED-DAG}.

Man kan også se forskellen mellem checkpoints for en bestemt fil eller directory:

n2u diff -r cp1:cp2 filnavn

Man kan vise hele ændringshistorikken: alle forskelle mellem checkpoints for en bestemt fil/directory:

n2u blame [-r cp1:cp2] filnavn

Datointervallet understøttes også i denne kommando.

Kald til udviklerne

Der er mange specialister på Habr. Jeg beder jer om at færdiggøre NILFS2. Gør replikation, lavniveau hurtig diff mellem revisioner, reflink og andre fordele!

Links

Den officielle NILFS hjemmeside.

Repositories:
NILFS2.
NILFS2 værktøjer og moduler.

Nyhedsbreve:
E-mail nyhedsbrev for NILFS2 udviklere. Identifikator til abonnement linux-nilfs.
Arkiv af nyhedsbreve.

Vejledning til opsætning af nilfs_cleanerd.
Sammenlignende ydeevnetests af EXT4, Btrfs, XFS & NILFS2.

Tak:

  • Udviklere af NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi og Satoshi Moriai. Andre store bidragydere er: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Virksomhederne Amblin Entertainment og Universal Pictures for den fantastiske filmserie «Tilbage til Fremtiden». Det første billede i indlægget er taget fra filmen «Tilbage til Fremtiden — 3».
  • Virksomheden RUVDS for støtte og muligheden for at offentliggøre det i sin blog på Habr.

P.S. Send observerede fejl i private beskeder. J eg øger karmaen for det.

Du kan eksperimentere med NILFS2 ved at bestille en virtuel maskine hos RUVDS med kuponkoden nedenfor. Alle nye kunder får en gratis prøveperiode på 3 dage.

NILFS2 — skudsikker filsystem til /home

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster