NILFS2 - et skuddsikkert filsystem for /home

NILFS2 - et skuddsikkert filsystem for /home

Som du vet, hvis problemer kan skje, vil det definitivt skje. Sannsynligvis har alle hatt tilfeller der en nylig viktig fil ble slettet ved et uhell, eller tekst ble ved et uhell valgt og ødelagt i et tekstredigeringsprogram.

Hvis du er hoster eller nettstedeier, har du sannsynligvis støtt på hacking av brukerkontoer eller nettstedet ditt. I slike tilfeller er det viktig å gjenopprette kronologien, finne inntastingsmetoden og sårbarheten brukt av angriperen.

NILFS2-filsystemet er perfekt for å løse slike problemer.

Den har vært til stede i Linux-kjernen siden versjon 2.6.30.

Det særegne med dette filsystemet er at det ligner på et versjonskontrollsystem: du kan alltid rulle tilbake systemets tilstand og se hvordan det var for en tid siden.

For å tilby denne funksjonaliteten trenger du ikke å konfigurere Cron-skript, ta øyeblikksbilder osv. NILFS2-filsystemet gjør dette helt av seg selv. Den overskriver aldri gamle data og skriver alltid til nye områder på disken hvis det er nok ledig diskplass. I full overensstemmelse med Copy-on-Write-prinsippet.

Faktisk oppretter enhver endring i en fil automatisk et nytt øyeblikksbilde av filsystemet, slik at du kan bruke denne FS som en tidsmaskin og spole tilbake tilstanden til filene.

Story

NILFS2 - et skuddsikkert filsystem for /homeNILFS2 ble utviklet i dypet av Nippon Telegraph and Telephone Corporation, faktisk det statseide (det har en kontrollerende eierandel) og det største telekommunikasjonsselskapet i Japan. Nærmere bestemt i CyberSpace Laboratories under ledelse Ryusuke Konishi.

Nøyaktig hva den ble utviklet for er ukjent, men det kan antas at en slik FS, med sin «tidsmaskin»-funksjonalitet, er ideell for å lagre data som etterretningstjenestene kanskje vil grave i for å spille av hele bildet av SMS, e-post osv....

NILFS2 er også potensielt et svært verdifullt verktøy for interne sikkerhetstjenester, ettersom det lar deg gjenopprette alle slettede brev i postdatabasen, og avslører blokkene til ansatte som senere kan forsøke å skjule dem ved å slette eller endre filene deres.

Hvordan kan du spore hele korrespondansehistorikken din?På Linux-servere (og det er her NILFS2 skal installeres for interne sikkerhetsformål), brukes filmetoden for å lagre e-poster veldig ofte til å lagre e-postmeldinger. Det såkalte formatet Maildir. Nok å sette Courier Mail Server og konfigurer e-postlagring i Maildir. Annet format mbox er en stor tekstfil som enkelt kan analyseres til individuelle meldinger.

Hvis e-postserveren bruker en database, vil NILFS2 gjøre det mulig å gjenopprette den nøyaktige timingen av databaseendringer og muligheten til å gjenopprette databasen på et hvilket som helst av disse tidspunktene. Og så må du bruke databaseverktøy for å se hva som var i den på det tidspunktet...

Noe gikk imidlertid galt. Enten endret den japanske regjeringen mening om å overvåke alle (a la Yarovaya-prinsippet), eller ytelsen til NILFS2 på tradisjonelle harddisker viste seg å være under pari, og NILFS2 ble utgitt under GPL-lisensen og kom veldig raskt inn i Linux-kjernen, siden det var ingen spesielle klager på koden skrevet høyt kvalifisert japansk, utviklerne av Linux-kjernen hadde det ikke.

Hvordan er NILFS2?

Fra et brukssynspunkt: på et versjonskontrollsystem SVN. Hvert FS-sjekkpunkt er en commit som gjøres automatisk uten brukerens viten når det er noen endring: enten det er sletting, endring av innholdet i en fil eller endring av tilgangsrettigheter. Hver commit har et tall som øker lineært.

Fra en programmerers synspunkt: en sirkulær buffer. Filsystemet akkumulerer endringer og skriver dem i en del som tilsvarer omtrent 8 MB (2000 * 4096, der 2000 er antall elementer i blokken og 4096 er størrelsen på minnesiden). Hele disken er delt opp i slike biter. Opptaket fortsetter sekvensielt. Når ledig plass går tom, slettes de eldste øyeblikksbildene og delene overskrives.

Grunnleggende NILFS2-godbiter

  • Versjonskontroll!!!
  • Prosedyren for å gjenopprette et filsystem etter en feil er enkel: under lasting søkes den siste delen som har riktig kontrollsum, og en superblokk er installert på den. Dette er en nesten umiddelbar operasjon.
  • På grunn av det faktum at opptaket alltid fortsetter lineært, så:
    • kan vise gode resultater når du kjører på en SSD med sakte tilfeldige skrivinger.
    • NILFS2 sparer SSD-ressurser, siden det nesten ikke er noen skrivemultiplikasjonsfaktor.
      Mer presist er det ikke mer enn 2.Faktum er at når du syklisk omskriver hele disken, vil NILFS2 overføre uforanderlige data til nye deler (biter).

      Hvis vi har 10% uforandret data på disken, vil vi få en 10% skriveøkning med 1 fullstendig omskriving. Vel, en 50 % økning ved 50 % fylde av enheten for 1 fullstendig omskriving av disken.

      Maksimal skriveforsterkning er 2. Dette er veldig lavt med tanke på at alt skrives sekvensielt. Generelt vil skriveanimasjonen være mindre enn for et konvensjonelt fragmentert filsystem med en 4096-byte sektor. (Tanke inspirert av kommentar).

  • Potensiell enkel implementering av replikering til en ekstern NILFS2 FS

NILFS2 for /hjem

I Unix-lignende operativsystemer er det som regel en /home-mappe der brukerdata lagres. Ulike programmer lagrer sine brukerspesifikke innstillinger i denne mappen.

Og hvem, hvis ikke brukere, gjør feil oftest? Derfor, som de sier, beordret Gud selv bruk av NILFS2 på /home.

Dessuten, med den utbredte bruken av SSD-er, trenger vi nå ikke lenger å bekymre oss for alvorlige nedtrekk når vi bruker CoW-filsystemer.

Ja, vi kan lage FS-øyeblikksbilder så ofte vi vil i ZFS og BTRFS, men det er alltid en risiko for at en tapt filendring havner mellom øyeblikksbildene. Og bildene må fortsatt administreres: gamle må slettes. I NILFS2 skjer alt dette automatisk, bokstavelig talt med noen sekunders mellomrom.

Jeg opprettet et logisk volum ved å bruke lvcreate (i nvme-volumgruppen, tynn pool). Jeg anbefaler å lage det på lvm-volumet, siden det enkelt kan utvides senere. Jeg anbefaler å ha 50 % ledig diskplass med NILFS2 for anstendig versjonsdybde.

lvcreate -V10G -T nvme/thin -n home

og formaterte den i NILFS2:

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

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

Etter dette må du kopiere alle data fra gjeldende /home.

Jeg gjorde dette umiddelbart etter oppstart av datamaskinen, før jeg logget på kontoen min, som root-bruker. Hvis jeg skulle logge inn som min bruker, ville noen programmer åpne sockets og filer i brukerens /home/user-mappe, noe som ville gjøre en ren kopi vanskelig. Som du vet, er hjemmemappen for rotbrukeren vanligvis plassert på /root-banen, så ingen filer åpnes på /home-partisjonen.

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

For siste linje, se artikkel.

Deretter redigerer vi /etc/fstab, der filsystemet for /home er montert, til

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

alternativ noatime nødvendig for å forbedre ytelsen slik at tiden ikke endres med hver filtilgang. Deretter starter vi på nytt.

Typer bilder i NILFS2.

Et vanlig øyeblikksbilde uten immunitet mot sletting kalles et sjekkpunkt eller gjenopprettingspunkt.
Et øyeblikksbilde som er beskyttet mot automatisk sletting kalles et øyeblikksbilde, deretter bare et øyeblikksbilde.

Visning av sjekkpunkter gjøres ved å bruke lscp-kommandoen

Vis øyeblikksbilder lscp -s

Vi kan lage øyeblikksbilder og sjekkpunkter selv når som helst ved å bruke:

mkcp [-s] устройство

Vi gjenoppretter data.

NILFS lar oss montere så mange gamle snapshots vi ønsker parallelt med arbeid med FS-hovedgrenen. Men bare i lesemodus.

Alt er ordnet slik. Vanlige sjekkpunkter som NILFS2 lager kan slettes automatisk når som helst (når diskplass går tom eller i henhold til nilfs_cleanerd-reglene), så før installasjon må vi konvertere sjekkpunktet til et øyeblikksbilde eller, på russisktalende, fange øyeblikksbildet.

chcp ss номер_чекпоинта

Etter det kan vi montere øyeblikksbildet, for eksempel slik:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Deretter kopierer vi de gjenopprettede filene fra øyeblikksbildet til /home.
Og deretter fjerner vi det u-slettbare flagget fra øyeblikksbildet slik at den automatiske søppelsamleren i fremtiden kan fjerne utdaterte data:

chcp cp номер_чекпоинта

Verktøy for NILFS2

Men dette er problemet. Ja, selvfølgelig, vi kan lage et filsystem, endre størrelsen på nettet, se listen over utfordringspunkter, opprette og slette dem. Nilfs2-utils-pakken gir et minimalt herresett.

Siden NTT har begrenset finansieringen, er det ingen raske lavnivåverktøy som lar deg vise historikken til filendringer eller gjøre forskjeller mellom øyeblikksbilder.

Mitt n2u-verktøy

For å fylle dette vakuumet skrev jeg ditt n2u-verktøy, som kan vise endringshistorikken til en bestemt fil/katalog:

n2u log filename

Utgangen er omtrent slik:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

Den fungerer ganske raskt for den valgte implementeringsmetoden: den ser etter forskjeller mellom filer ved hjelp av halveringsmetoden, monterer raskt og sammenligner filen/katalogen i forskjellige øyeblikksbilder.

Du kan stille inn en rekke sjekkpunkter ved å bruke tasten -cp CP1:CP2 eller -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Du kan også se forskjellen mellom sjekkpunkter for en bestemt fil eller katalog:

n2u diff -r cp1:cp2 filename

Du kan vise hele kronologien av endringer: alle forskjellene mellom sjekkpunktene til en bestemt fil/katalog:

n2u blame [-r cp1:cp2] filename

Datointervall i denne kommandoen støttes også.

Et rop til utviklerne

Det er mange spesialister på Habré. Fullfør NILFS2. Lag replikering, rask forskjell på lavt nivå mellom revisjoner, reflink og andre godbiter!

referanser

Offisiell NILFS-nettside.

Lagre:
NILFS2.
NILFS2 verktøy og moduler.

Nyhetsbrev:
Nyhetsbrev på e-post for NILFS2-utviklere. ID for linux-nilfs abonnement.
Nyhetsbrevarkiv.

nilfs_cleanerd oppsettsveiledning.
Benchmarking EXT4, Btrfs, XFS og NILFS2 ytelsestester.

Anerkjennelser:

  • NILFS2-utviklere: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi og Satoshi Moriai. Andre store bidragsytere 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.
  • Til Amblin Entertainment og Universal Pictures for en fantastisk serie med filmer. "Tilbake til fremtiden". Det første bildet av innlegget er hentet fra filmen «Back to the Future 3».
  • selskap RUVDS for støtte og muligheten til å publisere på bloggen din på Habré.

PS Vennligst send eventuelle feil du oppdager i en privat melding. Jeg øker karmaen min for dette.

Du kan eksperimentere med NILFS2 ved å bestille en virtuell maskin fra RUVDS med kupongen nedenfor. For alle nye kunder er det en gratis prøveperiode på 3 dager.

NILFS2 - et skuddsikkert filsystem for /home

Kilde: www.habr.com

Legg til en kommentar