Sunday, October 16. 2005
Verschlüsselung von Dateien mittels encfs und fuse
Oft hört man, dass Verschlüsselung unter Linux kompliziert ist und man immer umständlich einen Crypto-Container anlegen muß. Dem ist aber gar nicht so. Als Alternative bietet sich hier encfs an. Es nutzt die Möglichkeiten von fuse als Interface zum Kernel. Fuse bietet auch die Möglichkeit zum Beispiel einen vorhanden GMail-Account (gmailfs) oder einen entfernten Rechner mittels sshfs bzw. shfs ins Dateisystem einzuhängen.
Um encfs nutzen zu können, muß das Kernelmodul fuse geladen sein. Den Sourcecode von fuse findet man auf der Website des Projekts. Unter Debian reicht ein
Nachdem nun alle benötigten Pakete installiert wurden, kann das fuse-Modul gebaut werden. Das geht so:
Nun sollte ein
Um nun einzelne Dateien zu verschlüsseln wird noch das Paket encfs benötigt:
Eventuell wird zusätzlich noch das Paket librlog1 als Abhängigkeit installiert.
Nachdem das Paket installiert ist, kann es nun losgehen:
Allgemeine Syntax ist: encfs raw-directory mountpoint
Zwei Verzeichnisse müssen angegeben werden. Das Raw-Directory enthält die verschlüsselten Dateien während sich im Mountpoint die entschlüsselten Daten liegen. Es kann nötig sein, die entsprechenden Verzeichnisse immer als absolute Pfade anzugeben und keine relative Pfade. Verifizieren kann ich das nicht in der Doku, aber hier bricht sonst encfs gern mal ab.
Nun kann man sensible Dateien nach ~/temp/crypt/mnt verschieben und nach dem unmounten gibt es diese nur noch verschlüsselt.
Wenn man fertig ist, hängt man das Dateisystem einfach aus:
Hier sieht man dann auch den Nachteil: Metadaten bleiben erhalten. So kann jeder die Rechte, Größe und Benutzer und Gruppe sehen.
Neu einhängen kann man das Raw-Verzeichnis dann wieder mittels des obigen benannten encfs Befehls.
Wichtig: Bei Backups im Raw-Verzeichnis unbedingt die Datei .encfs5 mitsichern. Ansonsten sind die verschlüsselten Dateien nutzlos, weil man nicht mehr an sie heran kommt.
CODE:
~# apt-get install fuse-source module-assistant
Das Paket module-assistant wird nicht unbedingt gebraucht, erleichtert aber das bauen des fuse-Moduls. Eventuell werden noch weitere benötigte Pakete aufgrund von Abhhängigkeiten installiert. Außerdem müssen noch die richtigen Kernel-Headers für den aktuellen Kernel installiert werden. (Das Paket heißt kernel-headers-`uname -r` für Debian Standardkernel. Für nicht Standardkernel werden die Linux Source benötigt.). Die Kernelheaders werden gebraucht, weil das Fuse Modul später für den richtigen Kernel geladen werden muß und benötigt daher ein Interface zum Kernel.Nachdem nun alle benötigten Pakete installiert wurden, kann das fuse-Modul gebaut werden. Das geht so:
CODE:
~# module-assistant prepare
Kernel-Header verfügbar in /usr/src/linux
Fertig!
~# module-assistant build fuse
~# module-assistant install fuse
Jetzt sollte das Kernelmodul fertig sein und in /lib/modules/XXX/kernel/fs vorliegen. Das XXX muß hierfür durch die Kernelversion ersetzt werden, für den das Modul gebaut wurde. Das erfährt man durch den Befehl uname -r. Amschließend kann das Modul mittels Kernel-Header verfügbar in /usr/src/linux
Fertig!
~# module-assistant build fuse
~# module-assistant install fuse
CODE:
~# modprobe fuse
geladen werden. Falls dieser Fehler auftrittCODE:
FATAL: Error inserting fuse : Invalid module format
sollte sichergestellt werden, dass das Modul mit dem selben Compiler wie der Kernel gebaut wurde. Den Compiler, der benutzt wurde, um den Kernel zu bauen findet man über die Ausgabe des folgenden Befehls raus: CODE:
~# cat /proc/version
Anschließend das Modul neu bauen und vorher die Umgebungsvariable CC auf den entsprechenden Compiler setzen, z.B. bei der Bash so:CODE:
~# export CC=/usr/bin/gcc-2.95
Nun sollte ein
CODE:
~# modprobe fuse
fehlerfrei funktionieren und ermöglicht das Einhängen verschiedenster Dateisysteme.Um nun einzelne Dateien zu verschlüsseln wird noch das Paket encfs benötigt:
CODE:
~# apt-get install encfs
Eventuell wird zusätzlich noch das Paket librlog1 als Abhängigkeit installiert.
Nachdem das Paket installiert ist, kann es nun losgehen:
Allgemeine Syntax ist: encfs raw-directory mountpoint
Zwei Verzeichnisse müssen angegeben werden. Das Raw-Directory enthält die verschlüsselten Dateien während sich im Mountpoint die entschlüsselten Daten liegen. Es kann nötig sein, die entsprechenden Verzeichnisse immer als absolute Pfade anzugeben und keine relative Pfade. Verifizieren kann ich das nicht in der Doku, aber hier bricht sonst encfs gern mal ab.
CODE:
user@host:~$ encfs /home/user/temp/crypt/raw/ /home/user/temp/crypt/mnt/
Neues verschlüsseltes Volume wird angelegt.
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?>
Standard Konfiguration gewählt.
Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Ziffer: "ssl/blowfish", Version 2:1:1
Dateinamenkodierung: "nameio/block", Version 3:0:1
Schlüssellänge: 160 Bits
Blockgröße: 512 Bytes
Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten.
Dateinamenkodierung benutzt IV Verkettungsmodus.
Nun wird ein Kennwort für das Dateisystem benötigt.
Da es keinen Mechanismus zur Wiederhestellung gibt, müssen Sie
sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl
nächträglich geändert werden.
Neues EncFS-Kennwort eingeben:
EncFS-Kennwort bestätigen:
user@host:~/temp/crypt
Neues verschlüsseltes Volume wird angelegt.
Please choose from one of the following options:
enter "x" for expert configuration mode,
enter "p" for pre-configured paranoia mode,
anything else, or an empty line will select standard mode.
?>
Standard Konfiguration gewählt.
Konfiguration abgeschlossen. Das angelegte Dateisystem hat die
folgenden Eigenschaften:
Dateisystem Ziffer: "ssl/blowfish", Version 2:1:1
Dateinamenkodierung: "nameio/block", Version 3:0:1
Schlüssellänge: 160 Bits
Blockgröße: 512 Bytes
Jede Datei enthält acht Byte Vorspann mit einmaligen IV Daten.
Dateinamenkodierung benutzt IV Verkettungsmodus.
Nun wird ein Kennwort für das Dateisystem benötigt.
Da es keinen Mechanismus zur Wiederhestellung gibt, müssen Sie
sich an das Kennwort erinnern! Das Kennwort kann mit encfsctl
nächträglich geändert werden.
Neues EncFS-Kennwort eingeben:
EncFS-Kennwort bestätigen:
user@host:~/temp/crypt
Nun kann man sensible Dateien nach ~/temp/crypt/mnt verschieben und nach dem unmounten gibt es diese nur noch verschlüsselt.
CODE:
user@host:~/temp/crypt$ cp testdatei mnt/
user@hostt:~/temp/crypt$ ls -lh mnt
insgesamt 1,1M
-rw-r--r-- 1 user users 1,0M 2005-10-15 20:18 testdatei
user@host:~/temp/crypt$ ls -lh raw
insgesamt 1,1M
-rw-r--r-- 1 user users 1,1M 2005-10-15 20:18 cBicwtl55Lrhy5V3SWhdJ9V3
user@hostt:~/temp/crypt$
user@hostt:~/temp/crypt$ ls -lh mnt
insgesamt 1,1M
-rw-r--r-- 1 user users 1,0M 2005-10-15 20:18 testdatei
user@host:~/temp/crypt$ ls -lh raw
insgesamt 1,1M
-rw-r--r-- 1 user users 1,1M 2005-10-15 20:18 cBicwtl55Lrhy5V3SWhdJ9V3
user@hostt:~/temp/crypt$
Wenn man fertig ist, hängt man das Dateisystem einfach aus:
CODE:
user@host:~/temp/crypt$ fusermount -u mnt
user@host:~/temp/crypt$ ls -lh mnt
insgesamt 0
user@host:~/temp/crypt$ ls -lh raw
insgesamt 1,1M
-rw-r--r-- 1 user users 1,1M 2005-10-15 20:18 cBicwtl55Lrhy5V3SWhdJ9V3
user@hostt:~/temp/crypt$
user@host:~/temp/crypt$ ls -lh mnt
insgesamt 0
user@host:~/temp/crypt$ ls -lh raw
insgesamt 1,1M
-rw-r--r-- 1 user users 1,1M 2005-10-15 20:18 cBicwtl55Lrhy5V3SWhdJ9V3
user@hostt:~/temp/crypt$
Hier sieht man dann auch den Nachteil: Metadaten bleiben erhalten. So kann jeder die Rechte, Größe und Benutzer und Gruppe sehen.
Neu einhängen kann man das Raw-Verzeichnis dann wieder mittels des obigen benannten encfs Befehls.
Wichtig: Bei Backups im Raw-Verzeichnis unbedingt die Datei .encfs5 mitsichern. Ansonsten sind die verschlüsselten Dateien nutzlos, weil man nicht mehr an sie heran kommt.
Trackbacks
Trackback specific URI for this entry
No Trackbacks
