apraxostux

Author: Dr. med Claudia Neumann
© 2019 Dr. Claudia Neumann

Update: 22.6.2019

Einleitung

In der Arztpraxis sollten Patientendaten auf verkrypteten Datenträgern gespeichert werden. Ebenso sollten Datensicherungen verkryptetet sein. Wie das im Arztpraxis-Programm apraxos gemacht werden kann, soll hier beschrieben werden.

Anlegen eines verkrypteten HOME-Verzeichnis für apraxos

Ich gehe davon aus, dass bei der Installation von Debian Linux (stretch) noch keine verkryptete Partition angelegt wurde. Das HOME-Verzeichnis des ersten Users (praxis) liegt noch auf der Linux-Partition. Es muss eine weitere Partition für das Verkrypten und anschließende Mounten in der Linux-Installation zur Verfügung stehen.

Verkrypten einer Partition

Diese Anleitung handelt nur von der Verkryptung des HOME-Verzeichnisses. Es gibt auch Anleitungen zur vollständigen Verkryptung des gesamten Systems. Das erscheint mir für die Datensicherheit der Patientendaten übertrieben und erschwert im Falle von Boot-Problemen die Rettung des Systems ganz erheblich. Man sollte sich auch darüber im Klaren sein, dass eine verkryptete Partition ohne den dazugehörigen Schlüssel oder das Passwort nicht mehr benutzbar ist. Sollte das Passwort vergessen werden oder verloren gehen, kann auch der versierteste Linuxer nicht mehr auf die Daten zugreifen. Sollte eine Partition Daten enthalten, müssen diese gesichert werden, bevor die Partition oder Festplatte verkryptet wird. Die Daten werden dabei überschrieben und damit zerstört.

Das Debian-Paket cryptsetup muss installiert sein. Die zu verkryptende Partition darf nicht gemountet sein. Folgende Befehle müssen Sie als root ausführen.

Teilweise wird zunächst empfohlen, die zu verkryptende Partition mit Zufallswerten zu befüllen, um später keinen Hinweis auf die Verkryptung des Datenträgers zu hinterlassen und mögliche Reste von alten Daten sicher zu löschen. Dafür wird der Befehl:

# dd if=/dev/urandom of=/dev/xyz bs=10M

benutzt, wobei /dev/xyz durch Ihr Device ersetzt werden muss. Dieser Vorgang kann Stunden dauern.

Nun wird die Partition verkryptet:

# cryptsetup luksFormat /dev/xyz

WARNING:

This will overwrite data on /dev/xyz irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful

Sie müssen /dev/xyz wieder durch Ihr Device ersetzen. Wie Sie sehen, werden die Daten der Partition damit überschrieben. Sie müssen ausdrücklich YES in Großbuchstaben und dann zweimal das Passwort für die Verschlüsselung eingeben, sonst wird die Verschlüsselung nicht durchgeführt.

Das Device ist nun verschlüsselt. Mit

# cryptsetup luksOpen /dev/xyz homecrypt

Wieder /dev/xyz durch Ihr Device ersetzen. Damit wird die verkryptete Partition geöffnet. Statt homecrypt können Sie eine beliebige Bezeichnung wählen. Das eben vergebene Passwort wird dabei abgefragt. Die Partition wird dabei unter /dev/mapper/homecrypt eingehängt, ist aber zunächst leer. Wir müssen sie nun mit

# mkfs.ext4 /dev/mapper/homecrypt

mit ext4 formatieren.

Zu diesem Zeitpunkt ist die Partition zwar entschlüsselt, aber noch nicht gemountet, d.h. Daten können so noch nicht auf das Device kopiert werden.

Mit

# mkdir /media/crypt
# mount /dev/mapper/homecrypt /media/crypt

wird die Partition nach /media/crypt gemountet und kann so (zunächst nur als root) beschrieben werden. Die Daten des bisherigen HOME-Verzeichnisses können nun (als root) auf die Festplatte kopiert werden. Will man später die Partition nach /home mounten, kopiert man alle User-Verzeichnisse auf das neue Device; will man nur die Daten eines Users nach /home/<user> mounten, werden die Daten unterhalb von /home/<user> kopiert. Die Dateirechte werden beim Kopieren durch root nicht geändert.

Mit

# umount /media/crypt
# cryptsetup luksClose /dev/mapper/homecrypt

wird die Partition wieder ausgehängt.

Die Partition ist damit verschlüsselt. Man könnte sie für ein Backup nutzen und sie z.B. mit zuluMount, einem grafischen Tool zum Mounten von verkrypteten Devices, einbinden. Dazu ist aber immer das root-Passwort und das Passwort zum Entkrypten der Partition notwendig. Zur Nutzung als HOME-Verzeichnis funktioniert das nicht.

Mounten der verkrypteten Partition als HOME-Verzeichnis

Um die verkryptete Partition beim Systemstart zu mounten, muss sie beim Boot-Vorgang zunächst entschlüsselt und anschließend gemountet werden. Hierfür editieren wir als root die Datei /etc/crypttab. Sollte diese Datei nicht vorhanden sein, legen Sie sie an:

# <target name> <source device>    <key file>      <options>
homecrypt      /dev/xyz              none            luks

Als ersten Parameter vergeben Sie einen beliebigen Namen, mit dem die entschlüsselte Partition unter /dev/mapper/ eingehängt werden soll. Der zweite Parameter ist der Device-Name. Achtung, man kann z.B. /dev/sda5 angeben. Es könnte aber passieren, dass sich die Reihenfolge der Partitionen ändert. Dann kann Linux beim Bootvorgang hängen. Besser ist es, direkt die UUID anzugeben, damit man nach Umpartitionierungen keine bösen Überraschungen erlebt. Dann muss die /etc/crypttab lauten:

# <target name> <source device> <key file>  <options>
homecrypt /dev/disk/by-uuid/740702ac-8f7d-48f0-9d9d-3b5a3ca80dc5 none luks

Die UUID wird mit dem Befehl blkid ermittelt. Damit die Abfrage des Passwortes beim Bootvorgang funktioniert, muss als root

update-initramfs

aufgerufen werden.

Die Partition kan damit entschlüsselt werden, muss aber noch gemountet werden. Dafür tragen wir in der /etc/fstab ein:

# /dev/xyz wird als /home gemountet
/dev/mapper/homecrypt  /home  ext4  defaults   0   2

Diese Zeile muss natürlich nach dem Root-Dateisystem stehen, sonst kann die Partition nicht eingehängt werden. Wenn auf der Partition als oberstes Verzeichnis /praxis eingerichtet worden war, ist der Mountpoint /home, war es direkt das /home/praxis-Verzeichnis ist der Mountpoint /home/praxis.

Nun kann ein Neustart ausgeführt werden. Sollte aus irgendeinem Grund das Mounten der verkrypteten Partition fehlschlagen, kommt man im Rescue-Modus an und kann die verkryptete Partition als root zu Fuß mit

# cryptsetup luksOpen /dev/xyz homecrypt
# mount /dev/mapper/homecrypt /home

einhängen und mit Strg-D den Bootvorgang fortsetzen. Nach jeder Änderung von /etc/crypttab muss

update-initramfs

ausgeführt werden, damit die Änderung greift.

Beschreibbares Mounten einer verkrypteten USB-Festplatte unter Debian 9

Das beschreibbare Mounten einer verkrypteten USB-Festplatte ist etwas komplex, da einerseits die Entschlüsselung durchgeführt werden muss, andererseits die USB-Festplatte beschreibbar gemountet werden soll. Für Beides muss normalerweise das root-Passwort und das Verschlüsselungs-Passwort angegeben werden. Will man andererseits ein automatisches Backup auf die verschlüsselte Festplatte machen, wäre die tägliche Eingabe des Root-Passworts und des Verschlüsselungs-Passworts lästig. Darüberhinaus will man wahrscheinlich das root-Passwort nicht an eine MFA weitergeben.

Die Lösung:

  • Entschlüsseln der verkrypteten USB-Festplatte mit einem Key-File

  • Beschreibbares Mounten der entschlüsselten USB-Festplatte

  • Automatisiertes Mounten der verschlüsselten USB-Festplatte mit einem Sudoers-Eintrag

Eine (neue) USB-Festplatte wird, wie oben beschrieben, mit einem Passwort verkryptet und mit ext3 oder ext4 formatiert.

Entschlüsseln der verkrypteten USB-Festplatte mit einem Key-File

Bei der Verschlüsselung mit luks können bis zu 8 Entschlüsselungsmethoden eingerichtet werden. Für die USB-Festplatte ist bisher nur eine Methode belegt, nämlich die Entschlüsselung mit Passwort. Unmounten und schliessen Sie die USB-Festplatte:

Sie können sich die Verschlüsselungsmethoden ansehen mit:

# cryptsetup luksDump /dev/sdc1
LUKS header information for /dev/sdc1

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha256
Payload offset: 4096
MK bits:        256
MK digest:      1e 80 d0 9f ff 0e ea ba 67 54 2d 8c 37 21 cb c2 d0 cf d8 60
MK salt:        ef b1 2e bb 4f a9 1b ce cb ef c4 18 f9 7e 29 b3
                0d e6 db 5b a3 73 e7 bf a6 31 ff 77 b9 da 14 90
MK iterations:  418250
UUID:           db252534-58be-456c-8107-428404a5ed75

Key Slot 0: ENABLED
        Iterations:             3436240
        Salt:                   97 1a 37 9f 2f a6 6f 95 56 c3 63 d3 f6 67 07 c4
                                5c 64 4e 8d 5b 9d 79 dd 02 93 7f ff ec 8e 51 9d
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Es ist nur ein Key Slot aktiviert, nämlich die Entschlüsselung mit Passwort.

Nun legen wir als weitere Methode für die Entschlüsselung eine Schlüsseldatei an. Um eine gute Verschlüsselung zu erhalten, sollte die Schüsseldatei Zufallszahlen enthalten. Die Frage ist, wo legen wir die Datei hin. Sie könnte ins verkryptete HOME-Verzeichnis kommen. Dort würde sie aber z.B. ein Backup ohne root-Passwort stören, da die Schlüsseldatei nur von root lesbar sein sollte und damit einen Lesefehler beim Backup verursachen würde. Eine andere Empfehlung ist, die Schlüsseldatei ins root-HOME-Verzeichnis zu legen. Wenn es einem Angreifer möglich ist, sich als root einzuloggen, ist das System kompromittiert und man hat andere Probleme als eine lesbare Schlüsseldatei.

Wir erzeugen also eine Schlüsseldatei mit:

# dd if=/dev/urandom of=/root/usb.key bs=1024 count=4
4+0 Datensätze ein
4+0 Datensätze aus
4096 Bytes (4,1 kB, 4,0 KiB) kopiert, 0,000467879 s, 8,8 MB/s

Achten Sie genau auf die Syntax von dd. Falsche Eingaben an dieser Stelle können Ihr System schreddern. Die Schlüsseldatei sollte nur von root lesbar gemacht werden:

# chmod 400 usb.key
# ls -al
-r--------  1 root root 4096 Jun 10 13:26 usb.key

Nun sezten wir die Schlüsseldatei-Entschlüsselung als weitere Methode zur Entschlüsselung der USB-Festplatte ein:

# cryptsetup luksAddKey /dev/sdc1 /root/usb.key
Geben Sie irgendeine bestehende Passphrase ein:

Es wird das bisher benutze Passwort abgefragt.

# cryptsetup luksDump /dev/sdc1
LUKS header information for /dev/sdc1

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha256
Payload offset: 4096
MK bits:        256
MK digest:      1e 80 d0 9f ff 0e ea ba 67 54 2d 8c 37 21 cb c2 d0 cf d8 60
MK salt:        ef b1 2e bb 4f a9 1b ce cb ef c4 18 f9 7e 29 b3
               0d e6 db 5b a3 73 e7 bf a6 31 ff 77 b9 da 14 90
MK iterations:  418250
UUID:           db252534-58be-456c-8107-428404a5ed75

Key Slot 0: ENABLED
       Iterations:             3436240
       Salt:                   97 1a 37 9f 2f a6 6f 95 56 c3 63 d3 f6 67 07 c4
                               5c 64 4e 8d 5b 9d 79 dd 02 93 7f ff ec 8e 51 9d
       Key material offset:    8
       AF stripes:             4000
Key Slot 1: ENABLED
       Iterations:             3368419
       Salt:                   3f bc 2d 87 e3 2f 84 cb 78 57 49 1f 1b 4c 6a 98
                               76 19 a7 a0 fa ed 14 bf cc 5c be e0 01 39 4f 22
       Key material offset:    264
       AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Es ist ein weiterer Key Slot eingerichtet worden. Die USB-Festplatte kann nun mit der Schlüsseldatei entschlüsselt werden mit:

# cryptsetup luksOpen -d /root/usb.key /dev/sdc1 usb

Die Daten zur USB-Festplatte können nun der /etc/crypttab hinzugefügt werden:

# <target name> <source device>  <key file>  <options>
homecrypt /dev/disk/by-uuid/740702ac-8f7d-48f0-9d9d-3b5a3ca80dc5 none luks
usb /dev/disk/by-uuid/db252534-58be-456c-.... /root/usb.key luks,noauto,quiet

Als Optionen muss auf jeden Fall noauto hinzugefügt werden, ansonsten erwartet Linux beim Boot-Vorgang, dass die USB-Festplatte angestöpselt ist und hängt, wenn sie es nicht ist. Beenden Sie wieder mit:

update-initramfs

Beschreibbares Mounten der entschlüsselten USB-Festplatte

Wenn man ein automatisches Backup auf eine verschlüsselte USB-Festplatte durchführen will, sollte die USB-Festplatte immer an derselben Stelle gemountet werden. Unverschlüsselte USB-Festplatten werden in Debian unter /media/<user> mit der UUID gemountet. Diesen Mechanismus können wir für das Backup nicht nutzen, da die USB-Festplatte dann nur lesbar gemountet wird. Wir könnten aber z.B. nach /media/<user>/backup mounten. Das Verzeichnis /media muss dann für alle schreibbar gemacht werden, /media/<user> (praxis) und _/media/<user>/backup sollten als Owner praxis.praxis haben:

# chmod 777 /media
# cd /media
# mkdir praxis
# chown praxis.praxis praxis
# cd praxis
# mkdir backup
# chown praxis.praxis backup

Nun ein Trick, um zu verhindern, dass in das Verzeichnis /media/praxis/backup geschrieben wird, wenn die USB-Festplatte nicht gemountet ist:

# cd backup
# chattr +i .

Damit können in dem Verzeichnis /media/praxis/backup keine neuen Dateien angelegt werden. Erst wenn dort die USB-Festplatte gemountet ist, ist das Verzeichnis wieder beschreibbar.

In die /etc/fstab wird ein Eintrag hinzugefügt:

# verschlüsselte USB-Platte
/dev/mapper/usb /media/praxis/backup ext4 nofail,rw,user,exec,noauto  0  0

Die entschlüsselte USB-Festplatte kann nun beschreibbar als root mit:

mount /dev/mapper/usb

gemountet werden.

Automatisiertes Mounten der verschlüsselten USB-Festplatte mit einem Sudoers-Eintrag

Situation: die Patientendaten sollen auf einer verschlüsselten USB-Festplatte gesichert werden. Die USB-Festplatte wird nach Ende der Sprechstunden mit nach Hause genommen (Sicherung bei Diebstahl der Computer-Anlage, Brand in der Praxis), ist also nicht dauernd angeschlossen. Die Sicherung soll evtl. von der MFA ohne root-Passwort und ohne Verschlüsselungs-Passwort durchgeführt werden können; das Einhängen der Festplatte soll durch ein Icon auf dem Desktop durchführbar sein.

Man lege eine Datei z.B. /home/praxis/cryptmount im verkrypteten HOME-Verzeichnis an. Die Datei soll als Owner root.root haben, aber (wegen des Backup) vom User praxis lesbar sein:

# cd /home/praxis
# touch cryptmount
# chown root.root cryptmount
# chmod 754 cryptmount

Der Inhalt der Datei:

#!/bin/bash
cryptdisks_start usb
mount /dev/mapper/usb

Dasselbe mit /home/praxis/cryptumount:

# cd /home/praxis
# touch cryptumount
# chown root.root cryptumount
# chmod 754 cryptumount

Der Inhalt der Datei:

#!/bin/bash
umount /dev/mapper/usb
cryptdisks_stop usb

Nun kann nach Einstöpseln der USB-Festplatte als root mit:

/home/praxis/cryptmount

die USB-Festplatte gemountet werden und als root mit

/home/praxis/cryptumount

wieder ungemountet werden. Falls auf dem Desktop die Geräteüberwachung das Mounten der USB-Festplatte anbietet, muss das ignoriert werden.

Um die USB-Festplatte auch als normaler User ohne Passwort zu mounten, kann man sudo nutzen. In Debian ist die Gruppe sudo bei der Installation leer, in anderen Linux-Distributionen ist der erste User automatisch in der Gruppe sudo. Wenn ein User in der Gruppe sudo ist, kann er mit sudo alle root-Befehle nach Eingabe seines Passwortes durchführen. Wir wollen aber nur eine bestimmte USB-Festplatte mit sudo und ohne Passwort mounten, nicht dem User praxis alle sudo-Rechte geben. Also setzen Sie den User praxis nicht in die Gruppe sudo.

Stattdessen editieren wir die Datei /etc/sudoers.

Warning
Die Datei /etc/sudoers sollte nur mit dem Editor visudo editiert werden. visudo kontrolliert die Einträge in der Datei /etc/sudoers, bevor sie gespeichert werden. Fehlerhafte Einträge in der Datei /etc/sudoers können dazu führen, dass keine Befehle als root mehr ausgeführt werden können. Dann haben Sie sich effektiv aus Ihrem System ausgesperrt.

In der Datei /etc/sudoers sollte eine Zeile ergänzt werden (unter der root-Zeile):

# User privilege specification
root    ALL=(ALL:ALL) ALL
praxis  ALL=(ALL) NOPASSWD: /home/praxis/cryptmount, /home/praxis/cryptumount

Der User praxis muss sich einmal ausloggen und neu einloggen, damit die Änderung in Kraft tritt. Danach kann der User praxis die verschlüsselte USB-Festplatte mit:

sudo /home/praxis/cryptmount

ohne root-Passwort und ohne Verschlüsselungs-Passwort mounten und mit:

sudo /home/praxis/cryptumount

wieder unmounten und die Entschlüsselung aufheben. Die beiden Befehle können bei Bedarf mit einem Icon auf dem Desktop hinterlegt werden.