[[Vorlage(Getestet, general )]] {{{#!vorlage Wissen [:Rechte:Rechte für Dateien und Ordner verändern] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis]] {{{#!vorlage Hinweis Daten im "verschlüsselten" Bereich sind, sobald der jeweilige Benutzer sich angemeldet hat, auch prinzipiell von anderen Nutzern oder Anwendungen lesbar. Falls dies nicht gewünscht ist, sind die Rechte [1] entsprechend zu setzen. }}} = Nutzung = [http://ecryptfs.sourceforge.net/ ecryptfs-utils] {en} bietet eine sehr einfache Möglichkeit * einen einzelnen Ordner ('''~/Private''') zu verschlüsseln. Die Ent- bzw. Verschlüsselung geschieht dabei automatisch beim Ein-/Ausloggen des Benutzers. oder * das gesamte Homeverzeichnis eines Benutzers zu verschlüsseln. Die Entschlüsselung geschieht dabei automatisch beim Einloggen des Benutzers, die Verschlüsselung jedoch erst beim Herunterfahren des Rechners! In vielen Fällen reicht das für die Nutzung schon aus. {{{#!vorlage Experten Es kann vorkommen, dass Programme noch vor dem Einloggen bzw. gleich danach auf das Homeverzeichnis zugreifen wollen, aber weil die ''"Freigabe"'' noch nicht abgeschlossen ist, einen Fehler melden. Dieses muss man gezielt behandeln und ggf. in den '''init'''-Dateien die Startsequenz verändern oder die Programme aus den Diensten heraus nehmen bzw. neu orientieren! Siehe u.a Beispiel unter [#Separate-Partition-einbinden Separate Partition einbinden]. Um das Volumen für die Codierung/Decodierung in Grenzen zu halten, sollte man auf Folgendes achten: Symbolische Links wirken nur von außen nach innen, d.h. Daten, die im codierbaren Bereichen liegen, können von außen mit einem symbolischen Link aufgerufen werden und werden codiert, Daten die außerhalb liegen und mit symbolischen Links vom inneren Bereich angesprochen werden, werden __nicht__ codiert. Mit diesem Wissen kann man nun dafür sorgen, das Daten, die nicht unbedingt codiert werden müssen oder ein sehr großes Volumen darstellen (z.B. ISOs, Videos), via symbolischen Link nach außerhalb zu verlegen und somit die Rechenarbeit (-zeit) zu verringern. }}} == Automatisches Login == {{{#!vorlage Warnung Bei einem [:GDM#Benutzer-ohne-Passwort-einloggen: automatischen Login] ist eine direkte Nutzung des Verzeichnisses nicht möglich, weil sonst der Aspekt der Daten-Sicherheit unterlaufen würde. }}} Um die Daten nach einem automatischen Login zugänglich zu machen, muss man das [:Homeverzeichnis:] des Benutzers oder das Verzeichnis '''~/Private''' öffnen und auf die Datei '''Access Your Private Data''' klicken. Es öffnet sich daraufhin ein Terminal [2], in das man das Login-Passwort eingeben kann. Nach Schließen des Terminals und des Verzeichnisses sind die Daten wie oben beschrieben zugänglich. Oder benutzt das folgend beschriebene manuelle Entsperren. == Manuelles Sperren Entsperren == Will man das Verzeichnis '''~/Private''' sperren, während man eingeloggt ist, gibt man im Terminal [1] ein: {{{#!vorlage Befehl ecryptfs-umount-private }}} Umgekehrt kann man das Verzeichnis '''~/Private''' auch wieder manuell entsperren und damit den Zugriff auf die Daten freigeben, indem man in einem Terminal [1] eingibt: {{{#!vorlage Befehl ecryptfs-mount-private }}} == Wechsel Login-Passwort == Bei einer Änderung des Benutzerpassworts wird automatisch im Verschlüsselungssystem die relevante Anpassung der Verschlüsselung durchgeführt. Dies geschieht unabhängig davon, ob die Passwortänderung mittels einer Desktop-Anwendung oder in einer Konsole mittels Befehl `passwd` durchgeführt wird. Allerdings greift dieser Mechanismus nicht, wenn der Administrator einem anderen Benutzer ein (neues) Passwort setzt. In diesem Fall können folgende Anweisungen weiterhin hilfreich sein. Für den reibungslosen Ablauf der Ver- und Entschlüsselung der Daten ist es notwendig, dass das Benutzerpasswort mit dem Passwort übereinstimmt, welches zum Schutz des ecryptfs-Schlüssels verwendet wird. Normalerweise kümmert sich das System um diesen Aspekt. Sollte es dennoch vorkommen, dass das (aktuelle) Benutzerkennwort und Schutzkennwort nicht mehr übereinstimmen, kann dies auf folgende Weise korrigiert werden. Wahrscheinlich ist es in diesen Fällen so, dass das Schutzkennwort noch einem früheren Benutzerkennwort entspricht. {{{#!vorlage Warnung Bei allen folgenden Befehlen weder ein `sudo` einsetzen noch ein `Administrator-Terminal` benutzen! }}} 1. Backup der wrapped-passphrase Datei erstellen {{{#!vorlage Befehl cd /home//.ecryptfs cp -f wrapped-passphrase wrapped-passphrase.old }}} 1. Danach die Passphrase notieren {{{#!vorlage Befehl ecryptfs-unwrap-passphrase wrapped-passphrase passphrase: < altes Benutzerpasswort > }}} Sollte dieser Befehl mit der Meldung "Error: Unwrapping passphrase failed" quittiert werden, so war das gewählte Passwort nicht das notwendige Schutzpasswort. Eventuell auch auf Probleme mit Umlauten oder Tastaturbelegung achten. Ansonsten die ausgegebene Text/Zahlenfolge (Passphrase) notieren. 1. Optional: Benutzerpasswort ändern {{{#!vorlage Befehl passwd }}} Dieser Schritt kann auch alternativ über die grafische Oberfläche (Gnome, KDE, etc.) gemacht werden. 1. Passphrase mit aktuellem Benutzerpasswort schützen {{{#!vorlage Befehl ecryptfs-wrap-passphrase wrapped-passphrase }}} Es kommen die Aufforderungen: {{{#!vorlage Befehl Passphrase to wrap: < Hier die Passphrase eingeben, die oben notiert wurde Wrapping passphrase: < Eingabe des neuen (aktuellen) Benutzerpassworts }}} Nun sollte man sich abmelden, wieder anmelden und den Erfolg obiger Maßnahme überprüfen. Falls nicht erfolgreich, muss man sich in der Konsole (STRG-ALT-F5) mit seinem Benutzernamen einloggen und man mit passwd sein Passwort zurücksetzen. Falls der Login immer noch nicht klappt kann man versuchen wrapped-passphrase.old zurückzukopieren. (Dabei natürlich auch die neue wrapped-passphrase sichern) == Passphrase extern auslagern == Es ist grundsätzlich möglich, die Passphrase und zugehörige Dateien getrennt auf ein externes Medium (USB-Stick, Smartcard oder ähnlichen Medien) zu verlagern. Wichtig dabei ist nur, dass dieses Speichermedium beim Booten eingesteckt/verbunden ist, vom System erkannt wird und in der '''/etc/fstab''' eingetragen wurde z.B.: {{{ UUID=xxxx /home/.ecryptfs//.ecryptfs ext2 defaults 0 0 }}} Hinweise zum korrekten Pfad (siehe [:ecryptfs/Datenrettung#Systempfade-der-Schluesseldateien: Systempfade]) der Schlüsseldateien. Wird eine getrennte Partition für '''/home''' benutzt, so ist obiger Eintrag in der '''/etc/fstab''' __danach__ anzuordnen! Wurden die Benutzerdaten nun auf diesem Speichermedium abgelegt (durch Verschieben der jeweiligen Nutzerdaten), werden sie nun von dort beim Einloggen abgefragt. == Beispiele Nutzung == [:SSH:]-Keys oder [:GnuPG:]-Keys sowie andere persönliche Daten z.B. [:Thunderbird:] sollte man möglichst sicher aufbewahren, damit diese nicht in die falschen Hände geraten. Um dies zu verhindern, sollte man diese verschlüsselt auf der Festplatte ablegen. Dazu kann man die Festplatte komplett verschlüsseln, hat aber dann den Nachteil, dass __sämtliche__ Schreib- und Lesezugriffe auf die Festplatte erstmal ver-/entschlüsselt werden müssen. Dies kann für manche Anwendungen einen massiven Geschwindigkeitsverlust bedeuten. Mit verschlüsselten Verzeichnissen kann man diese Schlüssel, Verzeichnisse bzw. Dateien in das Verzeichnis * '''~/Private''' verschieben. Die Basis-Programme suchen aber nach den Daten in der Regel in eigens angelegten Verzeichnissen. Das kann man dann einfach mit einen Link abfangen (siehe im Terminal, `man ln`). * Beispiel: '''.ssh-'''Daten {{{#!vorlage Befehl cd /home/ mv .ssh Private/ ln -s /home//Private/.ssh }}} * Beispiel: Thunderbird (persönliche Daten) {{{#!vorlage Befehl cd /home//.thunderbird/ujfyk3gt.default mv Mail /home//Private/ ln -s /home//Private/Mail }}} == Anwendung Server == Hat man auf einem Server ein ''"verschlüsseltes"'' Verzeichnis mit * '''/home/''' bzw. * '''/home//Private''' angelegt, so kann man auf dieses auch über eine [:SSH:]-Verbindung zugreifen. Dafür ist auf dem Server nach dem Hochfahren keine Anmeldung durch einen dort angelegten Benutzer erforderlich (wichtig: normal hochfahren __bis zum Login__, nicht den [:Recovery_Modus:] verwenden). Die Freischaltung des Verzeichnisses erfolgt dabei über [:SSH:], indem man sich von einem entfernten Rechner im Terminal z.B. mit {{{#!vorlage Befehl ssh @192.168.1.88 -p 4711 @192.168.1.88 passwort: << Login-Passwort von }}} am Server anmeldet. Dabei wird analog zu einer normalen Anmeldung das ''"verschlüsselte"'' Verzeichnis und damit die Daten freigegeben und genau so wird nach der Eingabe im Terminal von {{{#!vorlage Befehl @SERVER-NAME:~$ exit }}} das Verzeichnis wieder gesperrt und die Verbindung abgebrochen. == Trash bereinigen == {{{#!vorlage Hinweis Das folgende gilt nur für das Verzeichnis '''~/Private:''' }}} Will man Daten aus dem Verzeichnis '''~/Private''' löschen, so muss man die Funktion ''"Löschen"'' im Kontext-Menü ([[Vorlage(Tasten, rmt)]]-Klick auf dem zu löschenden Objekt) des eingesetzten Datei-Browsers wählen. Das Löschen mittels Kontext-Menü und der Option ''"In den Müll verschieben"'' belässt die Daten im versteckten Verzeichnis * '''~/Private/.Trash-''' so dass sich auf diese Weise ''"gelöschte"'' Dateien mit der Zeit ansammeln und ggf. zu Speicherplatz-Problemen führen können. Ist diese Funktion bei den relevanten Datei-Browsern nicht aktiviert, so kann man das einstellen - Informationen geben die jeweilige WIKI-Seite. {{{#!vorlage Warnung Dieses ist kein Fehler im Programm, sondern so vorgesehen, damit keine Daten unbeabsichtigt nach außerhalb des Verzeichnisses gelangen. }}} == Daten sichern == Man kann die Daten, sowohl verschlüsselt als auch im Klartext einem Backup zuführen - das ist nun ganz von den Gegebenheiten sowie eigenen Wünschen abhängig. Nachfolgend werden beide Möglichkeiten beschrieben. Es ist auf jeden Fall ausreichend (externer) Speicherplatz bereit zu halten. Dieses lässt sich im Terminal [1] bewerkstelligen bzw. es eignet sich dazu jedes Backup-Programm. Es sind nur die jeweils relevanten Pfade zu beachten. === Systemdateien sichern === Man sollte auf jeden Fall sich eine Kopie der Dateien * '''Private.mnt''' * '''Private.sig''' * '''wrapped-passphrase''' anfertigen und getrennt von den Daten des ''"Backup"'' aufbewahren. Das kann ggf. auch in schriftlicher Form geschehen, da der Inhalt dieser Dateien überschaubar ist. Siehe die Ausführungen unter [:ecryptfs/Datenrettung#Daten-wieder-herstellen: Daten wieder herstellen]. === Daten im Klartext === Dazu muss der Benutzer angemeldet sein. * gesamtes Homeverzeichnis {{{#!vorlage Befehl rsync -ap /home/ /Pfad_zum_Ziel/ --delete }}} * Verzeichnis '''~/Private''' {{{#!vorlage Befehl rsync -ap /home//Private /Pfad_zum_Ziel/ --delete rsync -ap /home/ /Pfad_zum_Ziel/ --delete --exclude='.Private' }}} {{{#!vorlage Hinweis Man sollte das Backup bei einem Verzeichnis '''~/Private''' auf dieses Verzeichnis beschränken (erste Befehlszeile). Wird ein gesamtes Backup vom [:Homeverzeichnis:] ausgeführt, so muss man die Daten aus dem versteckten Verzeichnis '''~/.Private''' ausklammern (zweite Befehlszeile)! }}} === Daten in codierter Form === Dabei muss der Benutzer nicht eingeloggt sein - der Pfad zu den verschlüsselten Daten ist __immer__ zugänglich. * Verzeichnis Private {{{#!vorlage Befehl rsync -ap /home//.Private /Pfad_zum_Ziel// --delete }}} * gesamtes Homeverzeichnis {{{#!vorlage Befehl rsync -ap /home/.ecryptfs//.Private /Pfad_zum_Ziel// --delete }}} === Sicherung einsetzen === Es sind die Daten mit umgekehrter Verzeichnisstruktur zurück zu sichern. == Separate Partition einbinden == Hat man sich zum (insgesamt) verschlüsselten Homeverzeichnis auch noch eine separate Datenpartition angelegt bzw. will man eine beim Starten vorhandene externe Festplatte benutzen, so kann man diese auch __innerhalb__ des verschlüsselten Bereiches fest zugeordnet einbinden. Folgende Annahmen sollen realisiert werden: * Datenpartition mit folgendem Eintrag in der '''/etc/fstab''': * {{{UUID=d40fbac8-bd8a-44b2-a0c8-6801626cfa0d /media/daten ext4 defaults 0 2}}} * [:Homeverzeichnis:] mit folgender Verzeichnisstruktur * '''/home//DATEN''' Das Verzeichnis '''/media/daten''' und das Zielverzeichnis '''~/DATEN''' (oder adäquate Bezeichnungen eigener Wahl) müssen parallel zum Eintrag in der '''/etc/fstab''' angelegt werden! [[Vorlage(Hinweis,"Ein __direktes__ Einbinden über die '''/etc/fstab''' ist nicht möglich, weil das Zielverzeichnis zum Einbinden erst nach dem Login vorhanden ist.")]] Um diesen Sachverhalt zu umgehen, wird das folgende Skript als z.B.: '''mount-daten''' erstellt, ausführbar gemacht und nach '''/etc/init.d''' kopiert: {{{code bash #! /bin/sh ### BEGIN INIT INFO # Provides: mount-daten # Required-Start: $remote_fs $syslog $all # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Run a mount-option after ecryptfs started and the directory exist ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { while true; do sleep 2 [ ! -d $HOME/DATEN ] && continue mount -o bind /media/daten $HOME/DATEN break done return } case "$1" in start) do_start ;; *) echo "Usage: $0 start" >&2 exit 3 ;; esac }}} Nun muss man nur noch im Terminal [2] eingeben: [[Vorlage(Befehl,"sudo update-rc.d mount-daten start 99 2 3 4 5 .")]] Die erfolgreiche Verarbeitung wird danach im Terminal angezeigt - nach einem Reboot sollte die Datenpartition nach der Anmeldung an der vorgesehenen Stelle eingebunden und benutzbar sein. Ggf. sind die Benutzer- und Gruppenrechte [1] noch anzupassen. [[Vorlage(Warnung,"Die in diesem Verzeichnis abgelegten Daten werden __'''nicht'''__ verschlüsselt und sind jederzeit offen auslesbar!")]] == Dateinamen mit locate anzeigen == Mit dem Kommando [:locate:] kann man sehr schnell Dateien finden. Hierfür werden alle Dateinamen in einer Datenbank indiziert. Allerdings zeigt `locate` keine Dateinamen aus verschlüsselten Homeverzeichnissen an. Der Grund dafür ist, dass auch Root keinen Zugang zu diesen verschlüsselten Verzeichnissen hat. Da die Datenbank mit den Dateinamen durch einen regelmäßigen Root-Prozess aktualisiert wird, bleiben die verschlüsselten Verzeichnisse außen vor. Um auch Dateien aus dem verschlüsselten Homeverzeichnis mit Hilfe von `locate` anzuzeigen braucht man eine eigene Datenbank im Homeverzeichnis, die für locate als zusätzliche Quelle angegeben wird. Zusätzliche Datenquellen können locate mit Hilfe der Umgebungsvariable `$LOCATE_PATH` zur Verfügung gestellt werden. Erzeugung der Datenbank: {{{#!vorlage Befehl updatedb -l 0 -o $HOME/.mlocate.db -U $HOME }}} Damit die Datenbank aktuell bleibt ist es empfehlenswert, dieses Kommando zur Aktualisierung auch in die Startprogramme aufzunehmen. Dann muss noch die Umgebungsvariable in '''~/.xsessionrc''' ergänzt werden: {{{ echo export LOCATE_PATH="$HOME/.mlocate.db" >> ~/.xsessionrc }}} Das Skript '''~/.xsessionrc''' wird beim Start der grafischen Oberfläche ausgeführt. Die Umgebungsvariable steht damit auch in Ubuntu / Unity zur Verfügung und die Ergebnisse von locate werden bei der Anzeige im Dash berücksichtigt. Wenn nun `locate` ausgeführt wird, wird zuerst die Standard-Datenbank durchsucht und dann die Datenbank aus `$LOCATE_PATH`. Da die zusätzliche Datenbank Bestandteil des Homeverzeichnis ist, wird auch sie verschlüsselt und gibt die Namen der vorhandene Dateien nicht öffentlich preis. = Links = * [:ecryptfs:] {Übersicht} Das [:Homeverzeichnis:] bzw. ein Verzeichnis darin verschlüsseln * [:ecryptfs/Einrichten:Einrichten] - wie man eine Verschlüsselung installiert / entfernt * [:ecryptfs/Datenrettung:Datenrettung] - Struktur der Schlüsseldaten und Datenrettung ## * [:ecryptfs/Problembehandlung: Problembehandlung] bei fehlerhafter [:Swap:] * [https://help.ubuntu.com/community/EncryptedPrivateDirectory Weitere Hinweise] {en} #tag: Sicherheit