Pass-Through-Methode auf Kernelebene zum Ändern von Datei-Hashes

Pass-Through-Methode auf Kernelebene zum Ändern von Datei-Hashes

Ich suche nach einem Mechanismus auf Kernelebene, der durchgeleitet wird und Datei-Hashes ändert, indem er entweder Dateiinhalte verschlüsselt oder Daten anhängt. Die naheliegendste Lösung ist die Verschlüsselung, aber ich kann keine geeigneten Verschlüsselungsmethoden finden (z. B. vollständig nur auf dem Kernel, kein ecryptfs, nichts auf FUSE basierendes usw.).

Insbesondere habe ich eine große Anzahl von Dateien, in /foodenen ich auch in einer Weise erscheinen möchte /foobar, die den ursprünglichen MD5 der Dateien verschleiert,ohneDuplizierung der Rohdaten. Ich mache mir keine Sorgen, wenn die Dateien /foobardurch Hinzufügungen unbrauchbar werden - ich füge gerne ein paar zufällige Bytes an jede Datei an und lasse viele Dateiformate dadurch kaputt gehen, aber ich weiß nicht, wie ich das mit einer Art Bind-Mount machen soll.

Antwort1

Wenn Sie nach einem benutzerdefinierten Dateisystem-Overlay suchen, ist FUSE die richtige Wahl. Es gibt verschiedene benutzerdefinierte Dateisysteme, die mit FUSE geschrieben wurden (sshfs, ntfs-3g, wikipediafs...), darunter einfache Overlays wiebindfs.

Man könnte den Bindfs-Quellcode nehmen und ihn so ändern, dass er beispielsweise bei jeder Leseoperation das erste Byte mit einigen zufälligen Daten XOR-verknüpft.

Für eine reine Kerneloption können Sie overlayfsunsere unionfsTreiber auf ähnliche Weise ändern.

Eine andere Alternative besteht darin, Samba zu nehmen, ein Samba-VFS-Modul zu schreiben, um Dateien zu beschädigen, das Quellverzeichnis freizugeben und es mit dem Linux- cifsTreiber auf derselben Maschine zu mounten. (Dasselbe ist auch mit dem 9pTreiber und dem u9fsDaemon oder mit dem nfsTreiber und irgendeinem NFS-Server-Daemon möglich.)


Wenn Ihnen der Inhalt egal ist, erstellen Sie Sparse-Dateien mit der gewünschten Größe. Diese belegen überhaupt keinen Speicherplatz:

$ truncate -s 1G largefile
$ du -h --apparent largefile
1G  largefile
$ du -h largefile
0   largefile

Schleifen Sie einen Baum wie folgt:

cd /foo
find -type d | while read -r file; do
    mkdir -p "/foobar/$file"
done
find -type f | while read -r file; do
    truncate -r "$file" "/foobar/$file"
done

verwandte Informationen