Jak sprawić, by zawieszenie pamięci RAM było bezpieczne w systemie Ubuntu z pełnym szyfrowaniem dysku (LVM na szczycie LUKS)?

20

Jestem na Ubuntu 13.04 przy użyciu pełnego szyfrowania dysku (LVM na szczycie LUKS).

Chciałbym włączyć luksSuspendsię do procedury zawieszenia (i późniejszego użycia luksResume), aby móc zawiesić się w pamięci RAM bez pozostawiania klucza materiału w pamięci i odblokowania katalogu głównego.

Przez ostatnie 7 godzin próbowałem przenieść skrypt dla Arch Linux , jak dotąd bez powodzenia: szczerze mówiąc, nie mam pojęcia, co robię ...

Czy ktoś może mi pomóc to przenieść (lub stworzyć coś takiego od zera)? A przynajmniej czy ktoś może wskazać mi dokumentację na temat tego, jak podpiąć się do procedur zawieszania i jak zachować niezbędne pliki binarne i skrypty (takie jak cryptsetup), nawet po tym, jak wszystkie IO do rootowania zostały (zablokowane luksSuspend)?

Jeśli chodzi o zachowanie niezbędnych plików binarnych i skryptów dostępnych do wznowienia, ten inny post na blogu (również dla Arch) skopiował je /boot; Chciałbym jednak użyć czegoś więcej w liniach, których używał Vianney w skrypcie, o którym wspomniałem wcześniej, ponieważ podejście to wydaje się być nieco bardziej eleganckie w tym aspekcie.

Jonas Malaco
źródło
Spędzam na tym jeszcze kilka godzin ...
Jonas Malaco
Zredagowałem skrypty, które składają się na pm-suspendto i wydawało się, że już prawie tam jestem. Jednak dowiedziałem się, że nie mogę po prostu zawiesić systemu ( echo -n "mem" > /sys/power/state) po zamrożeniu root fs ( cryptsetup luksSuspend ...), ponieważ wymaga to jeszcze trochę operacji we / wy ...
Jonas Malaco
1
Przeczytałem kilka dyskusji na temat list Debiana (i niektórych innych list, które łączyły się lub były z nimi powiązane) i, jak dotąd, wydaje się, że w rozwiązaniu wymagałoby czegoś takiego jak „deinitramfs”: jądro przejmie kontrolę nad deinitramfs tuż przed faktycznym zawieszeniem systemu, aby tmpfs mógł wykonać końcowe czynności czyszczenia (takie jak wyczyszczenie klucza szyfrowania dla rootfów).
Jonas Malaco
Naprawdę chciałbym zobaczyć odpowiedź na to pytanie.
BenAlabaster,

Odpowiedzi:

3

Natknąłem się na ten sam problem, więc spróbowałem przenieść ten sam skrypt, co można zobaczyć tutaj . Po tym nie dotyka żadnej nieulotnej pamięci luksSuspend, więc działa nawet z prawdziwym szyfrowaniem całego dysku zaszyfrowanym / bootowanym. Należy jednak zachować ostrożność - od czasu do czasu może nie działać zgodnie z oczekiwaniami!

Przeniesiony skrypt wykonuje następujące czynności:

  • Stwórz gdzieś ramfsa
  • Wyodrębnij tam zawartość initramfs (w tym skrypt zawieszenia initramfs)
  • Bind zamontowanie odpowiednich katalogów (np /sys, /proc, /dev, /run) aby zamontować ramfs
  • Zatrzymaj wszelkie usługi, które mogą zakłócać (systemd-udevd, systemd-journald)
  • Zamontuj ponownie główny system plików (ext4 lub btrfs) za pomocą nobarrier, aby Linux nie zawiesił się podczas próby przejścia do S3, a następnie zsynchronizuj
  • Chroot na mount initramfs, który ponownie się synchronizuje, uruchamia luksSuspendi uśpia komputer
  • Po przebudzeniu luksResumezamontuj ponownie systemy plików, uruchom ponownie usługi, odmontuj podłączenia mounta w mount initramfs
  • Na koniec odmontuj mount initramfs, aby zwolnić pamięć RAM używaną do plików initramfs

Muszę jeszcze przeprowadzić obszerne testy mojego skryptu, ale wydaje mi się, że działa niezawodnie. Jeśli używasz innego systemu plików (tj. Nie ext4 lub btrfs), możesz napotkać problemy z barierą, więc musisz również zmodyfikować skrypt.

Tak czy inaczej, dobrze jest przetestować i sprawdzić, czy skrypty działają najpierw. Jeśli występują problemy z zawieszaniem się podczas próby wprowadzenia Linuksa do S3 (tj. At echo mem > /sys/power/state), powinieneś być w stanie odzyskać:

  • Przed zawieszeniem otwórz terminal tty lub inny terminal (który będzie dostępny, więc najlepiej tty)
  • Załaduj cryptsetup i odpowiednie biblioteki do pamięci RAM: sudo cryptsetup luksResume anything_here
  • Zawieś za pomocą skryptu
  • Jeśli zawiesza się po chroot (np. starting version xxxW nowym vt wyświetla się po, przełącz się na tty, który otworzyłeś wcześniej i uruchom)sudo cryptsetup luksResume your_luks_device_name_here
  • Jeśli to także zawiesza się, otwórz inny vt i chroot w /run/initramfs:sudo chroot /run/initramfs /bin/ash
  • Spróbuj uruchomić luksResume:cryptsetup luksResume your_luks_device_name_here && exit
  • Komputer powinien następnie zawiesić. Następnie możesz go obudzić, zabić skrypty, jeśli są one nadal uruchomione, odmontować montowania powiązań i /run/initramfs, jeśli to możliwe, zamontować ponownie główny system plików z barierą.
zhongfu
źródło
1

Nie mam doświadczenia z tą konfiguracją, ale wiele osób twierdzi, że odnosi sukcesy. Oto kilka z nich.

dm-crypt z LUKS - Szyfrowanie partycji wymiany
Howto: Całkowicie zaszyfrowany dysk twardy, w tym zawieszenie partycji dysku za pomocą Ubuntu 6.10 Edgy Eft
ubuntu-full-disk-encryption-lvm-luks

Jednak żadne z nich nie używa luksSuspend (co może być powodem, dla którego działają).

harrymc
źródło
Dzięki za linki ... Używam konfiguracji podobnej do ostatniego linku (automatycznie wygenerowanego przez instalator 13.04).
Jonas Malaco,
Do tej pory nie ma luksów, należy wyłączyć, aby usunąć klucze z pamięci ... Niemniej jednak, dzięki za linki! Być może, rozumiejąc, jak skonfigurować to ręcznie, mogę uzyskać wgląd w to, jak używać luksSuspend do wczytywania pamięci RAM.
Jonas Malaco,
1
luksSuspend wydaje się niezwykle trudny w użyciu. Ponieważ zawiesza wszystkie wejścia / wyjścia, potrzebny jest bardzo akrobatyczny skrypt wstrzymujący. Znalazłem tylko jedną historię sukcesu w języku niemieckim, którą można (źle) przetłumaczyć na angielski . Spróbuj użyć go jako szablonu.
harrymc
2
Może być również konieczne użycie dysku RAM i statycznie połączonego narzędzia cryptsetup.
harrymc
1

Spędziłem trochę czasu, pracując nad tym w pełni funkcjonalnym na Ubuntu 15.10. Jeśli próbujesz sprawić, by działało to na ext2, ext3 lub ext4, musisz zaktualizować / etc / fstab, aby zamontować wolumin za pomocą opcji „nobarrier”. W przeciwnym razie sugeruję użycie BTRFS.

Po przygotowaniu systemu plików użyj skryptu tutaj: https://github.com/Microcentillion/ubuntu-lukssuspend

użytkownik569427
źródło