[[Vorlage(Getestet, bionic)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:sudo: Root-Rechte] [:fstab: Erstellen von dauerhaften Einhängepunkten] }}} [[Inhaltsverzeichnis(1)]] [: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 [:VeraCrypt:] oder [:GoCryptFS:] 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#Einzelne-Ordner-einbinden: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 [:fstab:/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. {{{#!vorlage Warnung 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 [:ln#Symbolische-Verknuepfungen:Symlinks] verwiesen. }}} {{{#!vorlage Experten 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: == * Die Passphrase kann frei gewählt werden und muss nicht mit Login-Passwort übereinstimmen. * Das Verzeichnis wird händisch eingehängt. == 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. {{{#!vorlage Befehl mkdir ~/.geheim ~/geheim chmod 700 ~/.geheim ~/geheim chown BENUTZER:GRUPPE ~/.geheim ~/geheim }}} Die Einrichtung wird in einem Terminal mit folgendem Befehl aufgerufen: {{{#!vorlage Befehl $ 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 {{{#!vorlage Befehl 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. {{{#!vorlage Befehl $ touch ~/geheim/test.txt }}} Ein [:ls:] zeigt nun die verschlüsselte Datei an: {{{#!vorlage Befehl $ 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. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo ecryptfs-add-passphrase }}} Danach kann das Einhängen mit dem bereits oben genannten, um `-i` erweiterten mount-Befehl erfolgen (Achtung: Signaturen anpassen!): {{{#!vorlage Befehl 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 [:fstab:/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: {{{#!vorlage Befehl 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!''') {{{#!vorlage Befehl ecryptfs-add-passphrase }}} Anschließend kann das Verzeichnis mit dem Befehl {{{#!vorlage 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 {{{#!vorlage 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 [:pwgen: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: {{{#!vorlage Befehl 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 [[Vorlage(Tasten, strg+shift+v)]]))-~ {{{#!vorlage Befehl Passphrase to wrap: }}} ... und zuletzt ist das Passwort zur Verschlüsselung der Passphrase einzugeben: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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: == * 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. {{{#!vorlage 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#Einrichtung-Verzeichnis-Private:] Möchte man nun beispielsweise den Thunderbird-Profil-Ordner verschlüsseln, so kann man das mit Hilfe von [:ln#Symbolische-Verknuepfungen: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 == {{{#!vorlage 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. {{{#!vorlage Befehl 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: {{{#!vorlage 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`. {{{#!vorlage Befehl $ 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: {{{#!vorlage Befehl 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 `""` 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. {{{ mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)" }}} 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: {{{#!vorlage Befehl keyctl list @u }}} Für den Benutzer `root` muss ein sudo vorangestellt werden: {{{#!vorlage Befehl 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. = Links = * [:ecryptfs:] * [archwiki:ECryptfs:umfangreiche Dokumentation im Arch-Wiki] {en} #tag: Verschlüsselung