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
nebon
). - 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:
- Získejte hexadecimální hodnoty prvních několika bajtů typu souboru pomocí
head --bytes n
příkaz. - Získejte posledních několik bajtů pomocí
tail --bytes -n
příkaz. - 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í.
- 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ě.