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