ecryptfs/Nutzung

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

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. Rechte für Dateien und Ordner verändern

  2. Ein Terminal öffnen

Inhaltsverzeichnis
  1. Nutzung
    1. Automatisches Login
    2. Manuelles Sperren Entsperren
    3. Wechsel Login-Passwort
    4. Passphrase extern auslagern
    5. Beispiele Nutzung
    6. Anwendung Server
    7. Trash bereinigen
    8. Daten sichern
      1. Systemdateien sichern
      2. Daten im Klartext
      3. Daten in codierter Form
      4. Sicherung einsetzen
    9. Separate Partition einbinden
    10. Dateinamen mit locate anzeigen
  2. Links

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

ecryptfs-utils 🇬🇧 bietet eine sehr einfache Möglichkeit

oder

In vielen Fällen reicht das für die Nutzung schon aus.

Experten-Info:

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.

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

Achtung!

Bei einem 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:

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:

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.

Achtung!

Bei allen folgenden Befehlen weder ein sudo einsetzen noch ein Administrator-Terminal benutzen!

  1. Backup der wrapped-passphrase Datei erstellen

    cd /home/<benutzername>/.ecryptfs
    cp -f wrapped-passphrase wrapped-passphrase.old 
  2. Danach die Passphrase notieren

    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.

  3. Optional: Benutzerpasswort ändern

    passwd  

    Dieser Schritt kann auch alternativ über die grafische Oberfläche (Gnome, KDE, etc.) gemacht werden.

  4. Passphrase mit aktuellem Benutzerpasswort schützen

    ecryptfs-wrap-passphrase wrapped-passphrase  

    Es kommen die Aufforderungen:

    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/<Benutzername>/.ecryptfs ext2 defaults 0  0

Hinweise zum korrekten Pfad (siehe 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

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).

cd /home/<Benutzername>
mv .ssh Private/
ln -s /home/<Benutzername>/Private/.ssh 
cd /home/<Benutzername>/.thunderbird/ujfyk3gt.default
mv Mail /home/<Benutzername>/Private/
ln -s /home/<Benutzername>/Private/Mail 

Anwendung Server

Hat man auf einem Server ein "verschlüsseltes" Verzeichnis mit

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

ssh <Benutzername>@192.168.1.88 -p 4711
<Benutzername>@192.168.1.88 passwort: << Login-Passwort von <Benutzername> 

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

<Benutzername>@SERVER-NAME:~$ exit 

das Verzeichnis wieder gesperrt und die Verbindung abgebrochen.

Trash bereinigen

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ü (rechte Maustaste-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

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.

Achtung!

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 Daten wieder herstellen.

Daten im Klartext

Dazu muss der Benutzer angemeldet sein.

* gesamtes Homeverzeichnis

rsync -ap /home/<Benutzername> /Pfad_zum_Ziel/ --delete  

* Verzeichnis ~/Private

rsync -ap /home/<Benutzername>/Private /Pfad_zum_Ziel/ --delete
rsync -ap /home/<Benutzername>  /Pfad_zum_Ziel/ --delete --exclude='.Private' 

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

rsync -ap /home/<Benutzername>/.Private /Pfad_zum_Ziel/<Benutzername>/ --delete  
  • gesamtes Homeverzeichnis

rsync -ap /home/.ecryptfs/<Benutzername>/.Private /Pfad_zum_Ziel/<Benutzername>/ --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:

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!

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:

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.

Achtung!

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:

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.