Zašifrování existujícího systému

Kamui

Zašifrování existujícího systému
« kdy: 13. 10. 2021, 10:08:50 »
Situace se má tak, že mám notebook s Ubuntu a chtěl bych v něm udělat plné zašifrování systému bez přeinstalace. Postup tuším, ale chci se ujistit, abych neskončil s neprovozuschopným strojem.

Na disku jsou tři oddíly - EFI, /boot a /. Rootfs je naformátovaný jako btrfs. Moje idea je taková, že nainstaluji balík cryptsetup-initramfs, potom (za běhu systému) přesunu systémový oddíl na externí disk
Kód: [Vybrat]
btrfs device add /dev/externi / && btrfs device remove /dev/interni /, původní oddíl na interním disku naformátuji pomocí LUKS, připojím a filesystém na něj přesunu z externího disku zpět. Udělám zápisy do crypttab a fstab, pustím update grubu a initramfs, a tím by mělo být hotovo a po restartu by si systém měl říct o heslo.

Je výše uvedený postup správný a bude to fungovat tak, jak si představuji?


_Jenda

  • *****
  • 861
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Zašifrování existujícího systému
« Odpověď #1 kdy: 13. 10. 2021, 11:21:43 »
Osobně bych to kopírování nedělal na úrovni FS, ale rsyncem - pokud tam tedy nemáš nějaké snapshoty, které by vyžadovaly speciální péči.

Jinak ano, přesně takhle to má fungovat. Zvážil bych, jestli do toho LUKSu nedat ještě mezivrstvu LVM, kdybys třeba chtěl používat šifrovanou hibernaci (nebo btrfs už umí bezproblémově hibernaci do souboru? možná to nesmělo být fragmentované, filesystém nesměl používat kompresi a tak).

Kamui

Re:Zašifrování existujícího systému
« Odpověď #2 kdy: 13. 10. 2021, 11:41:56 »
Jenda: ten rsync se ale musí dělat offline, ne? Jinak tenhle přesun btrfs fs za běhu na jiný disk už jsem dělal, toho se nebojím. V nejhorším budu mít zálohu, ale byl bych raději kdybych ji nemusel používat.

by_cx

  • ***
  • 140
    • Zobrazit profil
    • E-mail
Re:Zašifrování existujícího systému
« Odpověď #3 kdy: 13. 10. 2021, 11:57:16 »
Budeš tam bojovat s UUIDčkama oddílů. /boot nech jak je, ulehčí ti to práci, protože jeho UUID je uložené někde v EFI oddílu. Někam zkopíruj root a udělej místo něj LUKS. Ten postup co si uvedl by měl fungovat. Pak ho zkopíruj zpátky. Pak upravíš crypttab a možná i fstab, ale nejsem si jist, protože UUID root ani boot oddílu se nezmění. Pak si v kritické fázi, kdy je potřeba říct initrd co má rozšifrovat během bootu, resp. k čemu tě poprosí o heslo. To se dělá v cmdline kernelu v GRUBu. Tohle mám v cmdline já:

Kód: [Vybrat]
BOOT_IMAGE=(hd4,gpt2)/vmlinuz-5.14.9-200.fc34.x86_64 root=/dev/mapper/data-root ro rd.lvm.lv=data/root rd.luks.uuid=luks-47b4ad1c-f692-48b5-b8f4-1671d99c0db4 i8042.dumbkbd=1 rhgb quiet
Root je jasnej. Pokud máš LVM, tak potřebuješ rd.lvm.lv, aby si řekl initrd, kde máš roota. Co ale potřebuješ určitě je rd.luks.uuid, aby initrd vědělo, kterej oddíl má rozšifrovat. Na něm pak najde crypttab a pokračuje tak jako předtím.

Nedávno jsem to dělal na serveru a samozřejmě se to nepovedlo napoprvý :-) Když použiješ btrfs jak zmiňuješ, tak budeš mít jednu výhodu a to že zvládneš ten systém přesunout zaživa a pokud uděláš vše správně, tak po rebootu naběhne. Nezapomeň zašifrovat ten externí disk. Rsyncu bych se vyhnul, protože se ti v takovém případě změní UUID root oddílu.

Good luck.

k3dAR

  • *****
  • 2 076
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Zašifrování existujícího systému
« Odpověď #4 kdy: 13. 10. 2021, 13:01:44 »
Budeš tam bojovat s UUIDčkama oddílů. /boot nech jak je, ulehčí ti to práci, protože jeho UUID je uložené někde v EFI oddílu.
[...] je potřeba říct initrd co má rozšifrovat během bootu, resp. k čemu tě poprosí o heslo. To se dělá v cmdline kernelu v GRUBu. [...]  potřebuješ rd.lvm.lv, aby si řekl initrd, kde máš roota. Co ale potřebuješ určitě je rd.luks.uuid, aby initrd vědělo, kterej oddíl má rozšifrovat. [...]
/boot (nemusi hned, ale aspon po uspesnem nastartovani z zasifrovaneho) je urcite vhodne take mit v LUKS, jinak mu muze nekdo podstrcit snadno keyloger do initrd ;-) UUID noveho bootu jen zmeni v /etc/fstab a pomoci "sudo update-grub" se grub.cfg (i v tom EFI oddilu) spravne pregenerujou...

rd.lvm.. ci rd.luks... neni urcite potreba obecne pridavat, minimalne pri pouziti Grub2 (ten prave diky tomu grub.cfg v efi oddilu v nem ma infomrace kde ma hledat) nebo Sicherboot...