Cara menginstal Ubuntu dengan enkripsi disk dan cache SSD

10

Saya menggunakan Ubuntu di lingkungan perusahaan, dan kebijakan keamanan kami menyatakan bahwa kami harus menggunakan enkripsi disk lengkap.

Saya juga punya laptop dengan SSD mSATA 32GB dan karat berputar 750GB. Instalasi saya saat ini menggunakan bcache untuk memanfaatkan ini, diinstal menggunakan prosedur ini . Ini memberikan peningkatan kinerja yang sangat disambut tanpa saya harus khawatir tentang mengisi SSD.

Ini akan menjadi pertanyaan berharga. Hadiah akan diberikan untuk:

  • Metode yang jelas dan andal dalam melakukan instalasi baru Ubuntu
    • Setiap rilis dapat diterima tetapi 15,04 (Jelas) akan baik-baik saja
  • Seluruh sistem file akan dienkripsi
    • Preferensi di sini adalah menggunakan kotak centang yang relevan di program penginstal Ubiquity default (enkripsi dm-crypt)
  • Sistem file akan di-cache pada SSD
    • Untuk preferensi, metode kernel dm-cache / lvmcache lihat di sini untuk metode untuk melakukan ini dengan Debian Jessie
    • Cache juga harus diamankan (yaitu dienkripsi)
    • Harus ada penjelasan yang jelas mengapa cache juga dienkripsi

Sudah mencoba metode untuk Debian Jessie di atas, tetapi menolak untuk boot untuk saya. Belum sejauh ini mencoba metode yang dijelaskan dalam komentar di sini .

Solusi yang dipasang akan diuji pada VM VirtualBox dengan dua disk virtual kosong dan salinan rilis desktop 15,04 (rilis amd64). Bounty pergi ke solusi pertama yang saya adopsi untuk menginstal ulang perangkat keras saya yang sebenarnya.

Silakan tulis solusi Anda seolah-olah masuk ke komunitas wiki.


Saya telah memberikan hadiah - saya pikir masih ada potensi untuk solusi "LUKS-on-LVM" yang menggabungkan kemudahan jawaban yang disetujui hanya dengan memiliki satu kata sandi, dengan hanya menggunakan komponen perangkat-mapper.

Adrian
sumber
Dari apa yang saya mengerti, Anda tidak ingin menggunakan lvmcache di LVM default di LUKS instal ubuntu karena cache tidak akan dienkripsi.
solsTiCe
@solsTiCe - itu adalah pemahaman saya bahwa lvmcrypt, menjadi lapisan mudah yang bagus di atas dm-cache, harus dimungkinkan untuk berdamai dengan LUKS juga (LUKS menjadi perangkat lain-mapper, dm-crypt), itu hanya masalah ke arah mana sekitar Anda lapisan hal
Adrian
Anda harus mengerti, bahwa partisi / boot pasti harus dienkripsi. bcache tidak kompatibel dengan grub di Ubuntu 14.04 dan saya yakin masih.
Adam Ryczkowski
@AdamRyczkowski Ya, saya memiliki konfigurasi itu sekarang. Ini dapat diterima tetapi saya lebih suka konfigurasi LUKS.
Adrian
Saya tidak melihat mengapa LUKS akan mengecualikan bcache ... Mereka tidak saling bergantung dan satu dapat dengan senang hati duduk di atas yang lain.
Adam Ryczkowski

Jawaban:

7

LVM pada LUKS di bcache

Di sini permainan boneka rusia sedikit lebih dalam dengan 3 tumpukan / lapisan ...

Gagasan awal saya tentang pertanyaan ini adalah menggunakan instalasi Ubuntu default dengan LVM pada LUKS dan mengubahnya menjadi perangkat dukungan bcache dengan blok tetapi tidak bekerja untuk saya pada pengujian dengan LVM.

Selain itu, penginstal ubuntu ( ubiquity ) terlalu terbatas untuk menginstal di dalam perangkat bcache yang disiapkan sebelumnya (setidaknya dengan LUKS di LVM), jadi kami mundur ke metode melakukan sesuatu secara manual.

Boot ke live CD / USB dan pilih "Coba Ubuntu" dan buka terminal

Pra-instal

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

Instalasi

Biarkan terminal terbuka dan sekarang jalankan instalasi. Pilih "Sesuatu yang lain" saat mempartisi dan menentukan

  • partisi boot Anda ( /dev/sda2)
  • partisi root Anda ( /dev/mapper/vg-root)
  • swap Anda ( /dev/mapper/vg-swap)

dan centang kotak centang untuk memformat partisi Anda

Pada akhir instalasi, jangan reboot tetapi cukup klik "Lanjutkan mencoba ubuntu"

Pasca-instal

Di terminal kami yang terbuka

# 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

Ada bug reboot Ubuntu 15.04 yang diketahui dari Live CD / USB sehingga Anda mungkin harus memaksa reboot / shutdown

Memeriksa

Setelah di-boot, Anda dapat memeriksa apakah /dev/bcache0itu sebenarnya adalah partisi LUKS

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

Ini karena ini adalah cache dari partisi LUKS Anda, dan sekarang Anda mengakses data Anda melalui perangkat /dev/bcache0dan tidak pernah dari perangkat dukungan asli (di /dev/sda3sini)

Referensi

http://bcache.evilpiepirate.org/

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

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

bcache-status belum secara resmi bergabung ke dalam bcache-tools. Anda dapat memilikinya di sini: https://gist.github.com/djwong/6343451

[1] Mungkin ada cara yang lebih baik untuk melakukan ini menyeka

titik balik matahari
sumber
Pastikan untuk menjalankan update-initramfs -uk allsetelah pembuatan crypttab dan mengikuti exitperintah.
dess
4

LVM pada LUKS + LUKS / dm-cache

Penginstal Ubuntu menggunakan konfigurasi LVM pada LUKS untuk enkripsi disk lengkapnya.

Jika Anda juga ingin menggunakan dm-cache / lvmcache untuk meningkatkan kinerja, Anda perlu menempatkan kumpulan cache Anda ke dalam volume yang dienkripsi untuk menjaga keamanan data Anda.

Langkah-langkahnya adalah

  • Buat volume LUKS pada perangkat blok target
  • Perpanjang grup volume default dengan volume LUKS terenkripsi baru
  • Buat metadata cache dan volume data dalam volume LUKS baru
  • Ikatkan keduanya sebagai kumpulan cache
  • Bind cache pool ini ke volume root
  • Pastikan volume terenkripsi baru dapat dipasang pada saat boot dengan menambahkannya /etc/crypttab
  • Pastikan bahwa lingkungan boot Anda mendukung dm-cache

Skrip di bawah ini memberikan contoh, dan akan menambahkan kumpulan cache terenkripsi ke sistem file root yang ada. Itu dirancang untuk sistem yang telah menggunakan opsi enkripsi disk default di installer Ubuntu - yaitu; seluruh disk dipartisi dan dienkripsi, tidak ada partisi khusus dll.

Harap perhatikan bahwa sangat sedikit validasi atau pemrograman defensif dalam skrip ini. Jika itu merusak sistem kerja Anda, itu adalah tanggung jawab Anda.

Sebut demikian:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. Perlu root untuk bekerja
  2. jalankan skrip di bash
  3. nama skrip
  4. perangkat blok yang ingin Anda gunakan (hanya diuji dengan seluruh disk)
  5. ukuran metadata
  6. ukuran data cache

Parameter ukuran secara default di MB: Anda akan membutuhkan rasio 1: 1000 ruang metadata ke ruang cache (mis. Jika disk cache Anda adalah 180GB, Anda membutuhkan 180 MB ruang metadata dan 179820MB ruang data - Anda mungkin ingin membulatkan metadata sedikit untuk berhati-hati. Ada batas bawah untuk metadata 8M.)

Anda akan dimintai kata sandi untuk volume cache Anda - Anda akan diminta kata sandi untuk KEDUA disk Anda saat boot.

Referensi


#! / bin / bash
#
# lvmcryptocache
#
# Tambahkan kumpulan cache LVM dan pasang ke volume root
# Termasuk enkripsi LUKS
# Asumsikan Anda menggunakan pengaturan "semua di root"
# Jika tidak, sesuaikan jika mau
#
# Script berlisensi GPL3 atau lebih baru
# © Adrian Wilkins Mei 2015
#
# Masukkan nama perangkat disk yang Anda gunakan sebagai cache
# Ini idealnya benar-benar kosong, jadi jalankan
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# atasnya untuk sementara waktu untuk nuke tabel partisi

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $ (nama samaran $ CACHE_DISK)

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

# Buat volume LUKS dalam disk mentah

cryptsetup luksFormat $ CACHE_DISK
cryptsetup buka --type luks $ CACHE_DISK $ CRYPT_VOLUME

# Mulai mencoba dan mengerjakan hal-hal ukuran disk tetapi rumit
# Selamat mencoba jika Anda suka, saya terus kehabisan luasan
#
# DISK_SIZE = $ (fdisk -l | grep "Disk $ {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))
# 

# Buat PV baru di dalam volume terenkripsi

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 --type cache-pool --poolmetadata ubuntu-vg / cachemeta --cachemode ditulis melalui ubuntu-vg / cachedata --ya
lvconvert --type cache --cachepool ubuntu-vg / cachedata ubuntu-vg / root

# Sekarang tambahkan UUID dari cache pool PHIVEICAL DRIVE (/ dev / sdb) ke / etc / crypttab
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} tidak ada luks, buang" >> / etc / crypttab

apt-get install --yes thin-provisioning-tools

HOOK = $ (tempfile)
# Tambahkan skrip kait ke initramfs untuk menambahkan alat dan modul yang tepat

echo "#! / bin / sh"> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo "prereqs ()" >> $ HOOK
echo "{" >> $ HOOK
echo "echo \" $ PREREQ \ "" >> $ HOOK
echo "}" >> $ HOOK
gema "case $ 1 in" >> $ HOOK
echo "prereqs)" >> $ HOOK
gema "prereqs" >> $ HOOK
gema "keluar 0" >> $ HOOK
gema ";;" >> $ HOOK
gema "esac" >> $ HOOK
echo "if [! -x / usr / sbin / cache_check]; lalu" >> $ HOOK
gema "keluar 0" >> $ HOOK
echo "fi" >> $ HOOK
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

# Perbarui initramfs

perbarui-initramfs -u

echo Sekarang reboot!
Adrian
sumber
1. Anda menyarankan untuk mengosongkan disk cache Anda dengan nol tetapi sebaliknya Anda harus menghapusnya dengan aman dengan data acak jika Anda ingin menempatkan LUKS terenkripsi di atasnya. 2. Dalam pengaturan Anda, Anda memiliki 2 partisi LUKS jadi bahkan jika Anda menggunakan kata sandi yang sama Anda harus memasukkannya dua kali, kan?
solsTiCe
1. Penghapusan disk acak agak ketinggalan jaman pada perangkat keras modern - nol cukup untuk menempatkan disk melampaui sebagian besar langkah-langkah tingkat non-akademik dan tentu saja di luar laboratorium pemulihan disk komersial. Kecuali jika volume yang Anda gunakan menggunakan data sensitif yang dipegang sebelumnya , itu tidak perlu karena semua blok yang ditulis untuknya akan dienkripsi; karena algoritme tingkat-pakai Anda tidak boleh menggunakan SSD yang memiliki data sensitif plaintext sama sekali. 2. Ya, ada 2 partisi LUKS, seperti yang saya katakan dalam teks, Anda akan diminta untuk kedua frasa sandi saat boot.
Adrian
penghapusan acak TIDAK untuk menghapus data dengan aman pada SSD tetapi untuk menghindari pengawasan dan mampu membedakan data yang dienkripsi dari kosong seperti 00000000zerazer00000000000000. Di sini Anda dapat melihat data terenkripsi di tengah. ini melemahkan enkripsi Anda bukannya disembunyikan di tengah sup acak.
solsTiCe
Saya akhirnya pergi dengan rute ini setelah saya terjebak mengatur bcache. Sepertinya itu bekerja cukup bagus: | cache_utilization_pct | 79.096846147 |. Namun topsaya melihat iowait menyatakan 20-50% terus-menerus. Mungkinkah itu efek samping dari buffering?
Jean Jordaan
Saya benar-benar tidak bisa mengklaim tahu - tetapi saya menduga itu mungkin merupakan efek samping dari optimasi yang terlibat dalam meminimalkan penulisan ke SSD. Artikel tentang IOWTunggu di sini: thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian