2016-08-08 29 views
0

Dateipfade sind bei der Arbeit mit Daten inhärent zweifelhaft. Lets sagen, ich habe eine hypothetische Situation mit einem Programm namens find_brca, und einige Daten mit dem Namen my.genome und beide sind im /Users/Desktop/ Verzeichnis.Gibt es irgendwelche Dateisysteme, die keine Dateipfade verwenden?

find_brca dauert ein einziges Argument, ein Genom, läuft für etwa 4 Stunden und gibt die Wahrscheinlichkeit, dass der einzelne Brustkrebs in ihrem Leben zu entwickeln. Manche Personen, die mit einer sehr hohen Wahrscheinlichkeit vorgestellt wurden, könnten dann sofort beide Brüste entfernt haben.

Offensichtlich ist es in diesem Szenario absolut entscheidend, dass /Users/Desktop/my.genome tatsächlich das Genom enthält, von dem wir glauben, dass es das tut. Es gibt keine Täuschungen. "oops haben wir eine alte Version der Datei von einem früheren Backup verwendet" oder ein anderes technisches Problem ist für den Patienten nicht akzeptabel. Wie stellen wir sicher, dass wir die Datei analysieren, die wir analysieren?

Um die Sache schwieriger zu machen, lassen Sie uns auch behaupten, dass wir find_brca selbst nicht ändern können, weil wir es nicht geschrieben haben, seine geschlossene Quelle, proprietär, was auch immer.

Man könnte denken, MD5 oder andere Verschlüsselungs Prüfsummen könnte zu Hilfe kommen kann, und während sie zu einem gewissen Grad helfen können, können Sie nur MD5 die Datei vor und/oder nach find_brca ausgeführt werden, aber man kann nie wissen genau welche Daten find_brca verwendet (ohne einige ernsthafte Low-Level-System-Sondierung mit DTrace/Ptrace, etc.).

Die Ursache des Problems besteht darin, dass Dateipfade keine 1: 1-Beziehung mit tatsächlichen Daten haben. Nur in einem Dateisystem, in dem Dateien nur durch ihre Prüfsumme angefordert werden können - und sobald die Daten geändert werden - wird die Prüfsumme geändert - können wir sicherstellen, dass, wenn wir find_brca den Dateipfad des Genoms 4fded1464736e77865df232cbcb4cd19 füttern, wir tatsächlich das richtige Genom lesen.

Gibt es irgendwelche Dateisysteme, die so funktionieren? Wenn ich ein solches Dateisystem erstellen möchte, weil es derzeit keine gibt, wie würden Sie mir empfehlen, es zu tun?

+1

Ich habe Probleme tis Frage zu verstehen. Also, das Problem ist, dass jemand "schlecht" die Datei ändern könnte? – dmeister

+0

Ich habe es ein wenig vage gehalten, weil es viele Szenarien gibt, in denen der Dateipfad nicht auf die Daten zeigt, von denen Sie denken, dass sie dies tun. Korruption. Versehentliches/absichtliches Umschalten der Datei mit einem anderen, entweder als Race-Bedingung vor der Ausführung oder während der 4-Stunden-Laufzeit. Ältere Versionen aus Backups/etc. Denn am Ende des Tages, wenn Sie einem Programm einen Dateipfad zum Analysieren geben, geben Sie keine Garantie für die Daten am Ende dieses Pfades. In einem Dateisystem, in dem Sie nur Dateien auf Basis ihrer Prüfsumme und nicht durch einen beliebigen Namen anfordern können, ist keines dieser Probleme vorhanden. –

Antwort

2

Ich habe meine Zweifel an der Stabilität, aber hashfs sieht genauso aus wie das, was Sie wollen: http://hashfs.readthedocs.io/en/latest/

HashFS ist ein Content-adressierbaren Dateiverwaltungssystem. Was bedeutet das? Einfach, dass HashFS ein Verzeichnis verwaltet, in dem Dateien basierend auf dem Hash der Datei gespeichert werden. Typische Anwendungsfälle für diese Art von System sind solche, bei denen: Dateien einmal geschrieben werden und sich niemals ändern (z. B. Bildspeicher). Es ist wünschenswert, keine doppelten Dateien (z. B. Benutzer-Uploads) zu haben. Dateimetadaten werden an anderer Stelle gespeichert (z. B. in einer Datenbank).

Hinweis: Nicht vor dem hashfs, ein Schüler von mir hat ein paar Jahre verwechselt wird: http://dl.acm.org/citation.cfm?id=1849837

1

Ich würde sagen, dass die Frage ein wenig vage ist, jedoch gibt es mehrere Antworten, die auf Teile Ihrer Fragen gegeben werden können.

Vor allem fehlt nicht alle Dateisysteme Pfad/Daten Korrespondenz. Bei vielen (wenn nicht den meisten) Dateisystemen wird die Datei nur durch ihren Pfad und nicht durch irgendwelche IDs identifiziert.

Wenn Sie sicherstellen möchten, dass die Daten nicht geändert werden, während die Anwendung sie verarbeitet, hängt der Ansatz von dem verwendeten Dateisystem und der Art und Weise ab, wie diese Anwendung mit der Datei funktioniert (wenn sie geöffnet oder geöffnet bleibt) schließt die Datei nach Bedarf).

Schließlich, wenn Sie besorgt sind, dass der Angreifer die Daten auf dem Dateisystem in irgendeiner Weise verändert, während die Dateidaten verwendet werden, dann haben Sie wahrscheinlich ein größeres Problem, als nur die Dateipfade, und dieses Problem sollte vorher behoben werden .

Nebenbei können Sie ein virtuelles Dateisystem (FUSE unter Linux, unser CBFS unter Windows) implementieren, das Ihre Anwendung mit Daten versorgt, die von anderen Speicherorten, sei es Speicher, Datenbank oder Cloud stammen. Dieser Ansatz beantwortet auch Ihre Frage.

Update: Wenn Sie Dateipfade überhaupt loswerden wollen und die Daten durch Hash adressiert haben, dann wäre wahrscheinlich eine NoSQL-Datenbank, in der der Hash der Schlüssel ist, Ihre beste Wahl.

+0

Ihre Antworten scheinen eher die Frage "Wie bekomme ich alles Gute über ein Dateisystem ohne Dateipfade, aber immer noch Dateipfade?" Ich will oder brauche keine Dateipfade. Ein einzelnes "Verzeichnis" mit Milliarden von Dateien, die mit ihrer SHA-1-Summe indiziert sind, würde gut funktionieren - besonders, wenn es sich um ein Copy-on-Write-System handelt, so dass das Lesen einer Datei basierend auf ihrem Hash die wiederhergestellten Daten garantiert die Daten, die Sie denken, auch wenn sie während des Lesens "modifiziert" sind. Aber leider habe ich mich bemüht, so etwas zu finden. Vielleicht ist ein virtuelles Dateisystem meine beste Wahl :) Danke Eugene! –

+1

@ J.J Ich habe das Update zu meiner Antwort hinzugefügt. Gehen Sie für NoSQL und verwenden Sie den Hash als Schlüssel. –

+0

Ich liebe es - vielleicht funktioniert eine Datenbank nicht wie ein herkömmliches Dateisystem (ich hatte gehofft, Programme zu "täuschen", die außer Dateipfaden stattdessen Hashes akzeptieren), aber es bietet sicherlich ein bisschen mehr Flexibilität mit transaktionaler Unterstützung usw. –