Dieses HowTo zeigt die Verschlüsselung eines GNU/Linux unter Verwendung von dm-crypt (implementiert im Paket cryptsetup), LUKS und LVM.
Ich habe hier auf lange Erklärungen der Grundlagen verzichtet, wer mehr erfahren möchte dem seien die Dokumentationen zu cryptsetup/dm-crypt, dem Devicemapper des Linuxkernels, LUKS und LVM empfohlen.
Anmerkung: Die installer der meisten großen Distributionen wie CentOS,RHEL,Fedora,Debian,*buntu bieten Verschlüsselung schon während der Installation an.
Namen müssen ggf. an Euere Partitionslayout angepasst werden.
Auch wenn ich den Inhalt gründlich geprüft habe, müsst ihr selber mitdenken und für Backups sorgen, an Datenverlusten bin ich nicht schuld!
Szenarian
Verschlüsselter „Container“
Einzelne verschlüsselte Partition
Nachträgliches Verschlüsseln des Betriebssystems
Verschlüsselter Container
Dazu muss der Container zunächst erstellt werden und loopback gemountet werden
Erzeugen des Containers
Code:
dd if=/dev/urandom of=container bs=1M count=10
Durch ändern von bs und count lässt sich die größe des „Containers“ festlegen. Mit diesen Einstellungen werden 10 mal 1Megabyte geschrieben also 10 Mb.
Loopback mounten (Mit Loopback können, vereinfacht, Dateien als Laufwerk gemountet werden)
Code:
losetup /dev/loop0 container
Verschlüsseltes LUKS Medium erzeugen und unter dem Namen „test“ öffnen
Code:
cryptsetup luksFormat /dev/loop0
cryptsetup luksOpen /dev/loop0 test
Ext3-Dateisystem im Container erzeugen
Code:
mkfs.ext3 /dev/mapper/test
Container mounten:
Code:
mount /dev/mapper/test /mnt/test/
Einen bestehenden Container mounten:
Code:
losetup /dev/loop/0 test
cryptsetup luksOpen /dev/loop/0 test
mount /dev/mapper/test /mnt/test/
Anmerkung: Die Rechte für den Mountpoint müssen ggf noch angepasst werden, damit auch nicht-rootuser darauf zugrifen können.
Einzelne Verschlüsselte Partition:
!Achtung! Hier geht es um das Verschlüsseln einer Partition die nicht zum Booten des Betriebssystems gebraucht wird, beispielsweise einer externen Festplatte o.ä. Da beim Verschlüsseln alle Daten auf der Partition verloren gehen muss vorher ein Backup angelegt werden.
Überschreiben der Partition mit zufälligen Daten:
Code:
shred -n1 -v /dev/sdb1
dd if=/dev/urandom of=/dev/sdb1
Verschlüsseltes LUKS Medium erzeugen und unter dem Namen test öffnen:
Code:
cryptsetup luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 test
Ext3-Dateisystem erzeugen:
Code:
mkfs.ext3 /dev/mapper/test
Partition mounten:
Code:
mount /dev/mapper/test /mn/test
Nachträgliches verschlüsseln des Betriebssystems:
Vorraussetzungen: Auf eurem System müssen die Pakete lvm2 und cryptsetup installiert sein. Außerdem benötigt ihr eine LiveCD.
Das Vorgehen um ein System nachträglich zu verschlüsseln ist zusammengefasst folgendes:
- Backup des existierenden Systems
- Erstellen der neuen verschlüsselten Partition(en)
- Wiederherstellen des Backups auf die verschlüsselte(n) Partition(en)
- Modifizieren des Betriebssystems
Backup
Zunächst legt ihr euch ein Backup eures Systems an. Überprüft euer Backup,denn ab jetzt werden alle Daten gelöscht. Verwendet dazu am besten die LiveCD und Rsync.
Bootet von der Livecd, öffnet einen Terminal:
Partition mit Zufallsdaten füllen
Code:
shred -n1 -v /dev/sdb
dd if =/dev/urandom of=/dev/sdb
Festplatte neu partitionieren (kann je nach existierendem Layout entfallen):
Code:
fdisk /dev/sdb
/dev/sdb1 *
/dev/sdb2
(sdb1 ist die Bootfähige Partition, gekennzeichnet in fdisk durch den *)
Verschlüsseltes LUKS Medium erzeugen und unter dem Namen „sdb2crypto“ öffnen:
Code:
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 sdb2crypto
Ab hier gibt es zwei Möglichkeiten die Partitionen einzurichten. Die erste ist ein LVM Setup auf der verschlüsselten Partition zu erzeugen und darin eine / und swap Partition. Dies entspricht der
Konfiguration wie man sie meistens nach der Verschlüsselung während der Installation vorfindet.
Die zweite Möglichkeit wäre die Einrichtung der Partitionen ohne LVM.
Möglichkeit 1:
LVM Setup auf der verschlüsselten Partition erzeugen:
Code:
pvcreate /dev/mapper/sdb2crypto
vgcreate crypto /dev/mapper/sdb2crypto
lvcreate -L2000 -nswap_1 crypto
vgdisplay crypto | grep „Free PE“
lvcreate -l****** -nroot crypto
vgchange -a -y crypto
Die ****** ersetzt ihr durch den Wert den ihr nach dem Ausführen von
vgdisplay crypto | grep „Free PE“
erhaltet.
Dateisysteme erzeugen:
Code:
mkswap /dev/mapper/crypto-swap
mke2fs -j /dev/mapper/crypto-root
Wiederherstellen
Mountpoint erstellen:
Mounten:
Code:
mount /dev/mapper/cryptop-root /mnt/restore
/boot erstellen und mounten
Code:
mkdir /mnt/restore/boot
mount /dev/sdb1 /mnt/restore/boot
Wiederherstellen:
Code:
rsync -az <Ort_eures_Backups> /mnt/restore
Jetzt sind noch einige Modifikationen vorzunehmen da Euer System in diesem Zustand noch nicht booten würde.
Code:
mount -t proc none /mnt/restore/proc
mount -t sysfs none /mnt/restore/sys
mount --bind /dev /mnt/restore/dev
chroot /mnt/restore
Öffnen von /etc/cryptab:
Folgendes eintragen:
Code:
/dev/mapper/crypto-root / ext3 errors=remount-ro 0 1
/dev/sdb1 /boot ext2 defaults 0 2
/dev/mapper/crypto-swap none swap sw 0 0
/etc/initramfs-tools/conf.d/resume öfnnen:
Code:
nano /etc/initramfs-tools/conf.d/resume
Die Zeile RESUME=““ so ändern:
Code:
RESUME=/dev/mapper/crypto-swap
/boot/grub/menu.lst öfnnen:
Code:
nano /boot/grub/menu.lst
Alle einträge von /dev/sdb1 zu /dev/mapper/crypto-root ändern
Als nächstes muss Grub zum MBR hinzugefügt werden und initrds wiedererstellt werden.
/etc/mtab neu erstellen:
Code:
cat /proc/mounts > /etc/mtab
/etc/mtab/ öfnnen
Und etwa so editieren
Code:
/dev/mapper/crypto-root / ext3 rw,errors=continue,data=ordered 0 0
/dev/sdb1 /boot ext3 rw,errors=continue,data=ordered 0 0
none /proc proc rw 0 0
none /sys sysfs rw 0 0
tmpfs /dev tmpfs rw,size=10240k,mode=755 0 0
Grub zum MBR hinzufügen:
Code:
grub-install /dev/sdb
initrds neu erstellen:
Code:
update-initramfs -k all -u
chroot verlassen und Dateisysteme aushängen:
Code:
exit
umount /mnt/restore/proc
umount /mnt/restore/sys
umount /mnt/restore/dev
umount /mnt/restore/boot
umount /mnt/restore
Fertig!
Nach einem Reboot sollte euch LUKS nach einem Passwort für die verschlüsselte Partition fragen.
Anmerkung: Sol l damit ein Server auf dem kein physischer Zugriff besteht muss noch ssh so konfiguriert werden, dass der Key über SSH übertragen werden kann.
Möglichkeit 2:
Die zweite Möglichkeit wäre die Konfiguration der Partitionen ohne LVM
Vorraussetzungen sind die Pakete cryptsetup und initramfs-tools.
In /etc/crypttab das mapping zwischen der Partition und dem „Verschlüsselungsinterface“ eintragen
Code:
echo "root /dev/sdb2 none luks" >>/etc/crypttab
sed -i 's#/dev/sdb2#/dev/mapper/root#' /etc/fstab
Root-device für grub ändern:
Code:
sed -i 's#/dev/sdb2#/dev/mapper/root#' /boot/grub/menu.lst
initrd image neu erstellen:
Code:
update-initramfs -k all -u
Ab hier wieder sicher sein dass ein sauberes Backup vorhanden ist da wieder alle Daten gelöscht werden.
Daten Löschen und mit Zufallsdaten füllen:
Code:
shred -n1 -v /dev/sdb2
dd if =/dev/urandom of=/dev/sdb2
Die verschlüsselte Partition erstellen:
Code:
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 root
Dateisystem erstellen, neue Partition mounten und Backup zurückspielen
Code:
mkfs.ext3 /dev/mapper/root
mount /dev/mapper/root /mnt/root
rsync -az <Ort_eures_Backups> /mnt/root/
Fertig!
Und jetzt viel Spaß beim Verschlüsseln