GNU/Linux >> Znalost Linux >  >> Linux

Najděte ztracené soubory pomocí skalpelu

Jako správce systému je součástí vaší odpovědnosti pomáhat uživatelům spravovat jejich data. Jedním z důležitých aspektů toho je zajistit, aby vaše organizace měla dobrý plán zálohování a aby vaši uživatelé zálohovali pravidelně, nebo nemuseli, protože jste tento proces zautomatizovali.

Někdy se však stane to nejhorší. Soubor se omylem smaže, poškodí se souborový systém nebo se ztratí oddíl a z jakéhokoli důvodu zálohy neobsahují to, co potřebujete.

Jak jsme diskutovali v části Jak zabránit náhodnému smazání souboru v Linuxu a obnovit jej, než se pokusíte obnovit ztracená data, musíte nejprve zjistit, proč data chybí. Je možné, že uživatel jednoduše ztratil soubor nebo že existuje záloha, o které uživatel neví. Ale pokud uživatel skutečně odstranil soubor bez záloh, pak víte, že musíte smazaný soubor obnovit. Pokud se však tabulka oddílů zakóduje, soubory se ve skutečnosti vůbec neztratí a možná budete chtít použít TestDisk k obnovení tabulky oddílů nebo samotného oddílu.

Co se stane, když obnovení souboru nebo oddílu není úspěšné nebo je pouze částečné? Pak je čas na Skalpel. Skalpel provádí operace vyřezávání souborů na základě vzorů popisujících jedinečné typy souborů. Hledá tyto vzory na základě binárních řetězců a regulárních výrazů a poté podle toho extrahuje soubor.

Tento nástroj není v současné době udržován, ale je vždy spolehlivý, kompiluje se a běží přesně podle očekávání. Pokud používáte Red Hat Enterprise Linux (RHEL) 7, RHEL 8 nebo Fedora, můžete si stáhnout instalační programy Scalpel RPM spolu s jeho závislostí, libtre , z klaatu.fedorapeople.org.

Začínáme se skalpelem

Skalpel je dodáván s obsáhlým seznamem typů souborů a jejich nejunikátnějších identifikačních funkcí. Někdy lze soubor identifikovat podle předvídatelného textu na jeho začátku a konci:

htm    n    50000   <html         </html>

Zatímco jindy jsou záhadně vypadající hexadecimální kódy nezbytné:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Skalpel očekává, že budete duplikovat /etc/scalpel.conf upravte svou kopii tak, aby zahrnovala typy souborů, které chcete obnovit, a vylučte typy souborů, o kterých víte, že je nepotřebujete. Pokud například víte, že nemáte .fws nebo se o něj nezajímáte soubory, pak okomentujte tento řádek ze souboru. To může urychlit proces obnovy a snížit počet falešných poplachů.

V konfiguračním souboru je formát definice souboru zleva doprava:

  • Přípona souboru.
  • Zda se v záhlaví a zápatí rozlišují velká a malá písmena (y nebo n ).
  • Minimální a maximální velikost souboru, kterou má Scalpel najít.
  • Standardní záhlaví, které identifikuje začátek souboru.
  • Standardní zápatí, které identifikuje konec souboru.

footer pole je volitelné. Pokud není poskytnuto žádné zápatí, skalpel extrahuje počet bajtů, který jste nastavili jako maximální hodnotu typu souboru.

Možná zjistíte, že obnova zachrání pouze část souboru, jako je tento většinou obnovený JPG:

Tento výsledek znamená, že pravděpodobně budete muset zvýšit maximální hodnotu hranic souboru a poté znovu naskenovat, aby bylo možné obnovit i konec souboru:

Definování nových typů souborů

Nejprve vytvořte kopii konfiguračního souboru Scalpel. Pokud všichni vaši uživatelé generují podobná data, možná budete potřebovat pouze jeden konfigurační soubor pro celou vaši organizaci. Nebo může být lepší mít jeden konfigurační soubor na oddělení.

Chcete-li do konfigurace skalpelu přidat své vlastní typy souborů, začněte s investigativní forenzní analýzou.

U textových souborů máte v ideálním případě nějakou předvídatelnou strukturu, kterou můžete předvídat. Například soubor XML pravděpodobně začíná řetězcem <xml a končí </xml . Binární soubory jsou podobně předvídatelné. Pomocí hexdump můžete zobrazit typickou hlavičku typu souboru, který chcete definovat. Zde jsou výsledky pro XCF, výchozí vrstvený grafický soubor z GIMPu:

$ head --bytes 8 example.xcf | hexdump --canonical
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Tento výstup pochází ze systému Red Hat Enterprise Linux 8. Na starších systémech může být nezbytná starší syntaxe:

$ head --bytes 8 example.xcf | hexdump -C
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Kanonický výstup hexdump zobrazuje adresu ve sloupci zcela vlevo a dekódované hodnoty zcela vpravo. V prostředním sloupci jsou hexadecimální bajty prvních 8 bajtů prvního řádku souboru XCF.

Většina binárních souborů v /etc/scalpel.conf vypadají docela podobně jako tento výstup, až na to, že tyto hodnoty mají předponu \x escape sekvence k označení, že čísla jsou ve skutečnosti hexadecimální číslice. Například soubor JPG v konfiguračním souboru vypadá takto:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Porovnejte tuto hodnotu s testovacím hexadecimálním výpisem prvních 6 bajtů (protože tolik bajtů scalpel.conf obsahuje ve své definici JPG) jakýkoli soubor JPG ve vašem systému:

$ head --bytes 6 example.jpg | | hexdump --canonical
00000000  ff d8 ff e0 00 10                    |......|
00000006

Porovnejte zápatí s posledními 2 bajty, aby odpovídalo tomu, co zobrazuje konfigurační soubor:

$ tail --bytes -2 example.jpg | hexdump --canonical
00000000  ff d9                        |..|
00000002

Tyto hodnoty se shodují, takže si můžete být jisti, že platné soubory JPG pravděpodobně všechny začínají a končí v předvídatelném pořadí.

Poznámka: Záznam Ogg v scalpel.conf soubor je zavádějící, protože postrádá \x escape sekvence. Pokud potřebujete obnovit soubor Ogg, opravte to nebo nahraďte jeho definici.

Příchod do práce

Nyní, abyste získali stejnou úroveň spolehlivosti pro všechny soubory, které potřebujete obnovit (jako je XCF v předchozím příkladu). Abych to zopakoval, toto je váš pracovní postup pro definování typů binárních souborů společných pro disk oběti: 

  1. Získejte hexadecimální hodnoty prvních několika bajtů typu souboru pomocí head --bytes n příkaz.
  2. Získejte posledních několik bajtů pomocí tail --bytes -n příkaz.
  3. Tento proces zopakujte na několika různých souborech stejného typu, abyste potvrdili konzistenci tohoto vzoru a podle potřeby upravte délku vzorů záhlaví a zápatí.
  4. Zadejte hodnoty záhlaví a zápatí do své vlastní konfigurace skalpelu pomocí \x zápis k identifikaci každého bajtu jako hexadecimálního znaku.

Postupujte podle tohoto pořadí pro každý důležitý typ binárního souboru, který potřebujete obnovit.

Pokud je soubor prostý text, uveďte společné záhlaví a zápatí, například #!/bin/sh pro shellové skripty # (mezera za # je důležité) pro soubory markdown s názvem úrovně h1, <xml pro soubory XML a tak dále.

Až budete připraveni spustit Scalpel, vytvořte adresář, kam může umístit vaše zachráněné soubory:

$ mkdir /run/media/seth/rescuer/scalped

Poznámka: Nevytvářejte tento adresář na stejném svazku, který obsahuje ztracená data.

Pokud obětovaný disk ještě není připojen, připojte jej a poté spusťte Scalpel:

$ scalpel -c my-scalpel.conf \
  -o /run/media/seth/rescuer/scalped \
  /run/media/seth/victim

Skalpel můžete také spustit na obrazu disku:

$ scalpel -c my-scalpel.conf \
  -o ~/scalped ~/victim.img

Po dokončení Skalpelu zkontrolujte soubory ve vámi určeném záchranném adresáři.

Celkově vzato je nejlepší dělat zálohy, abyste se mohli vyhnout obnově souborů. Pokud by však došlo k nejhoršímu, vyzkoušejte skalpel a vyřezávejte opatrně.


Linux
  1. Jak najít soubory s určitou podcestou?

  2. Jak najít soubory pomocí příkazu fd v Linuxu

  3. Linux odstranit soubor s velikostí 0

  1. Najděte všechny soubory s názvem obsahujícím řetězec

  2. Hledání souborů čitelných pro člověka na unixu

  3. najít soubory s nastavenými seznamy ACL

  1. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  2. Najděte soubor pomocí příkazů Najít a najít v Linuxu

  3. Jak najít všechny soubory s velikostí souboru nula (0) bajtů v adresáři rekurzivně