Mit dm-crypt/luks verschluesselte Home-Partition beim Login einbinden

Aus Linupedia.org
Wechseln zu: Navigation, Suche
Höhe=24px
Dieses HOWTO zu Linux oder der Abschnitt davon braucht eine Überarbeitung. Weitere Informationen findest Du hier. Deine Hilfe ist gefragt, das HOWTO zu verbessern. Danach entsorge bitte diese Signierung.

--Gehrke (Diskussion) 09:07, 28. Dez. 2014 (CET)

Security

Allgemeines

Wenn eine /home-Partition oder gar die ganzen Platte verschlüsselt ist, so muss man bei jedem Booten das Passwort eingeben. Jeder, der den Rechner benutzen darf, muss dieses Passwort kennen - oder den USB-Stick, auf dem der Key hinterlegt ist. Die zuletzt genannte Bedingung ist allerdings bei Verwendung von LUKS weniger relevant, weil dort bis zu 8 sogenannte Slots für die Speicherung von unterschiedlichen Schlüsseln möglich sind. Auf diesem Wege ist es im Rahmen von kleineren Installation möglich, jedem User ein individuelles Password zu ermöglichen, welches mit dem Login-Passwort identisch sein kann. Der User muss damit zwar immer noch das Password zwei mal eingeben, aber er muss sich nicht zwei unterschiedliche Passworte merken. Auf diesem Wege bleibt aber der Schutz des Gesamtsystems durch die Verschlüsselung erhalten - es kann alles verschlüsselt werden außer dem /boot-Verzeichnis.

Bequemer (weil der User das Password nur einmal eingeben muss) wäre es, könnte das System das Login-Password an das Crypto-Filesystem weitergeben und erst beim Login das Homeverzeichnis einbinden (mounten). Die Verschlüsselung wäre für den Benutzer völlig transparent, das Homeverzeichnis nur so lange lesbar, wie der Nutzer eingeloggt ist.

Es stehen also zwei Verfahren zur Verfügung, welche der User gemäß seinen Bedürfnissen bewerten und auswählen muss. Die Variante mit Vollverschlüsselung bietet mehr Sicherheit, die Variante mit dedizierter Verschlüsselung des Home-Verzeichnisses wie hier beschrieben mehr Bequemlichkeit.

Möglich wird die dedizierte Entschlüsselung des Home-Verzeichnisses durch PAM und dm/crypt. Dieses Verfahren wurde ausführlich in der c't 2006, Heft 11, pp. 202-207 vorgestellt. Dieser Artikel beschreibt, wie man mit openSUSE 10.2 ein mit dm/crypt verschlüsseltes Homeverzeichnis einrichtet, dass erst beim Login eingebunden wird.

In openSUSE 10.3 ist das Einrichten eines verschlüsselten Homeverzeichnisses bequem mit YaST beim Anlegen oder Bearbeiten einer Benutzerkennung möglich: siehe Kapitel Kapitel 5.2.2 und 40.2 der openSUSE-Dokumentation. Hinter den Kulissen arbeitet openSUSE mit dem hier beschriebenen Verfahren. Hauptunterschied: statt LVM-Volumes werden Image-Dateien /home/User.img eingebunden.

Voraussetzungen

OpenSUSE 10.2

  • OpenSuSE 10.2 (in OpenSuSE 10.1 fehlen die nötigen Packages oder sind ohne Patchwork inkompatibel)
  • Installiere Packages
    • util-linux-crypto
    • pam_mount
(sind beide in der Standard-Distribution von 10.2 enthalten)
  • Kernelmodule dm-crypt und aes
Mit Yast->Editor für /etc/sysconfig-Dateien->System/Kernel folgende Kernalmodule eintragen, die beim Booten geladen werden sollen:
MODULES_LOADED_ON_BOOT="dm-crypt aes-i586" # bzw. aes-x86_64 für 64bit-Systeme
Für erste Experimente kann man die Kernel-Module auch manuell laden:
# modprobe dm-crypt
# modprobe aes-i586

OpenSUSE 10.3

Beim ersten Anlegen eines verschlüsselten Homeverzeichnisses mit Yast werden automatisch die benötigten Pakete pam_mount, cryptsetup und cryptconfig installiert und die Kernel-Module, falls nötig, geladen.

Beispiel: User "bob" einrichten

Am Anfang sollte der Benutzer "bob" ganz herkömmlich mit yast angelegt werden. Das Homeverzeichnis /home/bob liegt auf der normalen, unverschlüsselten Home-Partition. Dieses wird später als Fallback dienen, sollte aus irgendeinem Grund das Mounten der Crypto-Partition fehlschlagen (z.B. nach Änderung des User-Passwords).

Partition erzeugen:

Als LUKS-Volume eignen sich sowohl Containerdateien, als auch physikalische oder logische LVM-Partitionen. Am flexiblsten ist eine LVM-Partition, die bei Bedarf jederzeit vergrößert werden kann. Der folgende Befehl legt eine 3GByte große Partition ("Volume") mit Volume-Namen "home-bob" in der Standard-Volume-Gruppe "system" an, auf die dann mit /dev/system/homes zugegriffen werden kann. Anschließend wird das LUKS-Volume formatiert. Wichtig ist, dass die (oder mindestens eine alternative) Passphrase gleich dem Login-Passwort von User "bob" ist!

#  lvcreate -L 3G -n home-bob system
#  cryptsetup -c aes-xts-essiv:sha256 -s 256 -y luksFormat /dev/system/home-bob
WARNING!
========
Daten auf /dev/system/homes werden unwiderruflich überschrieben.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: 
Verify passphrase: 
Command successful.
#  cryptsetup luksOpen /dev/system/home-bob safe-bob
Enter LUKS passphrase: 
key slot 0 unlocked.
Command successful.

Die verschlüsselte Partition wurde damit auf safe-bob "gemappt". Unter /dev/mapper/ sollte nun das Device safe-bob auftauchen. Dieses Device kann nun formatiert und das Root-Verzeichnis und künftige Homedirectory dem User "bob" zugeordnet werden:

#  mkfs.xfs /dev/mapper/safe-bob
#  mount /dev/mapper/safe-bob /home/bob
#  chown bob:users /home/bob
#  umount /home/bob
#  cryptsetup luksClose safe-bob

Jetzt ist das Volume /des/system/home-bob bereit zum Mounten und Unmounten. Speziell für cryptsetup-luks gibt es zwei Befehle, die das Öffnen des Volumes und Mounten, bzw. Schließen und Unmounten zusammenfassen:

# /sbin/mount.crypt /dev/system/home-bob /home/bob
# /sbin/umount.crypt /home/bob

Zum Abschluss ist es noch empfehlenswert, einen Reserve-Schlüssel in die LUKS-Partition einzufügen:

#  cryptsetup luksAddKey /dev/system/home-bob

PAM konfigurieren

Nun muss man PAM so konfigurieren, dass es beim Login von User "bob" das Volume /dev/system/home-bob als /home/bob mit dem Befehl mount.crypto einbindet und dabei das Login-Password weitergibt:

  • In /etc/pam.d/login folgende Zeilen am Ende einfügen:
auth	 optional	pam_mount.so use_first_pass
session  optional       pam_mount.so use_first_pass
  • In /etc/security/pam.conf Zeile auskommentieren, die mit cryptmount beginnt und dann folgende Zeilen einfügen:
# For DM-CRYPT/LUKS:
cryptmount /sbin/mount.crypt %(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
cryptumount /sbin/umount.crypt %(MNTPT) 

# Linux encrypted home directory, using dm_crypt/luks:
volume bob crypt - /dev/system/home-bob /home/bob - - -

## Oder allgemein für alle Mitglieder der Gruppe "topsecret"
volume @@topsecret crypt - /dev/system/home-& ~ - - -

siehe auch Manpage zu pam_mount(8)

Die ersten Tests macht man am besten mit dem Login von der Textkonsole. pam.conf ist so vorkonfiguriert, dass es eine Reihe von Debug-Meldungen ausgibt. (Wechseln auf die Textkonsole mit Strg+ALT+F1, zurück mit Strg+ALT+F7)

Funktioniert das Mounten beim Login und Unmounten beim Logout auf der Textconsole, dann kann auch das graphische Login konfiguriert werden:

Im Verzeichnis /etc/pam.d in den Dateien gdm, xdm und kdm die gleichen Zeilen wie bei /etc/pam.d/login am Ende einfügen:

auth	 optional	pam_mount.so use_first_pass
session  optional       pam_mount.so use_first_pass

Home-Verzeichnis umziehen:

Vor dem ersten graphischen Login sollte noch das Orginal-Homeverzeichnis in die LUKS-Partition kopiert werden (als Root):

#  cd /home
#  tar -zcvf /tmp/home-bob-skel.tgz bob
#  mount.crypt /dev/system/home-bob /home/bob
#  tar -zxvf /tmp/home-bob-skel.tgz bob
#  umount.crypt /home/bob

Nicht vergessen: Selbstverständlich muss das Auto-Login für jeden Nutzer eines Crypto-Homeverzeichnisses deaktiviert werden.

Das Einrichten eines verschlüsselten Homeverzeichnisses st zugegeben vergleichsweise mühsam, noch fehlt eine Unterstützung durch yast. In künftigen Sitzungen wird man aber, wenn alles geklappt hat, gar nicht mehr merken, dass man auf einem Crypto-Filesystem arbeitet.

Probleme

LVM-Homeverzeichnis vergrößern

Eine mit DM-Crypt verschlüsselte LVM-Partition lässt sich online, d.h. während das Filesystem gemountet ist, genau so einfach vergrößern wie eine unverschlüsselte LVM-Partition. Im folgenden Beispiel wird Bobs Homeverzeichnis mit dem Filesystem XFS um 2GByte vergößert:

# lvextend -L +2G /dev/system/home-bob
# cryptsetup resize /dev/system/home-bob
# xfs_growfs /home/bob

Für ein ext3 oder Reiser-Filesystem lautet der Befehl (statt xfs_growfs):

# resize2fs /dev/mapper/safe-bob
bzw.
# resize_reiserfs /dev/mapper/safe-bob

Unmount beim Logout

Leider funktioniert das automatische Unmounten beim Logout nicht so zuverlässig. Schuld daran sind Daemon-Prozesse, insbesondere Beagle, die während des Ausloggens noch auf das Dateien des Homeverzeichnissen zugreifen. Ein möglicher Workaround wäre ein Cronjob, der regelmäßig mit dem Kommando "who" prüft, ob ein Benutzer eines gemounteten Crypto-Homeverzeichnisses noch eingeloggt ist und ggf. umount.crypt aufruft).

Password-Änderungen

Ändert Nutzer "bob" sein Login-Passwort, dann kann PAM das Crypto-Homeverzeichnis nicht mehr mounten. Das geänderte Passwort muss dann wieder mit dem Befehl

# cryptsetup luksAddKey /dev/system/home-bob

in die LUKS-Partition eingefügt werden. Dafür benötigt man Root-Rechte.

Hinweise

Crypto-Partitionen sind empfindlich gegen Schreibfehler: ein falsches Bit macht einen Block unleserlich und zerstört im schlimmsten Fall das darin enthaltene Dateisystem irreparabel. Ein regelmäßiges Backup sollte also Pflicht sein. Immerhin: sollte die Crypto-Home-Partition nicht mehr mountbar sein, so ist trotzdem ein Login auf das ursprüngliche angelegte, unverschlüsselte Homeverzeichnis möglich.

Weitere Links zum Thema

Zurück zu Security