Die integrierte Verschlüsselung von dav ist für den Benutzer weitestgehend transparent, bis auf in den Befehlen copy
und move
in der aktuellen Version 1.1. Bisher sind diese Befehle nur low level WebDAV, das heißt, es wird wirlich nur ein WebDAV COPY
oder MOVE
ausgeführt. Schauen wir uns dav copy
und dav move
erstmal an:
dav copy [-pcO] [-L <lock>] <url> <url>
dav move [-pcO] [-L <lock>] <url> <url>
Beide Befehle sind von der Benutzung her gleich, nur dass copy
eine Kopie erstellt und move
eine Ressource verschiebt. Wie man sieht, haben beide Befehle die Flags -p
und -c
, mit denen Verschlüsselung aktiviert und deaktiviert werden kann. Dies bezieht sich jedoch nur auf die Pfad-Auflösung.
Das Positive ist schon mal, dass mit aktivierter Verschlüsselung die Ziel-URL (das letzte Argument) auch randomisiert wird. Bei verschlüsselten Ressourcen ist der Dateiname, den der Server sieht, nur ein zufälliger String, während der Name, den dav verwendet, verschlüsselt in den Properties gespeichert wird. Das Problem ist, dass copy/move nicht diese Property anpassen, sondern nur die Properties der Source-URL kopieren, wie es von WebDAV COPY/MOVE gefordert ist. Das hat zur Folge, dass der Dateiname, den dav verwendet, bei verschlüsselten Ressourcen sich nicht durch dav copy/move ändert.
$ dav list -l cryptrepo
-c 32 bytes Dec 11 19:54 test.txt
$ dav move secrepo/test.txt cryptrepo/newname.txt
$ dav list -l cryptrepo
-c 32 bytes Dec 11 19:54 test.txt
Schlimmer wird es noch mit copy, wenn die Ziel-URL die selbe Collection ist:
$ dav copy cryptrepo/test.txt cryptrepo/copy.txt
$ dav list -l cryptrepo
-c 32 bytes Dec 11 20:10 test.txt
-c 32 bytes Dec 11 19:54 test.txt
Wer sich jetzt fragt, wie man die richtige Datei löschen kann: mit deaktivierter Verschlüsselung sieht man die echten Dateinamen und anhand des lastmodified-Datums kann man die richtige Datei identifizieren.
Möchte man eine verschlüsselte Datei umbenennen, also den verschlüsselten Namen ändern, gibt es einen einfachen Workaround.
Als erstes erstellt man mit dav put
eine neue Datei mit dem gewünschten Namen.
$ dav put cryptrepo/newfile.txt -
^D
Dann holt man sich den Inhalt der crypto-name
Property.
$ dav get-property cryptrepo/newfile.txt idav:crypto-name
z7qDCHM65EuUSooCt22yaI2d2zwKDdPDlgte23ATkUo=
Die Datei kann dann wieder gelöscht werden.
$ dav rm cryptrepo/newfile.txt
Die verschlüsselte Datei, die man umbenennen möchte, bekommt jetzt den Inhalt der crypto-name
Property.
$ dav set-property cryptrepo/test.txt idav:crypto-name z7qDCHM65EuUSooCt22yaI2d2zwKDdPDlgte23ATkUo=
Und schon denkt dav, dass die Datei newfile.txt heißt.
Kommentare