Jak zainstalować Ubuntu z szyfrowaniem dysku i buforowaniem SSD

10

Używam Ubuntu w środowisku korporacyjnym, a nasza polityka bezpieczeństwa mówi, że musimy używać pełnego szyfrowania dysku.

Mam też laptopa z 32 GB mSATA SSD i 750 GB wirującej rdzy. Moja bieżąca instalacja używa bcache, aby to wykorzystać, zainstalowana zgodnie z tą procedurą . Zapewnia to bardzo pożądany wzrost wydajności bez konieczności martwienia się o zapełnienie dysku SSD.

To będzie szczere pytanie. Nagroda zostanie przyznana za:

  • Jasna, niezawodna metoda przeprowadzenia nowej instalacji Ubuntu
    • Każde wydanie jest dopuszczalne, ale 15.04 (Vivid) będzie w porządku
  • Cały system plików zostanie zaszyfrowany
    • Preferowane jest użycie odpowiedniego pola wyboru w domyślnym programie instalacyjnym Ubiquity (szyfrowanie dm-crypt)
  • System plików będzie buforowany na dysku SSD
    • Aby zapoznać się z preferencjami, metoda jądra dm-cache / lvmcache znajduje się tutaj, aby dowiedzieć się, jak to zrobić za pomocą Debian Jessie
    • Pamięć podręczna musi być również zabezpieczona (tj. Zaszyfrowana)
    • Musi istnieć jasne wyjaśnienie, dlaczego pamięć podręczna jest również szyfrowana

Próbowałem już powyższej metody dla Debiana Jessie, ale nie uruchamia się ona dla mnie. Do tej pory nie wypróbowałem metody opisanej w komentarzach tutaj .

Opublikowane rozwiązania zostaną przetestowane na maszynie wirtualnej VirtualBox z dwoma pustymi dyskami wirtualnymi i kopią wersji 15.04 pulpitu (wersja amd64). Bounty przechodzi do pierwszego rozwiązania, które zastosowałem w celu ponownej instalacji mojego sprzętu.

Napisz swoje rozwiązanie tak, jakby trafiało na wiki społeczności.


Przyznałem nagrodę - myślę, że nadal istnieje potencjał rozwiązania „LUKS-on-LVM”, które łączy łatwość zatwierdzonej odpowiedzi w postaci tylko jednego hasła, przy użyciu tylko komponentów mapujących urządzenia.

Adrian
źródło
Z tego, co rozumiem, nie chcesz używać lvmcache w domyślnej LVM na instalacji LUKS ubuntu, ponieważ pamięć podręczna będzie niezaszyfrowana.
Przesilenie
@solsTiCe - rozumiałem, że lvmcrypt, będący ładną, łatwą warstwą na dm-cache, powinien być również możliwy do uzgodnienia z LUKS (LUKS jest kolejną rzeczą mapującą urządzenie, dm-crypt), ma to tylko znaczenie, w którą stronę wokół ciebie warstwy rzeczy
Adrian
Powinieneś zrozumieć, że partycja / boot z pewnością będzie musiała być niezaszyfrowana. bcache nie był kompatybilny z grub na Ubuntu 14.04 i myślę, że nadal tak jest.
Adam Ryczkowski
@AdamRyczkowski Tak, mam już tę konfigurację. Jest do przyjęcia, ale wolałbym konfigurację LUKS.
Adrian
Nie rozumiem, dlaczego LUKS wyklucza bcache ... Nie są od siebie zależni i jeden może szczęśliwie siedzieć jeden na drugim.
Adam Ryczkowski

Odpowiedzi:

7

LVM na LUKS na bcache

Tutaj rosyjska gra lalek jest nieco głębsza z 3 stosami / warstwami ...

Mój początkowy pomysł na to pytanie polegał na użyciu domyślnej instalacji Ubuntu z LVM na LUKS i przekonwertowaniu go na urządzenie do tworzenia kopii zapasowych bcache z blokami, ale nie zadziałało to w moim teście z LVM.

Co więcej, instalator ubuntu ( ubiquity ) jest zbyt ograniczony, aby zainstalować go w przygotowanym wcześniej urządzeniu bcache (przynajmniej z LUKS na LVM), więc powróciliśmy do metody ręcznego wykonywania czynności.

Uruchom komputer na żywo CD / USB i wybierz „Wypróbuj Ubuntu” i otwórz terminal

Wstępnie zainstaluj

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

Instalacja

Pozostaw terminal otwarty, a teraz uruchom instalację. Wybierz „Coś innego” podczas partycjonowania i określ

  • twoja partycja rozruchowa ( /dev/sda2)
  • twoja partycja root ( /dev/mapper/vg-root)
  • twoja zamiana ( /dev/mapper/vg-swap)

i zaznacz pole wyboru, aby sformatować partycje

Pod koniec instalacji nie uruchamiaj ponownie komputera, ale po prostu kliknij „Kontynuuj próbę Ubuntu”

Po instalacji

W naszym otwartym terminalu

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

Znany jest błąd ponownego uruchamiania Ubuntu 15.04 z Live CD / USB, więc może być konieczne wymuszenie ponownego uruchomienia / zamknięcia

Czek

Po uruchomieniu możesz sprawdzić, /dev/bcache0czy faktycznie jest to partycja LUKS

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

Wynika to z faktu, że jest to pamięć podręczna partycji LUKS, a teraz masz dostęp do swoich danych za pośrednictwem urządzenia, /dev/bcache0a nigdy z oryginalnego urządzenia podkładowego ( /dev/sda3tutaj)

Bibliografia

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

Status bcache nie jest jeszcze oficjalnie scalony w narzędzia bcache. Możesz go mieć tutaj: https://gist.github.com/djwong/6343451

[1] Nie może być lepsze sposoby wykonywania tego wycierania

przesilenie dnia z nocą
źródło
Pamiętaj, aby uruchomić update-initramfs -uk allpo utworzeniu crypttab i wykonaniu exitpolecenia.
dess
4

LVM na LUKS + LUKS / dm-cache

Instalator Ubuntu używa LVM w konfiguracji LUKS do pełnego szyfrowania dysku.

Jeśli chcesz także użyć dm-cache / lvmcache w celu zwiększenia wydajności, musisz umieścić swoją pulę pamięci podręcznej w zaszyfrowanym woluminie, aby zachować bezpieczeństwo danych.

Kroki są

  • Utwórz wolumin LUKS na docelowym urządzeniu blokowym
  • Rozszerz domyślną grupę woluminów o nowy zaszyfrowany wolumin LUKS
  • Utwórz metadane pamięci podręcznej i woluminy danych w nowym wolumenie LUKS
  • Połącz je razem jako pulę pamięci podręcznej
  • Powiąż tę pulę pamięci podręcznej z woluminem głównym
  • Upewnij się, że nowy zaszyfrowany wolumin można zamontować podczas rozruchu, dodając go do /etc/crypttab
  • Upewnij się, że środowisko rozruchowe obsługuje pamięć podręczną DM

Poniższy skrypt stanowi przykład i doda zaszyfrowaną pulę pamięci podręcznej do istniejącego głównego systemu plików. Został zaprojektowany dla systemów, które korzystały z domyślnej opcji szyfrowania dysku w instalatorze Ubuntu - tj. cały dysk podzielony na partycje i zaszyfrowany, bez niestandardowych partycji itp.

Należy pamiętać, że w tym skrypcie jest bardzo mało sprawdzania poprawności lub programowania obronnego. Odpowiedzialność za zniszczenie działającego systemu spoczywa na tobie.

Zadzwoń w ten sposób:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. Potrzebuje root do pracy
  2. uruchom skrypt w bash
  3. nazwa skryptu
  4. urządzenie blokowe, którego chcesz użyć (testowane tylko z całym dyskiem)
  5. rozmiar metadanych
  6. rozmiar danych pamięci podręcznej

Parametry rozmiaru są domyślnie w MB: będziesz potrzebował stosunku 1: 1000 miejsca na metadane do miejsca w pamięci podręcznej (np. Jeśli twój dysk podręczny ma 180 GB, potrzebujesz 180 MB miejsca na metadane i 179820 MB miejsca na dane - możesz zaokrąglić metadane nieco się zwiększają, aby zachować ostrożność. Istnieje dolny limit metadanych 8M).

Zostaniesz poproszony o podanie hasła do woluminu pamięci podręcznej - podczas uruchamiania zostaniesz poproszony o podanie hasła DO OBU dysków.

Bibliografia


#! / bin / bash
#
# lvmcryptocache
#
# Dodaj pulę pamięci podręcznej LVM i podłącz ją do woluminu głównego
# Łącznie z szyfrowaniem LUKS
# Zakłada, że ​​używasz konfiguracji „wszystko na root”
# Jeśli nie, dostosuj go, jeśli chcesz
#
# Skrypt na licencji GPL3 lub nowszy
# © Adrian Wilkins, maj 2015 r
#
# Przekaż nazwę urządzenia dyskowego, którego używasz jako pamięci podręcznej
# Idealnie powinno być całkowicie puste, więc biegnij
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# przez chwilę, aby nuke tabeli partycji

CACHE_DISK = 1 USD
META_SIZE = 2 USD
DATA_SIZE = 3 USD

DISK_NAME = $ (basename $ CACHE_DISK)

CRYPT_VOLUME = $ {DISK_NAME} _crypt
CACHE_PV = / dev / mapper / $ {CRYPT_VOLUME}

# Utwórz wolumin LUKS na dysku surowym

cryptsetup luksFormat $ CACHE_DISK
cryptsetup open --typ luks $ CACHE_DISK $ CRYPT_VOLUME

# Rozpoczęto próby ustalenia wielkości dysku, ale jest to skomplikowane
# Spróbuj, jeśli chcesz, ciągle mi brakowało
#
# DISK_SIZE = $ (fdisk -l | grep "Dysk $ {CACHE_DISK}" | awk '{print $ 5}')
# 
# META_SIZE = $ ((DISK_SIZE / 1000))
# META_SIZE = $ ((META_SIZE + 512))
# MOD = $ ((META_SIZE% 512))
# MOD_OFFSET = $ ((512 - MOD))
# META_SIZE = $ ((META_SIZE + 512)) 
# META_SIZE = $ ((META_SIZE + MOD_OFFSET))
# 
# DATA_SIZE = $ ((DISK_SIZE - META_SIZE))
# 

# Utwórz nowe PV w zaszyfrowanym woluminie

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n cachedata ubuntu-vg $ CACHE_PV
lvconvert --typ cache-pool --poolmetadata ubuntu-vg / cachemeta --cachemode writethrough ubuntu-vg / cachedata - tak
lvconvert - typ cache - cachepool ubuntu-vg / cachedata ubuntu-vg / root

# Teraz dodaj UUID puli pamięci podręcznej NAPĘD FIZYCZNY (/ dev / sdb) do / etc / crypttab
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} brak luksów, odrzuć" >> / etc / crypttab

apt-get install - tak cienkie narzędzia do przydzielania

HOOK = $ (plik tymczasowy)
# Dodaj skrypt hook do initramfs, aby dodać odpowiednie narzędzia i moduły

echo „#! / bin / sh”> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo „prereqs ()” >> $ HOOK
echo „{” >> $ HOOK
echo "echo \" $ PREREQ \ "" >> $ HAK
echo "}" >> $ HOOK
echo „case $ 1 in” >> $ HOOK
echo „wymagania wstępne” >> $ HOOK
echo „wymagania wstępne” >> $ HOOK
echo „wyjście 0” >> $ HAK
Echo " ;;" >> $ HAK
echo „esac” >> $ HOOK
echo "jeśli [! -x / usr / sbin / cache_check]; następnie" >> $ HOOK
echo „wyjście 0” >> $ HAK
echo „fi” >> $ HAK
echo ". / usr / share / initramfs-tools / hook-functions" >> $ HOOK
echo „copy_exec / usr / sbin / cache_check” >> $ HOOK
echo "manual_add_modules dm_cache dm_cache_mq dm_persistent_data dm_bufio" >> $ HOOK

cp $ HOOK / etc / initramfs-tools / hooks / lvmcache
chmod + x / etc / initramfs-tools / hooks / lvmcache

echo „dm_cache” >> / etc / initramfs-tools / modules
echo "dm_cache_mq" >> / etc / initramfs-tools / modules
echo "dm_persistent_data" >> / etc / initramfs-tools / modules
echo „dm_bufio” >> / etc / initramfs-tools / modules

# Zaktualizuj initramfs

update-initramfs -u

echo Teraz uruchom ponownie!
Adrian
źródło
1. Sugerujesz wyczyścić dysk pamięci podręcznej zerem, ale zamiast tego powinieneś bezpiecznie usunąć go losowymi danymi, jeśli chcesz umieścić na nim zaszyfrowany plik LUKS. 2. W konfiguracji masz 2 partycje LUKS, więc nawet jeśli używasz tego samego hasła, musisz je wprowadzić dwa razy, prawda?
solsTiCe
1. Losowe czyszczenie dysku jest nieco przestarzałe na współczesnym sprzęcie - zera wystarczą, aby umieścić dysk poza większością miar nieakademickich i na pewno poza komercyjnymi laboratoriami odzyskiwania dysku. Chyba objętości używasz uprzednio posiadanych danych poufnych, to niepotrzebne, gdyż wszystkie bloki zapisane na nim będą szyfrowane; z powodu algorytmów wyrównywania zużycia nie powinieneś używać dysku SSD, który zawiera w ogóle dane wrażliwe na tekst. 2. Tak, istnieją 2 partycje LUKS, jak mówię w tekście, podczas uruchamiania pojawi się monit o podanie obu haseł.
Adrian
losowe czyszczenie NIE służy do bezpiecznego usuwania danych z dysku SSD, ale do uniknięcia kontroli i możliwości odróżnienia zaszyfrowanych danych od pustych, takich jak 00000000zerazer000000000000. Tutaj możesz zobaczyć zaszyfrowane dane w środku. osłabi to twoje szyfrowanie zamiast ukrywania go w środku losowej zupy.
solsTiCe
Skończyłem z tą trasą po tym, jak utknąłem przy konfigurowaniu pamięci podręcznej. Wygląda na to, że działa całkiem dobra: | cache_utilization_pct | 79.096846147 |. Jednak topciągle widzę stany iowait 20-50%. Czy może to być efekt uboczny buforowania?
Jean Jordaan,
Naprawdę nie mogę twierdzić, że wiem - ale przypuszczam, że może to być efekt uboczny optymalizacji związanych z minimalizacją zapisów na dysku SSD. Artykuł o IOWait tutaj: thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian