Skip to content

Latest commit

 

History

History
408 lines (308 loc) · 11.2 KB

Festplatten_verschluesseln.md

File metadata and controls

408 lines (308 loc) · 11.2 KB

Systemplatte

es wird davon ausgegangen das es schon irgendwas installiertes gibt das nicht verschlüsselt ist. Ziel ist es dieses Layout anzulegen:

GPT
   |
   ├── EFI (fat32)
   |
   ├── boot (ext4)
   |
   └── Luks encrypted
       |   
       └── LVM
           |
           ├── root (btrfs)
           |   
           └── swap (swap)

Booten des Systems per Rettungsystem

irgendwas mit dem man die Sicherung des bisherigen Systems vornehmen kann. ubuntu live dvd oder so gemouted nach /backup

Daten sichern

Sichern von boot und root, auf eine externe Platte zu sichernde Dateisysteme mounten dann:

mkdir -p /old/efi /old/boot /old/root

# auf mannigfaltige art und weise die dateisysteme unter die verzeichnisse mounten,
# wenn es keine boot partition gibt, einfach auslassen.

# evtl ist es hilfreich zu wissen wie man lvm volumes manuell einbindet:
#falls nötig
apt-get install lvm2
vgscan

# dann die volume group(s) aktivieren
vgchange -a y <nameDerVolumeGroup>

# jetzt sind die volumes unter /dev/mapper/ verfügbar

# alles sichern
cd /old/efi
tar cvjf /backup/efi.tar.bz2 *

# nur falls man eine boot partition hatte
cd /old/boot
tar cvjf /backup/boot.tar.bz2 *

cd /old/root
tar --exclude=dev/* \
--exclude=proc/* \
--exclude=sys/* \
--exclude=tmp/* \
--exclude=var/tmp/* \
--exclude=var/lock/* \
--exclude=var/log/* \
--exclude=var/run/* \
--exclude=.bash_history \
--exclude=lost+found \
--exclude=var/cache/apt/packages/* \
--exclude=var/cache/apt/archives/* \
-cvjf /backup/root.tar.bz2 *

# Swap wird nicht gesichert ... warum auch

cd /
umount /old/boot
umount /old/efi
umount /old/root

# ggf. Volumegroup deaktivieren
vgchange -a n <nameDerVolumeGroup>

Festplatte neu partitionieren

ACHTUNG: hier gehen alle Daten flöten, also im Zweifelsfall nochmal die eben erstellten tar Dateien checken

(500gb ssd die ein bisschen freien platz behält)

parted --script /dev/nvme0n1 "mklabel gpt"

# 512MB EFI Partition
parted --script /dev/nvme0n1 "mkpart primary fat32 1MiB 513MiB"
parted --script /dev/nvme0n1 "set 1 esp on"

# 1024MB boot Partition
parted --script /dev/nvme0n1 "mkpart primary ext4 513MiB 1537MiB"

# der Rest wird Luks
parted --script /dev/nvme0n1 "mkpart primary ext4 1537MiB 394753MiB"

Verschlüsselung und formatieren

# erst mal die efi partition formatieren
mkfs.fat -F32 -n EFI /dev/nvme0n1p1

# boot partition formatieren
mkfs.ext4 -L boot -T small /dev/nvme0n1p2

# mit luks die lvm partition verschluesseln
cryptsetup -y -v luksFormat /dev/nvme0n1p3 --hash sha512 --cipher aes-xts-plain64 --key-size 512 --iter-time 10000

# verschluesselte partition zum formatieren öffnen (die findet man dann unter /dev/mapper/luks-<uuid der partition>)
cryptsetup luksOpen /dev/nvme0n1p3 luks-`blkid -s UUID -o value /dev/nvme0n1p3`

# LVM Setup
pvcreate /dev/mapper/luks-`blkid -s UUID -o value /dev/nvme0n1p3`
vgcreate system /dev/mapper/luks-`blkid -s UUID -o value /dev/nvme0n1p3`
lvcreate --name root --size 256G system
lvcreate --name swap --size 64G system

# formatieren des root Dateisystems
mkfs.btrfs -f -L root /dev/system/root

# subvolume layout aufbauen
mount /dev/system/root /mnt
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@snapshots
umount /mnt

# swap formatieren
mkswap /dev/system/swap

# neue dateisysteme an temporäre stelle mounten
mkdir -p /new/root

mount /dev/system/root /new/root -t btrfs -o subvol=@,compress=zstd

Dateisysteme wieder füllen

cd /new/root
tar xpvf /backup/root.tar.bz2 --xattrs-include='*.*' --numeric-owner

mount /dev/nvme0n1p2 /new/root/boot
cd boot
tar xpvf /backup/boot.tar.bz2 --xattrs-include='*.*' --numeric-owner

mount /dev/nvme0n1p1 /new/root/boot/efi
cd efi
tar xpvf /backup/efi.tar.bz2 --xattrs-include='*.*' --numeric-owner

jetzt geht es in dem neuen Dateisystem weiter

# vorbeiten verschiedener sachen damit die chroot umgebung funktioniert
mount --rbind /dev /new/root/dev
mount --make-rslave /new/root/dev
mount -t proc /proc /new/root/proc
mount --rbind /sys /new/root/sys
mount --make-rslave /new/root/sys
mount --rbind /tmp /new/root/tmp

cp /etc/resolv.conf /new/root/etc/resolv.conf

chroot /new/root /bin/bash
source /etc/profile

wieder bootfähig machen

Crypttab anpassen

echo "luks-`blkid -s UUID -o value /dev/nvme0n1p3` UUID=\"`blkid -s UUID -o value /dev/nvme0n1p3`\" none luks,discard" >> /etc/crypttab

fstab anpassen

neue Einträge für root, efi und swap hinzufügen

# root
echo "UUID=`blkid -s UUID -o value /dev/system/root`   /  btrfs   defaults,subvol=@,compress=zstd,noatime,autodefrag 0  0" >> /etc/fstab

# boot
echo "UUID=`blkid -s UUID -o value /dev/nvme0n1p2`   /boot  ext4  defaults 0  1" >> /etc/fstab

# efi
echo "UUID=`blkid -s UUID -o value /dev/nvme0n1p1`   /boot/efi  vfat  umask=0077 0  1" >> /etc/fstab

# swap
echo "UUID=`blkid -s UUID -o value /dev/system/swap`   none  swap  sw 0  0" >> /etc/fstab

jetzt die fstab mit einem editor öffnen und die alten Werte für root, efi, swap und evtl boot rauswerfen.

initramfs an die neue config anpassen

apt-get install --reinstall cryptsetup-initramfs

echo "RESUME=/dev/ares/swap" > /etc/initramfs-tools/conf.d/resume
echo "UMASK=0077" >> /etc/initramfs-tools/initramfs.conf

grub.cfg auf der EFI Partition ersetzen

### grub.cfg anpassen damit verschluesselte partitionen beachtet werden
echo "GRUB_ENABLE_CRYPTODISK=y" >> /etc/default/grub

# grub installieren
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian
grub-mkconfig -o /boot/grub/grub.cfg

jetzt kann man neustarten!

nach dem neustart noch snapper konfigurieren

/etc/fstab Eintrag für Subvolume @snapshots

echo "UUID=`blkid -s UUID -o value /dev/system/root`   /.snapshots  btrfs   subvol=@snapshots,defaults,compress=zstd,noatime,autodefrag  0  0" >> /etc/fstab

snapper installieren und config anlegen

apt-get install snapper
snapper -c root create-config /

das Verzeichnis das Snapper angelegt hat löschen und neu anlegen

rm -rf /.snapshots
mkdir /.snapshots
rm -rf /.snapshots
mount /.snapshots

Datenfestplatten

Festplatten partitionieren

 parted --script /dev/sda "mklabel gpt"
 parted --script /dev/sda "mkpart primary 1 100%"

 parted --script /dev/sdb "mklabel gpt"
 parted --script /dev/sdb "mkpart primary 1 100%"

Cryptsetup

Partition verschlüsseln

cryptsetup -y -v luksFormat /dev/sda1 --hash sha512 --cipher aes-xts-plain64 --key-size 512 --iter-time 10000
cryptsetup -y -v luksFormat /dev/sdb1 --hash sha512 --cipher aes-xts-plain64 --key-size 512 --iter-time 10000

Keyfile generieren

mkdir /etc/luks-keys/; dd if=/dev/urandom of=/etc/luks-keys/phobos bs=64 count=1
mkdir /etc/luks-keys/; dd if=/dev/urandom of=/etc/luks-keys/deimos bs=64 count=1
chmod 0400 /etc/luks-keys/*

Key zu verschluesseltem Volume hinzufuegen

cryptsetup luksAddKey /dev/sda1 --key-size 512 --iter-time 2000 --hash sha512 /etc/luks-keys/phobos
cryptsetup luksAddKey /dev/sdb1 --key-size 512 --iter-time 2000 --hash sha512 /etc/luks-keys/deimos

Crypttab anpassen

echo "phobos UUID=\"`blkid -s UUID -o value /dev/sda1`\" /etc/luks-keys/phobos luks,key-slot=1" >> /etc/crypttab
echo "deimos UUID=\"`blkid -s UUID -o value /dev/sdb1`\" /etc/luks-keys/deimos luks,key-slot=1" >> /etc/crypttab

Cryptdisks starten

cryptdisk_start phobos deimos

dateisysteme erzeugen

mkfs.btrfs -f -L vault -m raid1 -d raid1 /dev/mapper/phobos /dev/mapper/phobos

subvolume layout aufbauen

Um sicherzustellen das man an die Snapshots rankommt wenn das eigentliche Volume Probleme hat kommt das Snapshot Subvolume @snapshots auf das gleiche Level wie das eigentliche Daten Subvolume (@) später wird dann @snapshots unter ./snapshots ins Datenvolume gemounted

subvolid=5
   |
   ├── @
   |       |
   |       ├── /.snapshots
   |       |
   |       ├── /daten
   |       |
   |       ├── blubbb
   |       |
   |       ├── ...
   |
   ├── @snapshots
   |
   └── @...

also los: Ein btrfs raid1 kann man mounten indem man einfach ein device des raids mounted, in der fstab wird später auf nummer sicher gegangen.

mount /dev/mapper/phobos /mnt

## zwischendurch kann man einfach mal schauen ob das anlegen des Dateisystems soweit gut war. es müsste Data, Metadata und System RAID1 dabei sein
btrfs fi usage /vault

btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@snapshots
umount /mnt

Mountpunkte in der richtigen Reihenfolge anlegen und snapper konfigurieren

## Mountpunkt anlegen
mkdir /vault

## /etc/fstab Eintrag für Subvolume @ (die eigentlichen Daten)
echo "UUID=`blkid -s UUID -o value /dev/mapper/phobos`   /vault  btrfs   subvol=@,device=/dev/mapper/deimos,device=/dev/mapper/phobos,defaults,rw,user,nofail,nodev,nosuid,noexec,noatime,autodefrag  0  0" >> /etc/fstab

## /etc/fstab Eintrag für Subvolume @snapshots
echo "UUID=`blkid -s UUID -o value /dev/mapper/phobos`   /vault/.snapshots  btrfs   subvol=@snapshots,device=/dev/mapper/deimos,device=/dev/mapper/phobos,defaults,rw,user,nofail,nodev,nosuid,noexec,noatime,autodefrag  0  0" >> /etc/fstab

## jetzt Datenvolume mounten und Berechtigungen anpassen
mount /vault
chown root:users /vault/.
chmod 0770 /vault/.

## snapper installieren und config anlegen
apt-get install snapper
snapper -c vault create-config /vault

## das Verzeichnis das Snapper angelegt hat löschen
rm -rf /vault/.snapshots

## und neu anlegen und jetzt das subvolume reinmounten
mkdir /vault/.snapshots
mount /vault/.snapshots
chmod 0750 /vault/.snapshots
chown root:users /vault/.snapshots

## falls der normale Benutzer noch nicht in der users gruppe ist ...
usermod -a -G users username

regelmäßiges Dateisystem aufräumen (scrub)

apt-get install btrfsmaintenance

dann die /etc/default/btrfsmaintenance anpassen https://github.com/kdave/btrfsmaintenance/blob/master/README.md

was kann man noch machen

snapper-gui installieren

apt-get install snapper-gui

backups mit snap-sync

Einen Backup Datenträger mit btrfs formatieren und mounten

# partitionieren
parted --script /dev/sdc "mklabel gpt"
parted --script /dev/sdc "mkpart primary 1 100%"

# verschlüsseln
cryptsetup -y -v luksFormat /dev/sdc1 --hash sha512 --cipher aes-xts-plain64 --key-size 512 --iter-time 10000

# verschlüsseltes Volume öffnen
cryptsetup luksOpen /dev/sdc1 backup

# formatieren
mkfs.btrfs -f -L backup /dev/mapper/backup

# mounten
mount /dev/mapper/backup /mnt

Snapsync herunterladen https://github.com/wesbarnett/snap-sync/releases entpacken und als root make install ausführen Dann kann man die btrfs Dateisysteme mit incrementellen Snapshots sichern

# das Zieldateisystem muss irgendwo gemoutet sein
# -c name der snapper config
# -u uuid des backup ziels, wird mit blkid ermittelt, auf device achten!
snap-sync -c root -u `blkid -s UUID -o value /dev/mapper/backup`

# wenn fertig
umount /mnt
cryptsetup luksClose /dev/mapper/backup

quellen aus denen ich das hab

https://computingforgeeks.com/working-with-btrfs-filesystem-in-linux/

https://blog.bmarwell.de/zwei-festplatten-in-einem-btrfs-raid1-zusammenfuehren/

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