Verschlüsselte Partition automatisch mounten

Damit eine verschlüsselte Partition beim Booten automatisch entschlüsselt und gemountet wird, ist folgendes nötig.

  • Erstmal die verschlüsselte Partition erstellen und zur Probe mounten (siehe dm-crypt / LUKS):
    dd if=/dev/zero of=/srv/storage/crypted-disk.dd bs=1M count=40000
    cryptsetup -v luksFormat /srv/storage/crypted-disk.dd --type luks2
    echo -n meinpw | cryptsetup -v open /srv/storage/crypted-disk.dd decrypted-disk --key-file -
    mkfs.ext4 /dev/mapper/decrypted-disk
    cryptsetup -v close  decrypted-disk
    
  • Das Passwort speichern:
    echo -n meinpw > /etc/luks-keys/mydisk-luks.key
    chmod 400 /etc/luks-keys/mydisk-luks.key
    

    Nebenbei: Das ist natürlich der (Sicherheits-) Haken an der Sache: Das Passwort muss in Klartext da sein. Wenn aber z.B. schon die Root-Partition selber verschlüsselt ist, lässt sich das verkraften. Oder auch dann, wenn (wie bei mir) die Daten remote liegen und ich nur v.a. möchte dass die Daten verschlüsselt beim Cloud-Anbieter liegen.

  • In /etc/crypttab (wird später nicht mehr verwendet) das automatische Mounten vorbereiten:

    mydisk /srv/storage/crypted-disk.dd /etc/luks-keys/mydisk-luks.key   luks
    
  • Daraus werden nun Files in /run/systemd/generator/ generiert, wo sie aber erstmal noch ohne Funktion sind:
    systemctl --system daemon-reload
    
  • Ins System kopieren:
    cp /run/systemd/generator/systemd-cryptsetup@mydisk /etc/systemd/system/
    
  • Ausprobieren: Das sollte das nun das Filesystem entschlüsseln:
    systemctl start systemd-cryptsetup@mydisk
    ls -la /dev/mapper/
    
  • Zum Mounten habe ich mich für autofs entschieden, das ich für vieles verwende, das nicht zwingend beim Booten da sein muss. Der Eintrag in meiner /etc/auto.misc sieht in etwa so aus:
    mydisk -fstype=ext4 :/dev/mapper/mydisk
    
  • Nun aktivieren, dass es beim Boot passiert:
    systemctl unmask cryptdisks
    rm /lib/systemd/system/cryptdisks.service # löscht Link auf /dev/null
    systemctl daemon-reload
    systemctl enable cryptdisks
    

Dies funktioniert bei mir gut und bisher auch verlässlich. Jedoch passiert das beim Boot offenbar vor autofs – daher sollte das zugrundeliegende Filesystem, auf dem das crypted-disk.dd liegt, vorher (z.B. in /etc/fstab gemountet werden.)

Über ein Feedback, ob das jemand nachvollziehen konnte, freue mich mich sehr.

Anhang: Links

5 thoughts on “Verschlüsselte Partition automatisch mounten

  1. Statt des langsamen dd kann man auch truncate verwenden – geht auch auf remote smb-Laufwerken:

    truncate -s 40G /srv/storage/crypted-disk.dd
    
  2. Vergrößern des verschlüsselten Volumes an meinem Beispiel:

    cd ...myservice && docker-compose stop
    
    umount /misc/dockervolumes-hetzner
    systemctl stop systemd-cryptsetup@dockervolumes\\x2dhetzner.service
      # -> /lib/systemd/systemd-cryptsetup detach 'dockervolumes-hetzner'
    truncate -s 500G /mnt/dockervolumes-hetzner-crypt/crypted-disk.dd
    systemctl start systemd-cryptsetup@dockervolumes\\x2dhetzner.service
    e2fsck -f /dev/mapper/dockervolumes-hetzner
    resize2fs /dev/mapper/dockervolumes-hetzner
    df -h /opt/dockervolumes-hetzner/ # -> mount via autofs
    
    cd ...myservice && docker-compose start
    
  3. Hallo
    Danke für die Anleitung (5 Jahre später). Ich benutze autofs, da ich die zur Zeit noch nicht verschlüsselte Disk selten benutze (1-2 x pro Tag); dank autofs schaltet sie dazwischen zuverlässig ab (spin-down). Weisst Du, ob eine Disk auch abschaltet, wenn eine Partition LUKS-entschlüsselt ist (aber nicht autofs-gemountet)?
    Al

    1. Hallo Al,
      Ich gehe stark davon aus, dass der Spindown nichts mit der LUKS Verschlüsselung hat zu tun hat, diese das also weder verhindert noch bewirkt. Du kannst beziehungsweise musst die entschlüssele Partition wiederum wieder automounten.
      Ich selber mache das zwar nicht mit physischen Festplatten, aber mit Remote-Laufwerken, die ich nicht permanent mounten möchte.
      Dirk

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert