Mit PAM-Mount beim Anmelden verschlüsselte Partitionen einhängen

Aus LinuxUser 02/2009

Mit PAM-Mount beim Anmelden verschlüsselte Partitionen einhängen

Generalschlüssel

Verschlüsseln sichert Daten auf mobilen Datenträgern. Mit PAM-Mount binden Sie solche Laufwerke komfortabel ein, denn das Programm entsperrt beim Anmelden am System gleichzeitig den externen Datenspeicher.

Manche Verschlüsselungsysteme fragen zum Entschlüsseln ein Passwort ab. Allerdings trägt gerade die gehäufte Eingabe von Passwörtern dazu bei, dass diese Methoden als unkomfortabel gelten und nicht zum Einsatz kommen. Das gilt besonders, wenn es sich um viele verschiedene Passwörter handelt, wie für Mailkonto, Arbeitsplatz-PC und Notebook sowie die verschlüsselte Partition auf der mobilen Festplatte.

Als Kompromiss aus Sicherheit und Komfort bietet es sich an, bei einer klar definierten Umgebung das gleiche Passwort für zwei verschiedene Anmeldevorgänge zu nutzen – zum Beispiel das Anmelden am System sowie als Passphrase zum Entschlüsseln einer Partition oder eines Verzeichnisses. Genau diese Möglichkeit bietet das bereits seit 1995 existente Linux-PAM[1]. Nahezu alle Distributionen enthalten diese Software.

Modul-Baukasten

Linux-PAM funktioniert nach einem einfachen Prinzip: Meldet Sie sich am System an, arbeitet PAM die einzelnen Module wie Glieder einer Kette in der Reihenfolge ab, wie es sie in einer entsprechenden Konfigurationsdatei unterhalb von /etc/pam.d findet. Bei Ubuntu liegen dort bereits Dateien wie beispielsweise gdm oder kdm, die einen Login-Vorgang beschreiben. Sie steuern das grafische Anmelden für Gnome und KDE.

Des weiteren finden sich dort login für die Terminals und sshd für das Anmelden von entfernten Rechnern. Linux-PAM unterteilt die Anmeldeprozedur in vier Schritte. Jeder Schritt hat eine eigene Konfiguration, die mit common- beginnt, auf das ein Bezeichner für den jeweiligen Abschnitt (siehe Tabelle “Aufgabenteilung”) folgt.

Aufgabenteilung

Bezeichner Funktion
account überprüft, ob der Benutzer berechtigt ist sich anzumelden – abhängig von beispielsweise der Tageszeit oder der Systemlast
auth authentifiziert den Benutzer und erzeugt die notwendigen Daten wie die User- und die Group-ID
password überprüft das Benutzerpasswort
session Aufgaben, die PAM am Ende der Anmeldung abarbeitet (Beispiel: Mounten von Verzeichnissen)

Die Programmierschnittstelle von Linux-PAM ermöglicht es, die Module den jeweiligen Anforderungen anzupassen. Das bereits im PAM-Paket enthaltene Modul pam_cracklib.so findet sich in der Konfiguration common-password und definiert, wieviele Anmeldeversuche erlaubt sind, wie lang das Passwort sein muss und welcher Komplexität es entsprechen soll. Näheres zu einzelnen Beispiel-Modulen finden Sie in der Tabelle “Beispielmodule” und in den jeweiligen Manpages.

Beispielmodule

Modul Aufgabe
pam_unix.so prüft den Benutzer gegen die Datei /etc/passwd.
pam_nologin existiert die Datei /etc/nologin, gibt PAM den Inhalt der Datei aus und erlaubt ausschließlich root das Anmelden.
pam_env.so setzt und erlaubt das Setzen von Umgebungsvariablen.
pam_limits.so erlaubt es, für Benutzer und Gruppen bestimmte Maximalwerte in Bezug auf die Systemlast in der Datei /etc/security/limits.conf zu definieren (Beispiel: Anzahl der Prozesse für einen Benutzer oder Anzahl der offenen Dateien).

PAM-Mount

PAM-Mount [2] gehört zu den Spezialisten unter den Modulen für Linux-PAM. Das aus einem freien Projekt entwickelte Modul ermöglicht es, verschiedene Dateisysteme automatisch beim Anmelden einzuhängen. Dabei dürfen auch Netzwerkprotokolle wie SMB/CIFS oder NFS zum Einsatz kommen. Darüber hinaus unterstützt PAM-Mount alle gängigen lokalen Dateisysteme, solche im Userspace mit FUSE[3] und verschlüsselte mit DM-Crypt/LUKS[4] oder EncFS [5] via FUSE.

Da die Konfiguration etwas mehr umfasst, als nur Kommandozeilenoptionen an ein Skript in der PAM-Konfiguration zu übergeben, hält PAM-Mount eine eigene Konfigurationsdatei parat. Die Arbeit mit dieser /etc/security/pam_mount.conf.xml erscheint zunächst gewöhnungsbedürftig, da es sich um eine XML-Datei handelt. Hatten Sie aber bereits einmal mit HTML-Dateien zu tun, dürfte Ihnen auch der Umgang mit XML keine Probleme bereiten.

Die Installation von PAM-Mount auf erledigen Sie unter den gängigen Distributionen bequem per Paketmanager. Auf Debian-basierten Systemen genügt ein schlichtes sudo apt-get install libpam-mount im Terminal.

Danach schalten Sie als erstes in der Konfigurationsdatei den Debug-Modus ein. Das hilft bei ersten Tests, da der Modus mögliche Probleme deutlich beschreibt. Haben Sie eine funktionierende Konfiguration, deaktivieren Sie den Debug-Modus wieder, in dem Sie das Attribute enable auf 0 zurücksetzen. In /etc/security/pam_mount.conf.xml sieht das Einschalten des Debug-Modus folgendermaßen aus:

<debug enable="1" />

Um beim Anmeldevorgang gleichzeitig die Ausgabe des Debug-Modus sehen zu können, müssen Sie die Datei /etc/pam.d/login für PAM-Mount vorbereiten, indem Sie die Datei um die Zeile @include common-pammount erweitern. Beim grafischem Login erscheint die Ausgabe allerdings nur in /var/log/auth.log. Das macht erste Tests mit dem Modul äußerst umständlich. Einfacher geht es, wenn Sie mit [Strg]+[Alt]+[F3] zu einem Terminal wechseln und sich dort anmelden.

Es empfiehlt sich auch, ein Terminal mit einer Benutzer-Session offen zu halten, die es erlaubt, mit Sudo zu arbeiten. Sollte sich ein Fehler in die Konfiguration einschleichen, funktioniert unter Umständen das gesamte Anmelden nicht mehr. Da hilft dann nur noch eine Rescue-CD weiter, um Linux-PAM wieder in den Ausgangszustand zu versetzen.

Mit einer simplem Anweisung in der Konfigurationsdatei PAM-Mount erlauben Sie benutzereigene Konfigurationen im Home-Verzeichnis. Dazu kommentieren Sie folgende Zeile aus:

<!--
<luserconf name=".pam_mount.conf.xml" />
-->

Als Kommentarzeichen fungieren dabei, wie bei HTML, das führende <!-- sowie --> als Abschluss. Haben Sie diese entfernt, darf jeder Benutzer im System eine eigene Konfigurationsdatei in der Datei ~/.pam_mount.conf.xml in seinem Home-Verzeichnis erstellen. Diese liest das Modul beim Anmelden.

Die anderen Einstellungen in der Konfigurationsdatei beschreiben Befehle zum Einhängen verschiedener Dateisysteme, die Sie in aller Regel nicht benötigen. Möchten Sie trotzdem Hand anlegen, helfen Ihnen die ausführlichen Kommentare und Beispiele in der Datei bei Schreiben der gewünschten Regel. Eine Manpage existiert ebenfalls.

Linux-PAM konfigurieren

Damit Linux-PAM das Modul PAM-Mount beim Anmelden abarbeitet, integrieren Sie es in die Linux-PAM-Konfiguration. Die Installation von PAM-Mount unter Ubuntu 8.10 installiert die Datei /etc/pam.d/common-pammount und erweitert damit die vier Aufgaben, die Linux-PAM beim Anmelden durcharbeitet, um eine fünfte. Darin findet sich der folgende Code:

auth       optional   pam_mount.so try_first_pass
session    optional   pam_mount.so

Jetzt kommt es darauf an, in welchem Fall sie die verschlüsselte Partition einhängen möchten – danach richtet sich die jeweiligen Konfiguration. Möchten Sie beispielsweise, dass das System die verschlüsselte Partition nur beim grafischen Anmelden mountet, fügen Sie @include common-pammount in die Datei /etc/pam.d/gdm (Gnome) oder /etc/pam.d/kdm (KDE) ein. Ein Beispiel für das Anmelden mit PAM-Mount unter Kubuntu mit KDE findet sich in Listing 1.

Listing 1
#
# /etc/pam.d/kdm - specify the PAM behaviour of kdm
#
auth       required     pam_nologin.so
auth       required     pam_env.so readenv=1
auth       required     pam_env.so readenv=1 envfile=/etc/default/locale
@include common-pammount
@include common-auth
session    required     pam_limits.so
@include common-account
@include common-password
@include common-session

Achten Sie darauf, dass common-pammount immer vor common-auth steht. Findet sich in der Konfiguration oder einer der Include-Dateien ein Modul mit sufficient als Abbruchbedingung, stoppt Linux-PAM das Abarbeiten aller weiteren Module nach der Eingabe eines gültigen Passworts. Das führt dann unter Umständen dazu, dass PAM-Mount nicht mehr zum Einsatz kommt. Die Bedingung required hingegen arbeitet restriktiver. In der Tabelle “Abbruchbedingungen” finden Sie eine Liste der möglichen Abbruchoptionen.

Abbruchbedingungen

Bedingung Erklärung
required Hat Linux-PAM das Modul abgearbeitet, führt es zwar die folgenden noch aus. Allerdings haben diese keinen Einfluss mehr auf das Ergebnis – gleichgültig, ob erfolgreich oder nicht erfolgreich ausgeführt.
requisite Läuft das Modul erfolgreich durch, arbeitet Linux-PAM den Rest der Module ab. Der erfolgreiche Status bleibt solange bestehen, bis ein anderes Modul einen Fehler meldet. Bricht das Modul sofort erfolglos ab, endet das Anmelden an diesem Punkt mit einem Fehler.
sufficient Läuft das Modul erfolgreich durch, genügt das Linux-PAM, und es beendet das Verarbeiten aller weiteren Module. Für den Fall, dass das Modul fehlschlägt, fährt Linux-PAM mit den folgenden Modulen fort.
optional PAM verarbeitet das Modul zwar, ignoriert aber das Ergebnis.

In aller Regel findet sich common-pammount als erstes Modul ganz gut zurecht, was am Parameter try_first_pass liegt. Dieser gehört zu den in Linux-PAM feststehenden Optionen; alle Module dürfen ihn verwenden. Er veranlasst Linux-PAM, das Passwort eines vorangegangenen Moduls wiederzuverwenden und zu prüfen, ob es auch für dieses Modul passt. Anders als die Option use_first_pass fragt try_first_pass bei einem ungültigen Passwort erneut nach.

Eigene Konfiguration

Wie bereits gezeigt, reicht das Auskommentieren einer Zeile in der Konfiguration von PAM-Mount, um eigene Konfigurationen im Home-Verzeichnis abzulegen. Eine solche Beispielkonfiguration für eine mit DM-Crypt und LUKS verschlüsselte Partition auf einem mobilen Datenträger findet sich in Listing 2. Das Format weist im wesentlichen zwei Elemente auf: In einem umschließenden Element <pam_mount></pam_mount> befinden sich Elemente mit dem Namen <volume />, deren Attribute enthalten die Werte zum Einbinden der Partition (user, fstype, path und mountpoint sowie options).

Listing 2
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd">
<pam_mount>
  <volume user="ruth" fstype="crypt" path="/dev/disk/by-uuid/0e9413a8-6370-4d69-980f-51dd594ae7ae" mountpoint="~/mnt/usbdrive" options="" />
</pam_mount>

Der Benutzername gibt an, wer dieses Volumen einhängen darf. Der Dateisystemtyp macht klar, um welche Art Partition es sich handelt. Der Gerätepfad schließlich enthält die Angaben für die einzubindende Quelle und den Mountpoint, unter dem Sie die Daten nach dem Einbinden erreichen. Mögliche Optionen stünden in options, was aber im konkreten Beispiel nicht der Fall ist. Der Dateisystemtyp crypt besagt, dass für diesen Typ der XML-Parameter cryptmount in der Konfigurationsdatei /etc/security/pam_mount.conf.xml beim Einhängen zum Einsatz kommt. Dahinter versteckt sich mit dem Befehl mount.crypt das Kommando, das Sie beim manuellen Einbinden von Partitionen verwenden, die mit DM-Crypt/LUKS verschlüsselt wurden.

Beim Quellpfad des einzuhängenden Gerätes kommt eine besondere Schreibweise zum Einsatz: Gerade bei mobilen Datenträgern, die Sie über einen USB-Port anschließen, ändert sich die Reihenfolge der Geräte gelegentlich: Was eben noch als /dev/sdc1 auftauchte, erscheint morgen unter Umständen als /dev/sdd1 im System.

Besser eignet sich zum Ansprechen einer solchen Partition dagegen der Universally Unique Identifier (UUID), den Udev als symbolischen Link auf das eigentliche Gerät in /dev ablegt. Sie lesen die UUID für die jeweilige Partition mit dem Befehl sudo /lib/udev/vol_id --uuid Partition aus und nutzen sie dann zum Mounten der Partition, so wie in Listing 2 angegeben.

Neuer Schlüssel

Wenn der Debug-Modus von PAM-Mount bei einem ersten Test der Konfiguration zeigt, dass das System nicht in der Lage war, die Partition zu mounten, liegt das unter Umständen daran, dass sich die Passwörter für Login und Entschlüsseln unterscheiden.

Linux-PAM reicht mit der Option try_first_pass das Passwort des vorherigen Moduls ans folgende weiter – so auch an PAM-Mount, das erlaubt, das Login-Passwort als Passphrase zum Entschlüsseln zu nutzen. Haben Sie dieses verschlüsselte Laufwerk bereits früher mit einer anderen Passphrase angelegt, gibt Ihnen LUKS die Möglichkeit, dem Header der DM-Crypt-Partition eine weitere Passphrase hinzuzufügen. Eine neue Passphrase in einem anderen Slot erzeugt der folgende Befehl:

sudo cryptsetup --key-slot Slot-Nummer luksAddKey Gerät

Um zu prüfen, ob das auch funktioniert hat, lassen Sie sich mittels sudo cryptsetup luksDump Gerät die bereits mit einer Passphrase besetzten Slots anzeigen.

Fazit

PAM-Mount eignet sich als Multitalent des Mountens bestens für den privaten wie auch für den beruflichen Bereich. Unglücklicherweise arbeitet mount.crypt nicht wie ein echter Mount-Befehl, also beispielsweise mount.ext3.

Das äußert sich darin, dass Sie mount.crypt keine Optionen mit -o übergeben dürfen. Demzufolge gelingt es nicht, benutzerspezifischen Daten wie UID oder GID durchzureichen. Das führt dazu, dass das System die Partition als root einhängt. Als kleinen Workaround richten Sie auf dem Volume ein Verzeichnis mit restriktiven Benutzerrechten ein, in dem Sie arbeiten.

Darüber hinaus arbeitet PAM-Mount nicht mit Partitionen zusammen, die Sie mit Truecrypt ab Version 5 angelegt haben: Der Befehl truecrypt fragt beim Mounten interaktiv nach dem Einhängepunkt, was sich zum Skripten nicht eignet.

Glossar

PAM

Pluggable Authentication Modules. Softwarebibliothek, die eine API für modulare Authentisierungsdienste zur Verfügung stellt. Teil des Standards “X/Open Single Sign-on” (XSSO).

FUSE

Filesystem in Userspace. Ein Kernel-Modul, das es ermöglicht, Dateisystem-Treiber aus dem Kernel-Mode in den User-Mode zu verlagern. So können auch nicht-privilegierte Benutzer eigene Dateisysteme einhängen.

LUKS

Linux Unified Key Setup. Erweitert die mit DM-Crypt verschlüsselten Daten um einen zusätzlichen Header mit Metadaten sowie Platz für bis zu acht Schlüssel.

Slot

LUKS erlaubt es, bis zu acht Passwörter für ein Volume zu vergeben. Das erleichtert beispielsweise den Wechsel des persönlichen Passworts, wobei die Daten weiter verfügbar bleiben. Die Slots fungieren dabei als Speicherort für die Passwörter.

Infos

[1] Linux-PAM: http://www.kernel.org/pub/linux/libs/pam/

[2] PAM-Mount: http://pam-mount.sourceforge.net

[3] File System in Userspace (FUSE): http://fuse.sourceforge.net

[4] DM-Crypt/LUKS: http://luks.endorphin.org

[5] EncFS: http://www.arg0.net/encfs

LinuxUser 02/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben