Syncscript.sh
Grundidee
Seit Version 1.5 beherrscht Encfs die sog. Reverse-Encryption. Dabei wird ein Klartext-Verzeichniss als Chiffrat gemountet (normal wäre ja umgekehrt: Die Daten liegen als Chiffrat auf der Platte und werden dann zum Klartext gemountet). Mit dieser Reverse-Encryption lässt sich folgendes erreichen:
- Auf dem Quell-System werden die Klartext-Verzeichnisse mittels Reverse-Encryption in ein temporäres Verzeichnis gemountet
- Das temporäre Verzeichnis wird per rsync auf das Ziel-System synchronisiert
- Auf dem Ziel-System muss zu keiner Zeit der Verschlüsselungs-Schlüssel vorliegen!
Auf diese Art kann die grösstmögliche "plausable deniability" erreicht werden: Der Eigner des Ziel-Systems kann nicht wissen, was für Daten abgelegt werden. Er kann auch den entsprechenden Verschlüsselungs-Schlüssel weder mitsniffen noch sonst wie erhalten.
In- und Exclusions
Knifflig war die Umsetzung von In- und Exclusions: Damit wie bei rsync üblich mit include- und exclude-files verwendet werden können, muss syncshript.sh die verschlüsselten Namen der In- und Excluded Files und Directories ermitteln. Dies wird durch ein temporär erzeugtes Encfs-Volume erreicht. Dieses wird kurz erzeugt, mittels der In- und Exclude-Files werden die verschlüsselten Namen darin erzeugt und diese dann für die effektiven In- und Exclude-Files für den rsync verwendet.
Implementierung
Hier ein paar Details zur Implementierung auf fish-serv:
- syncscript.sh und die dazugehörigen Dateien liegen im Home von root und werden als root ausgeführt
- Die nicht-sensitiven Bereiche des Offsite-Backup (wwwrun, mp3) werden unverschlüsselt übertragen und gespeichert.
- Das Script syncall.sh synct zuerst wwwrun, dann mp3 und schliesslich home mittels syncscript.sh
- Damit das temporäre Ecnfs-Volume angelegt werden kann, braucht es ein encfsctl mit einem Patch. Der Patch sorgt dafür, dass man das Passwort für das Encfs über einen File-Handle zur Verfügung stellen kann (ohne Patch geht nur Eingabe über Tastatur). Da wir die Sourcen von Encfs auf fish-serv nicht kompilieren konnten, haben wir die nötigen Binaries (und versch. dazugehörige 32-bittige Libraries) von marcos.dyndns.org einfach kopiert.
- Ebenso kopiert wurde /usr/bin/filetemp da dies offenbar bei Suse nicht dabei ist.
Weiteres zum Handling des Offsite Backup
- Verschlüsseltes volume manuell auf Efan's System mounten: encfs ~/backupdisk/new_enc/LxjIsYEwDQROhmjFYh1REj9b/ ~/clear/
- unmount: fusermount -u clear
- Grosse Files finden: find . -type f -size +500000k -ls