ecryptfs/Beliebigen Ordner verschlüsseln

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte hilf mit, indem du diesen Artikel testest. Wiki/FAQ - häufig gestellte Fragen (Abschnitt „Wikiartikel-testen“).

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Ein Terminal öffnen

  2. Root-Rechte

  3. Erstellen von dauerhaften Einhängepunkten

Inhaltsverzeichnis
  1. Funktionsweise von ecryptfs
  2. Verschlüsselung mit frei wählbarer Passphr...
  3. Bei Anmeldung automatisch eingehängtes Ver...
  4. Problembehebung
  5. Links

ecryptfs bietet - neben der in Ubuntu mit Bordmitteln möglichen Verschlüsselung des gesamten Homeverzeichnisses oder des Ordners "~/Private" - auch die Möglichkeit, beliebige weitere Ordner zu verschlüsseln.

Dies kann beispielsweise als Ersatz für TrueCrypt oder EncFS sinnvoll sein, oder auch dazu verwendet werden, um Teile eines verschlüsselten Homeverzeichnisses auf eine zweite Festplatte auszulagern.

Im Folgenden werden diese beiden Möglichkeiten beschrieben.

Funktionsweise von ecryptfs

Um die folgenden Ausführungen besser verstehen zu können, ist ein grundlegendes Verständnis für die Funktionsweise von ecryptfs hilfreich.

ecryptfs speichert die verschlüsselten Daten in einem Verzeichnis und stellt diese in einem anderen Verzeichnis unverschlüsselt dar. Es ist etwa mit einem mount --bind, jedoch mit dazwischen geschalteter Verschlüsselung vergleichbar.

Um den verschlüsselten Ordner einhängen zu können, ist es stets notwendig, vorher die Passphrase im Kernel-Keyring zu hinterlegen. Aus der Passphrase leitet sich eine Signatur ab. Diese dient zur Zuordnung der Passphrase und muss daher beim Einhängen angegeben werden.

Für Einhängevorgänge sind grundsätzlich Root-Rechte notwendig. Ein Einhängen des verschlüsselten Verzeichnisses ohne weitere Konfiguration ist daher auch dem Systemverwalter vorbehalten, ein vorangestelltes sudo ist notwendig.
Durch einen Eintrag in der Datei /etc/fstab kann aber erreicht werden, dass das Einhängen auch mit normalen Benutzerrechten möglich ist.

Diese Unterscheidung, mit welchen Rechten der Einhängevorgang erfolgt, ist von Belang, da die Passphrase in den Keyring jenes Benutzers geladen werden muss, welcher danach das Einhängen durchführt. Beispielsweise wird ein Einhängen mit Root-Rechten nicht funktionieren, wenn zuvor die Passphrase im Keyring des Benutzers hinterlegt wurde.

Achtung!

Der Speicherort sowie der Einhängepunkt der verschlüsselten Daten darf nicht innerhalb eines bereits mit ecryptfs verschlüsseltem Verzeichnis liegen. Wenn also die Verschlüsselung des gesamten Homeverzeichnisses verwendet wird, müssen Verzeichnisse außerhalb dessen verwendet werden.

Bei Tests verursachte dies wiederholt Probleme.

Sollen die Verzeichnisse letztendlich im Benutzerverzeichnis bereitgestellt werden, wird auf die Möglichkeit von Symlinks verwiesen.

Experten-Info:

Es ist möglich ecryptfs so einzurichten, dass nur ein Verzeichnis verwendet und dabei eine Ansicht der unverschlüsselten Information über die verschlüsselten Dateien gelegt wird. Diese werden erst nach dem Aushängen des ecryptfs-Dateisystems wieder sichtbar.

Da dies ein abstrakteres Konzept ist, welches Anfängern oft nicht gleich zu zugänglich ist, wird im Weiteren auf diese Möglichkeit nicht näher eingegangen. Es ist jedoch in allen Fällen möglich, statt zweier Verzeichnisse immer nur eines zu verwenden.

Verschlüsselung mit frei wählbarer Passphrase

Eckdaten:

Einhängen

Zunächst müssen die beiden Ordner angelegt und mit den entsprechenden Rechten versehen werden.
Dabei steht ".geheim" für das Verzeichnis, dass die verschlüsselten Dateien enthält, "geheim" für die entsperrte Ansicht.

mkdir ~/.geheim ~/geheim
chmod 700 ~/.geheim ~/geheim
chown BENUTZER:GRUPPE ~/.geheim ~/geheim 

Die Einrichtung wird in einem Terminal mit folgendem Befehl aufgerufen:

$ sudo mount.ecryptfs /home/$USER/.geheim /home/$USER/geheim 

Daraufhin wird zunächst die Passphrase abgefragt. Ein vorheriges Laden der Passphrase in den Kernel-Keyring kann in diesem Fall somit entfallen.

Anschließend werden einige Einstellungen abgefragt. In den meisten Fällen können die Vorschläge durch Drücken der Eingabetaste übernommen werden, lediglich bei

Enable filename encryption (y/n) [n]: y 

wird für eine erhöhte Sicherheit empfohlen, die Verschlüsselung der Dateinamen einzuschalten. Anderenfalls sind die Dateinamen auch im ausgehängten Zustand im Klartext lesbar.

Sobald die Abfragen erledigt sind, ist das Verzeichnis eingehängt.

Testweise kann nun auch eine Datei angelegt werden.

$ touch ~/geheim/test.txt 

Ein ls zeigt nun die verschlüsselte Datei an:

$ ls ~/.geheim/
ECRYPTFS_FNEK_ENCRYPTED.FWbOeBfUnSnpYkTOd2D9gIm.covYF956EV7IZmlCozkw.nYzVVD0YUrJ1--- 

Verkürzte Variante

Will man nicht jedes Mal den kompletten Abfragedialog durchgehen, so empfiehlt es sich, die notwendigen Optionen dem mount-Befehl direkt zu übergeben.

Es wird dann lediglich die Passphrase abgefragt, die übergebenen Optionen werden übersprungen.

Der entsprechende Befehl sieht folgendermassen aus, wobei ecryptfs_sig und ecryptfs_fnek_sig natürlich an die eigenen Gegebenheiten anzupassen sind. Die Signaturen werden im Zuge des interaktiven Einhängevorganges ausgegeben.

sudo mount -t ecryptfs -o ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=y,ecryptfs_sig=daa8dae0cdecf593,ecryptfs_fnek_sig=daa8dae0cdecf593,ecryptfs_unlink_sigs,ecryptfs_key_bytes=16,ecryptfs_cipher=aes ~/.geheim ~/geheim 

Nicht-interaktives Einhängen

Will man den Abfragedialog komplett umgehen, so ist dies möglich, indem man den Befehl mount mit der Option -i aufruft.

Da nun aber auch die Passphrase nicht mehr abgefragt wird, muss diese zuvor händisch in den Kernel-Keyring geladen werden. Dies geschieht beispielsweise mit dem Befehl:

sudo ecryptfs-add-passphrase 

Danach kann das Einhängen mit dem bereits oben genannten, um -i erweiterten mount-Befehl erfolgen (Achtung: Signaturen anpassen!):

sudo mount -i -t ecryptfs -o ecryptfs_passthrough=n,ecryptfs_enable_filename_crypto=y,ecryptfs_sig=daa8dae0cdecf593,ecryptfs_fnek_sig=daa8dae0cdecf593,ecryptfs_unlink_sigs,ecryptfs_key_bytes=16,ecryptfs_cipher=aes ~/.geheim ~/geheim 

Einhängen mit Benutzerrechten

Wie bereits am Anfang des Artikels beschrieben sind zum Einhängen von Dateisystemen grundsätzlich Root-Rechte erforderlich.

Ausnahmen bilden (neben FUSE) nur jene Dateisysteme, für die zuvor ein Einhängepunkt in der Datei /etc/fstab definiert und dieser mit der Option user versehen wurde.

Für das Einhängen mit nicht-privilegierten Rechten ist somit zwingend dieser Eintrag zu erstellen.

Einrichtung

Voraussetzung für die nächsten Schritte ist, dass das betroffene Verzeichnis eingehängt ist.

Die Datei /etc/mtab enthält Informationen über die aktuell einhängten Dateisysteme. Da diese im gleichen Format wie die Einträge der /etc/fstab vorliegen, können diese direkt übernommen werden.

Dazu in einem Editor der Wahl die Zeile betreffend des eben erstellten Mounts aus der /etc/mtab in die /etc/fstab kopieren.

Alternativ kann dies auch in einem Terminal mit dem folgenden Befehl durchgeführt werden:

grep /home/$USER/geheim /etc/mtab | sudo tee -a /etc/fstab 

Anschließend muß die Zeile noch um 2 Optionen erweitert werden:

  • noauto: Verhindert ein automatisches Einhängen beim Starten.

  • user: Ermögicht auch normalen Benutzern das Einhängen.

Die Zeile sollte letztendlich folgendermaßen aussehen:

/home/BENUTZERNAME/.geheim /home/BENUTZERNAME/geheim ecryptfs noauto,user,rw,ecryptfs_sig=daa8dae0cdecf593,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_fnek_sig=daa8dae0cdecf593,ecryptfs_unlink_sigs 0 0

Einhängen

Um das eingerichtete Verzeichnis zu verwenden sind zwei Schritte notwendig.

Zunächst muß die Passphrase im Kernel-Keyring hinterlegt werden. Dies geschieht mit dem Befehl (ohne sudo!)

ecryptfs-add-passphrase 

Anschließend kann das Verzeichnis mit dem Befehl

mount -i ~/geheim/ 

eingehängt und somit entsperrt werden.

Dabei ist wieder die Option -i zu verwenden, um den Einrichtungsdialog zu umgehen.

Aushängen

Das Aushängen erfolgt mit dem Befehl

umount ~/geheim/ 

Da in der /etc/fstab die Option ecryptfs_unlink_sigs eingetragen wurde, wird beim Aushängeprozess auch die Passphrase aus dem Kernel-Keyring gelöscht. Für ein erneutes Einhängen ist die neuerliche Eingabe der Passphrase erforderlich.

Verschlüsselung der Passphrase

Bei der Verwendung einer ausreichend langen oder zufälligen Passphrase, wird die manuelle Eingabe dieser immer schwieriger bis nahezu unmöglich werden.

Ecryptfs bietet daher auch die Möglichkeit, eine Passphrase mit einem Passwort zu verschlüsseln, um sie anschliessend verschlüsselt abspeichern zu können. Ubuntu verwendet dieses Verfahren auch für die Verschlüsselung des Benutzerverzeichnisses bzw des Private-Ordners.

Einrichtung

Die Verschlüsselung erfolgt im Terminal mit dem Befehl ecryptfs-wrap-passphrase mit Angabe der Datei, in der das Ergebnis gespeichert werden soll. Beispielsweise:

ecryptfs-wrap-passphrase verschluesselte_passphrase.txt 

Anschließend wird die ecrypt-Passphrase abgefragt ...
(diese kann auch mittels Copy & Paste eingefügt werden, also entweder über das Menü -> Bearbeiten -> Einfügen oder mittels der Tastenkombination Strg + + V )

Passphrase to wrap:  

... und zuletzt ist das Passwort zur Verschlüsselung der Passphrase einzugeben:

Wrapping passphrase: 

Die verschlüsselte Passphrase ist dann in der Datei verschluesselte_passphrase.txt abgespeichert.

Das Ergebnis kann mit folgendem Befehl kontrolliert werden. Bei Eingabe des korrekten Passwortes wird die Passphrase in Klartext ausgegeben.

ecryptfs-unwrap-passphrase verschluesselte_passphrase.txt 
Passphrase: 
DasisteineTest-Passphrase 

Verwendung

Das Einfügen der Passphrase in den Kernel-Keyring erfolgt dann mit dem Befehl ecryptfs-insert-wrapped-passphrase-into-keyring, wieder unter Angabe der vorher erzeugten Datei, welche die verschlüsselte Passphrase enthält.

ecryptfs-insert-wrapped-passphrase-into-keyring verschluesselte_passphrase.txt 
Passphrase: 
Inserted auth tok with sig [a86fb90127b96b92] into the user session keyring 

Das Einhängen erfolgt nach einer der oben beschrieben Methoden. Je nachdem, ob der Einhängevorgang als Root- oder als normaler Benutzer erfolgen wird, muss das Einfügen der Passphrase mit den entsprechenden Rechten erfolgen (also gegebenenfalls mit einem vorangestelltem sudo).

Bei Anmeldung automatisch eingehängtes Verzeichnis

Eckdaten:

Hinweis:

Es wird die Verwendung eines verschlüsselten Benutzerverzeichnisses vorausgesetzt. Für die Verschlüsselung eines einzelnen Verzeichnisses ohne Verwendung eines verschlüsselten Benutzerverzeichnisses wird die Einrichtung und Verwendung des Verzeichnisses ~/Private empfohlen, Hinweise dazu unter ecryptfs/Einrichten (Abschnitt „Einrichtung-Verzeichnis-Private“)

Möchte man nun beispielsweise den Thunderbird-Profil-Ordner verschlüsseln, so kann man das mit Hilfe von Symlinks realisieren.

Allgemeine Information

Wenn eine Verschlüsselung entweder des gesamten Benutzerverzeichnisses oder des Ordners ~/Private mit Hilfe der Ubuntu-Bordmittel eingerichtet wurde, so wird das jeweilige Verzeichnis beim Anmeldevorgang durch PAM (Pluggable Authentication Modules) eingehängt.

Das Modul pam_ecryptfs übernimmt das Anmeldepasswort, entschlüsselt damit die Passphrase, hinterlegt dieses im Kernel-Keyring und hängt das Verzeichnis am gewünschten Ort ein.

Dieses Verhalten macht sich diese Anleitung zunutze.
Nachdem die gleiche Passphrase und daraus resultierend auch die gleichen Signaturen verwendet werden, wird das Laden der Passphrase in den Keyring dem Modul pam_ecryptfs überlassen.

Nachdem pam_ecryptfs nur mit einem, von Ubuntu vorkonfiguriertem Verzeichnis umgehen kann wird für das automatischen Einhängen ein weiteres PAM-Modul (pam_mount) verwendet.

Einrichtung

Hinweis:

Für das Verständnis der folgenden Ausführungen wird empfohlen, auch den ersten Abschnitt durchzulesen. Es werden eventuell nicht alle dortigen Ausführungen wiederholt.

Für das Beispiel wird angenommen, dass eine Festplatte namens "2nd_hdd" existiert, welche beim Start bereits unter /media/2nd_hdd eingehängt wurde.

Zunächst müssen selbstverständlich wieder die beiden Ordner angelegt und erforderlichenfalls mit den entsprechenden Rechten versehen werden.

mkdir /media/2nd_hdd/.geheim media/2nd_hdd/geheim
chmod 700 /media/2nd_hdd/.geheim media/2nd_hdd/geheim
chown BENUTZER:GRUPPE /media/2nd_hdd/.geheim media/2nd_hdd/geheim 

Da die gleiche Passphrase wie für das vorkonfigurierte Verzeichnis verwendet wird, kann die obig beschriebene Ersteinrichtung übersprungen und die erforderlichen Angaben können direkt der /etc/mtab aus der Zeile, welche das Benutzerverzeichnis beschreibt, entnommen und in die /etc/fstab übertragen werden.

Dies geschieht entweder mit einem Texteditor der Wahl oder eben im Terminal, diesmal mit dem Befehl:

grep /home/$USER/.Private /etc/mtab | sudo tee -a /etc/fstab 

Anschließend muß ebenfalls die Datei /etc/fstab editiert werden.

Die entsprechende Zeile der /etc/fstab sollte schließlich so aussehen:

/media/2nd_hdd/.geheim /media/2nd_hdd/geheim ecryptfs noauto,user,ecryptfs_check_dev_ruid,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_sig=bba5322e6b198732,ecryptfs_fnek_sig=de277bb623fd467c 0 0

Das Verzeichnis kann nun schon eingehängt und getestet werden.
Zwingend erforderlich ist dabei erneut die Verwendung der Option -i.

$ mount -i media/2nd_hdd/geheim/
$ touch media/2nd_hdd/geheim/test.txt
$ ls /media/2nd_hdd/.geheim/
ECRYPTFS_FNEK_ENCRYPTED.FWbS7riq6zp4T-QHDQIzEkaI3VmLeOS0h8DGCRWss-F8TsFQu6HQzJ3bJU-- 

Automatisches Einhängen

Das PAM-Modul pam_ecryptfs kann bei der Anmeldung nur das vorkonfigurierte Verzeichnis einhängen. Um das selbstdefinierte Verzeichnis einzuhängen, ist ein weiteres Modul notwendig. Dazu wird pam_mount verwendet, welches nachinstalliert werden muß. Im Terminal geschieht dies bespielsweise mit:

sudo apt-get install libpam-mount 

Die Einrichtung erfolgt durch Bearbeitung der Konfigurationsdatei /etc/security/pam_mount.conf.xml mit Rootrechten in einem Texteditor der Wahl.

Dazu wird nach dem Kommentar "<!-- Volume definitions -->" folgender Abschnitt eingefügt.

Dabei definiert

		<!-- Volume definitions -->

<volume user="BENUTZERNAME" noroot="1" fstype="ecryptfs" path="/media/2nd_hdd/.geheim"/>
<lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount>

		<!-- pam_mount parameters: General tunables -->

Bei korrekter Einrichtung wird nun das Verzeichnis bei der Anmeldung automatisch entsperrt und bei der Abmeldung gesperrt werden.

Problembehebung

Kernel-Keyring einsehen

Zur Überprüfung, welche Passphrasen im Kernel-Keyring geladen sind, kann der Befehl keyctl verwendet werden.

Für nicht-privilegierte Bentutzer lautet der Befehl:

keyctl list @u 

Für den Benutzer root muss ein sudo vorangestellt werden:

sudo keyctl list @u 

Log-Datei für pam_mount

Sollte das Einhängen durch pam_mount fehlschlagen, können die entsprechenden Fehlermeldungen der Datei /var/log/auth.log entnommen werden.