Ubuntu 14.04 Trusty Tahr
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
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.
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.
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.
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.
Die Passphrase kann frei gewählt werden und muss nicht mit Login-Passwort übereinstimmen.
Das Verzeichnis wird händisch eingehängt.
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---
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
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
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.
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
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.
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.
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.
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
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
).
Es wird ein beliebiges Verzeichnis außerhalb des und zusätzlich zum bereits verschlüsselten Benutzerverzeichnisses verschlüsselt.
Das Verzeichnis wird beim Anmelden automatisch entsperrt.
Um eine automatische Entsperrung zu erreichen, wird die gleiche Passphrase wie für das Homeverzeichnis verwendet.
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
Möchte man nun beispielsweise den Thunderbird-Profil-Ordner verschlüsseln, so kann man das mit Hilfe von Symlinks realisieren.
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.
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.
Zunächst sind das Verzeichnis und der Einhängepunkt anzupassen.
Weiters müssen wieder die Option noauto
(das Einhängen erfolgt erst beim Einloggen und nicht schon beim Systemstart) und die Option user
hinzugefügt werden.
Die Option ecryptfs_unlink_sigs
wird entfernt, da sonst bei einem manuellen Aushängen der Schlüssel auf dem Kernel-Keyring entfernt würde und ein einfaches erneutes Einhängen nicht mehr möglich wäre.
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--
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
die erste Zeile den Einhängepunkt. Die Optionen sind an jene der /etc/fstab angelehnt, lediglich user
gibt an, dass das Einhängen nur für den Benutzer mit dem angegebenen Benutzernamen versucht werden soll.
Die zweite Zeile bestimmt, dass der Einhängevorgang nicht mit dem Befehl mount
, sondern wieder mit mount -i
durchgeführt wird.
<!-- 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.
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
Sollte das Einhängen durch pam_mount
fehlschlagen, können die entsprechenden Fehlermeldungen der Datei /var/log/auth.log
entnommen werden.
Diese Revision wurde am 21. November 2015 03:24 von mrkramps erstellt.