So installieren Sie Ubuntu sowohl mit Festplattenverschlüsselung als auch mit SSD-Caching

10

Ich verwende Ubuntu in einer Unternehmensumgebung und unsere Sicherheitsrichtlinie besagt, dass wir die vollständige Festplattenverschlüsselung verwenden müssen.

Ich habe auch einen Laptop mit einer 32 GB mSATA SSD und 750 GB Spinnrost. Meine aktuelle Installation verwendet bcache, um dies zu nutzen. Die Installation erfolgt nach diesem Verfahren . Dies bietet eine sehr willkommene Leistungssteigerung, ohne dass ich mir Gedanken über das Auffüllen der SSD machen muss.

Dies wird eine große Frage sein. Das Kopfgeld wird vergeben für:

  • Eine klare, zuverlässige Methode zur Durchführung einer Neuinstallation von Ubuntu
    • Jede Veröffentlichung ist akzeptabel, aber 15.04 (Vivid) ist in Ordnung
  • Das gesamte Dateisystem wird verschlüsselt
    • Hier wird bevorzugt, das entsprechende Kontrollkästchen im Standard-Ubiquity-Installationsprogramm zu verwenden (dm-crypt-Verschlüsselung).
  • Das Dateisystem wird auf einer SSD zwischengespeichert
    • Die Kernel-Methode dm-cache / lvmcache finden Sie hier. Hier finden Sie eine Methode, um dies mit Debian Jessie zu tun
    • Der Cache muss ebenfalls gesichert (dh verschlüsselt) sein.
    • Es muss eine klare Erklärung dafür geben, warum der Cache auch verschlüsselt ist

Habe bereits die Methode für Debian Jessie oben ausprobiert, aber sie weigert sich, für mich zu booten. Habe bisher die in den Kommentaren hier beschriebene Methode nicht ausprobiert .

Die veröffentlichten Lösungen werden auf einer VirtualBox-VM mit zwei leeren virtuellen Laufwerken und einer Release-Kopie des 15.04-Desktops (amd64-Release) getestet. Bounty geht zu der ersten Lösung über, die ich zur Neuinstallation meiner eigentlichen Hardware verwende.

Bitte schreiben Sie Ihre Lösung so, als würde sie in das Community-Wiki aufgenommen.


Ich habe das Kopfgeld vergeben - ich denke, es gibt immer noch Potenzial für eine "LUKS-on-LVM" -Lösung, die die Leichtigkeit der genehmigten Antwort darin vereint, nur ein Passwort zu haben und nur Geräte-Mapper-Komponenten zu verwenden.

Adrian
quelle
Soweit ich weiß, möchten Sie lvmcache nicht in der Standard-LVM-Installation von LUKS ubuntu verwenden, da der Cache unverschlüsselt ist.
SolsTiCe
@solsTiCe - Ich habe verstanden, dass lvmcrypt, eine nette, einfache Ebene über dem dm-Cache, auch mit LUKS in Einklang gebracht werden kann (LUKS ist eine andere Device-Mapper-Sache, dm-crypt). Es ist nur wichtig, in welche Richtung um dich herum schichten Dinge
Adrian
Sie sollten verstehen, dass die / boot-Partition mit Sicherheit unverschlüsselt sein muss. bcache war unter Ubuntu 14.04 nicht mit grub kompatibel und ich glaube, das ist es immer noch.
Adam Ryczkowski
@AdamRyczkowski Ja, ich habe diese Konfiguration jetzt. Es ist akzeptabel, aber ich würde eine LUKS-Konfiguration bevorzugen.
Adrian
Ich verstehe nicht, warum LUKS bcache ausschließen würde ... Sie hängen nicht voneinander ab und man kann glücklich übereinander sitzen.
Adam Ryczkowski

Antworten:

7

LVM auf LUKS auf bcache

Hier ist das russische Puppenspiel mit 3 Stapeln / Schichten etwas tiefer ...

Meine ursprüngliche Idee zu dieser Frage war, eine Standard-Ubuntu-Installation mit LVM unter LUKS zu verwenden und sie in ein Bcache- Sicherungsgerät mit Blöcken zu konvertieren, aber bei meinem Test mit LVM funktionierte sie bei mir nicht.

Darüber hinaus ist das Ubuntu-Installationsprogramm ( Ubiquity ) zu eingeschränkt, um in einem im Voraus vorbereiteten Bcache- Gerät installiert zu werden (zumindest mit LUKS auf LVM), sodass wir auf eine Methode zurückgreifen , mit der Dinge manuell ausgeführt werden.

Booten Sie die Live-CD / USB und wählen Sie "Try Ubuntu" und öffnen Sie ein Terminal

Vorinstallieren

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

Installation

Lassen Sie das Terminal geöffnet und führen Sie nun die Installation aus. Wählen Sie beim Partitionieren "Etwas anderes" und geben Sie an

  • Ihre Boot-Partition ( /dev/sda2)
  • Ihre Root-Partition ( /dev/mapper/vg-root)
  • dein Tausch ( /dev/mapper/vg-swap)

und aktivieren Sie das Kontrollkästchen, um Ihre Partitionen zu formatieren

Starten Sie am Ende der Installation nicht neu, sondern klicken Sie einfach auf "Ubuntu weiter testen".

Nach der Installation

In unserem geöffneten Terminal

# 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

Es gibt einen bekannten Fehler beim Neustart von Ubuntu 15.04 von Live CD / USB, sodass Sie möglicherweise einen Neustart / Herunterfahren erzwingen müssen

Prüfen

Nach dem Booten können Sie überprüfen, ob /dev/bcache0es sich tatsächlich um eine LUKS- Partition handelt

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

Dies liegt daran, dass es sich um den Cache Ihrer LUKS-Partition handelt und Sie jetzt über das Gerät /dev/bcache0und niemals über das ursprüngliche Sicherungsgerät ( /dev/sda3hier) auf Ihre Daten zugreifen.

Verweise

http://bcache.evilpiepirate.org/

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

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

Der bcache-Status ist noch nicht offiziell mit den bcache-tools zusammengeführt. Sie können es hier haben: https://gist.github.com/djwong/6343451

[1] Möglicherweise gibt es bessere Möglichkeiten, dies zu löschen

Sonnenwende
quelle
update-initramfs -uk allStellen Sie sicher, dass Sie nach der Erstellung der Crypttab und dem folgenden exitBefehl ausgeführt werden.
Dess
4

LVM auf LUKS + LUKS / dm-Cache

Das Ubuntu-Installationsprogramm verwendet die LVM on LUKS- Konfiguration für die vollständige Festplattenverschlüsselung.

Wenn Sie auch dm-cache / lvmcache verwenden möchten, um die Leistung zu steigern, müssen Sie Ihren Cache-Pool auf einem verschlüsselten Volume ablegen, um die Sicherheit Ihrer Daten zu gewährleisten.

Die Schritte sind

  • Erstellen Sie ein LUKS-Volume auf dem Zielblockgerät
  • Erweitern Sie die Standard-Volume-Gruppe mit dem neuen verschlüsselten LUKS-Volume
  • Erstellen Sie die Cache-Metadaten und Datenvolumes im neuen LUKS-Volume
  • Binden Sie sie als Cache-Pool zusammen
  • Binden Sie diesen Cache-Pool an das Root-Volume
  • Stellen Sie sicher, dass das neue verschlüsselte Volume beim Booten bereitgestellt werden kann, indem Sie es hinzufügen /etc/crypttab
  • Stellen Sie sicher, dass Ihre Boot-Umgebung dm-cache unterstützt

Das folgende Skript enthält ein Beispiel und fügt einem vorhandenen Root-Dateisystem einen verschlüsselten Cache-Pool hinzu. Es wurde für Systeme entwickelt, die die Standardoption für die Festplattenverschlüsselung im Ubuntu-Installationsprogramm verwendet haben. ganze Festplatte partitioniert und verschlüsselt, keine benutzerdefinierten Partitionen usw.

Bitte beachten Sie, dass dieses Skript nur sehr wenig Validierung oder defensive Programmierung enthält. Wenn es Ihr Arbeitssystem zerstört, liegt dies in Ihrer Verantwortung.

Rufen Sie also an:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. Benötigt Wurzel, um zu arbeiten
  2. Führen Sie das Skript in Bash aus
  3. der Skriptname
  4. das Blockgerät, das Sie verwenden möchten (nur mit der gesamten Festplatte getestet)
  5. die Metadatengröße
  6. die Cache-Datengröße

Die Größenparameter sind standardmäßig in MB angegeben: Sie benötigen ein Verhältnis von 1: 1000 Metadaten zum Cache-Speicherplatz (z. B. wenn Ihre Cache-Festplatte 180 GB groß ist, benötigen Sie 180 MB Metadaten-Speicherplatz und 179820 MB Datenspeicherplatz Metadaten etwas höher, um vorsichtig zu sein. Es gibt eine Untergrenze für die Metadaten von 8M.)

Sie werden aufgefordert, ein Kennwort für Ihr Cache-Volume einzugeben. Während des Startvorgangs werden Sie aufgefordert, die Kennwörter für BEIDE Festplatten einzugeben.

Verweise


#! / bin / bash
#
# lvmcryptocache
#
# Fügen Sie einen LVM-Cache-Pool hinzu und hängen Sie ihn an das Root-Volume an
# Einschließlich LUKS-Verschlüsselung
# Angenommen, Sie verwenden ein "All-on-Root" -Setup
# Wenn nicht, passen Sie es an, wenn Sie möchten
#
# Skriptlizenzierte GPL3 oder höher
# © Adrian Wilkins Mai 2015
#
# Übergeben Sie den Namen des Festplattengeräts, das Sie als Cache verwenden
# Dies sollte idealerweise völlig leer sein, also laufen
#
# dd if = / dev / zero von = / dev / $ {DISK}
#
# kurz darüber, um die Partitionstabelle zu zerstören

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

DISK_NAME = $ (Basisname $ CACHE_DISK)

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

# Erstellen Sie ein LUKS-Volume auf der Raw-Festplatte

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

# Ich habe angefangen, Dinge mit Festplattengröße herauszufinden, aber es ist komplex
# Probieren Sie es aus, wenn Sie möchten, mir sind immer wieder die Ausmaße ausgegangen
#
# 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))
# 

# Erstellen Sie eine neue PV in einem verschlüsselten Volume

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n zwischengespeicherte Daten ubuntu-vg $ CACHE_PV
lvconvert --type cache-pool --poolmetadata ubuntu-vg / cachemeta --cachemode schreibt durch ubuntu-vg / cachedata --yes
lvconvert --type cache --cachepool ubuntu-vg / cachedata ubuntu-vg / root

# Fügen Sie nun die UUID des CYS-Pools PHYSICAL DRIVE (/ dev / sdb) zu / etc / crypttab hinzu
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} keine luks, verwerfen" >> / etc / crypttab

apt-get install - ja, Thin-Provisioning-Tools

HOOK = $ (tempfile)
# Fügen Sie initramfs ein Hook-Skript hinzu, um die richtigen Tools und Module hinzuzufügen

echo "#! / bin / sh"> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo "prereqs ()" >> $ HOOK
echo "{" >> $ HOOK
echo "echo" $ PREREQ ">> $ HOOK
echo "}" >> $ HOOK
Echo "Fall $ 1 in" >> $ HOOK
echo "prereqs)" >> $ HOOK
echo "prereqs" >> $ HOOK
echo "exit 0" >> $ HOOK
Echo ";;" >> $ HOOK
echo "esac" >> $ HOOK
echo "if [! -x / usr / sbin / cache_check]; dann" >> $ HOOK
echo "exit 0" >> $ HOOK
echo "fi" >> $ HOOK
echo ". / usr / share / initramfs-tools / hook-Funktionen" >> $ 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

# Initramfs aktualisieren

update-initramfs -u

echo Jetzt neu starten!
Adrian
quelle
1. Sie schlagen vor, Ihre Cache-Festplatte mit Null zu leeren. Stattdessen sollten Sie sie sicher mit zufälligen Daten löschen, wenn Sie ein verschlüsseltes LUKS darauf platzieren möchten. 2. In Ihrem Setup haben Sie 2 LUKS-Partitionen. Selbst wenn Sie dieselbe Passphrase verwenden, müssen Sie sie zweimal eingeben, oder?
SolsTiCe
1. Das zufällige Löschen von Datenträgern ist auf moderner Hardware etwas veraltet - Nullen reichen aus, um den Datenträger über die meisten nicht-akademischen Maßnahmen hinaus und sicherlich über kommerzielle Labors zur Wiederherstellung von Datenträgern hinaus zu bringen. Es sei denn , das Volumen verwenden Sie zuvor sensible Daten gehalten werden , ist es nicht notwendig , da alle die darauf geschrieben Blöcke verschlüsselt; Aufgrund von Verschleißausgleichsalgorithmen sollten Sie keine SSD verwenden, auf der sich überhaupt klartextempfindliche Daten befinden. 2. Ja, es gibt 2 LUKS-Partitionen, wie ich im Text sage, werden Sie beim Booten zur Eingabe beider Passphrasen aufgefordert.
Adrian
Das zufällige Löschen dient NICHT dazu, Daten auf der SSD sicher zu löschen, sondern eine Überprüfung zu vermeiden und verschlüsselte Daten von leeren Daten wie 00000000zerazer000000000000 zu unterscheiden. Hier sehen Sie die verschlüsselten Daten in der Mitte. Dies schwächt Ihre Verschlüsselung, anstatt sie mitten in einer zufälligen Suppe zu verstecken.
SolsTiCe
Am Ende habe ich mich für diese Route entschieden, nachdem ich beim Einrichten von bcache feststeckte. Es sieht so aus, als ob es ziemlich gut funktioniert : | cache_utilization_pct | 79.096846147 |. Allerdings topsehe ich in Iowait ständig 20-50%. Könnte das ein Nebeneffekt der Pufferung sein?
Jean Jordaan
Ich kann nicht wirklich behaupten, es zu wissen - aber ich vermute, es könnte ein Nebeneffekt der Optimierungen sein, die mit der Minimierung von Schreibvorgängen auf die SSD verbunden sind. Artikel über IOWait hier: thattommyhall.com/2011/02/18/iops-linux-iostat
Adrian