Frage

die Herausforderung : Ich habe ein Linux-Handgerät, das Daten aufzeichnet und es an der Disc speichert. Es sollte diese Daten mit einer Windows-Anwendung über USB austauschen. Wenn diese Daten vom Benutzer erreichbar sind, z. Über USB-Massenspeicherung - muss es verschlüsselt werden. Es sollte aus dem Box arbeiten, mit einer Vielzahl von OS, auch für Citrix Terminal-Sitzungen usw.

der Plan : Ich erstellte ein Dateisystem im Benutzerbereich mit Sicherung und anbieten zu Windows über Massenspeicherung. Wenn Windows auf eine Datei greift, erhalte ich einen Rückruf und verschlüsseln Sie die Daten in der FLY. Darüber hinaus können wir einige dynamische Inhalte haben - z. Wenn ein Kennwort in eine Datei geschrieben wird, wird mehr Inhalte angezeigt.

das Problem : Bei Verwendung des Massenspeicheregedadgets (zB g_file_storage ) akzeptiert es nur Dateien oder Block-Geräte - jedoch keine Dateisysteme (Verzeichnisse). Warum?

[...] ergibt eine einfache Schnittstelle zum Lesen und Schreiben von Daten. Betriebssysteme können das USB-Laufwerk wie eine Festplatte behandeln und mit einem beliebigen Dateisystem formatieren. (von Wikipedia )

So gibt es keine Chance, ein dynamisches File-System über Massenspeicher zu haben ... und das scheint der Grund zu sein, warum mein Android-Mobiltelefon alle Daten am Telefon nicht montiert, wenn ich ihn an die anschließen PC.

Optionen :

    .
  • Erstellen eines ' Block-Gerät in UserSpace ' - ähnlich der Sicherung (benötigen Sie einen Reverse-Fat-Treiber, Wenn ich dynamisch Dateien anbieten möchte)
  • Implementieren Sie meinen eigenen NBD-Server, um ein Blockgerät zu erstellen (benötigen Sie auch einen Reverse-Fat-Treiber?)
  • Ich speichern verschlüsselte Dateien auf eine Partition, und übergeben Sie diese Partition in das Massenspeicher-Gadget (Problem wäre die Leistung und das Fehlen der dynamischen Interaktion)
  • Bieten Sie kein Massen-Storrage-Gerät an und achten Sie auf andere Ideen (ETH über USB)

    Im Moment scheint nur die letzte Option realistisch zu sein - oder haben Sie einen anderen Tipp für mich?

    Ich wäre dankbar!

    charly

War es hilfreich?

Lösung

Das USB-Massenspeicherprotokoll ist ein Blockgerätsprotokoll; Es funktioniert nicht auf der Ebene von Dateien oder Verzeichnissen. Der Windows-Host erwartet, ein RAW-VFAT-Dateisystem zu sehen, das vom G_MASS_STORAGE-Treiber ausgesetzt ist, und macht schreibt und liest VFAT-Metadaten entsprechend, um herauszufinden, wie Verzeichnisse strukturiert sind.

Aus diesem Grund ist es nicht rentrivial, ein Sicherungsdateisystem dem Windows-Host auszusetzen. Sie müssen vfat emulieren, Blöcke in dem virtuellen Dateisystem zu Metadaten und Daten zuweisen, und da der Windows-Host frei ist, um alle Daten oder Metadaten einzuspeichern, die er liest, so, wenn Sie einige Metadaten oder Daten nicht ändern können (also Änderungen an Ihre Sicherungsdaten konnten sich nicht im Windows-Dateisystem widerspiegeln). Der Windows-Host kann auch schöpfen und mit den beiden Metadaten und Daten neu ordnen - es ist alles echte Durcheinander, wenn Sie versuchen, zu emulieren.

Jetzt gibt es einige Dinge, die Sie tun können:

    .
  1. Sie können einen benutzerdefinierten IFS-Treiber auf der Windows-Seite schreiben, um mit Ihrem Linux-Gerät über ein benutzerdefiniertes Protokoll zu interagieren, das auf der File / Directory-Ebene arbeitet.
  2. Sie können das USB-Gerät als virtueller Ethernet-Port behandeln und CIFs an den Windows-Host sprechen>
  3. Sie können irgendwie ein statisches Vfat-Layout in der Anschlusszeit erstellen, um dem Windows-Host freizusetzen. Nicht-docheschlüsselbare Daten können E / A-Fehler zurückgeben, um zu vermeiden, dass der Windows-Host RAW-verschlüsselte Daten zwischengespeichert wird.
  4. Sie können einfach ein RAW-Blockgerät mit DM-Cryptum verschlüsseln und dieses gesamte Blockgerät (verschlüsselt als ein Chunk) an Fenster freilegen.
  5. Sie könnten ein MTP Gadget implementieren.

    Diese Ansätze kommen mit ihren eigenen Problemen:

      .
    1. erfordert, dass ein Windows-Treiber installiert ist und von Microsoft usw. unterzeichnet werden soll, kann nicht auf einem Computer ohne Verwaltungszugriff verwendet werden, um den Treiber zu installieren.
    2. wird nicht autoplay; Der Benutzer muss über den Netzwerkbrowser suchen, um Zugriff auf die Dateien zu erhalten. Firewall-Einstellungen können stören. Kann erheblicher Overhead haben.
    3. sehr komplex. Die Handhabung von Metadaten-Updates auf dem Backend kann extrem schwierig sein. Überraschungssteige Ereignisse können verheerend sein. Windows-Verhalten beim Empfang eines IO-Fehlers kann ein Problem sein, wenn der Benutzer versucht, auf eine gesperrte Datei zuzugreifen.
    4. Die Verschlüsselung der Dateistufe ist verfügbar, sollte jedoch sonst gut funktionieren.
    5. Ich bin nicht sicher, wie viel Unterstützung für Nicht-Mediendateien MTP hat; Die Unterstützung ist nicht so weit verbreitet wie der Massenspeicherunterstützung.

Andere Tipps

Es kann Sie interessieren, dass Sie wissen, dass sich Android, der sich zuvor als USB-Massenspeichergerät an den Host ausgesetzt hat, stattdessen als MTP-Gerät (ab Wabe) einwirkt.

Das heißt, jemand hat Ihre Option 1 bereits implementiert, jedoch mit dem "Gerät" und "Host" ein bisschen umgekehrt. qemu hat einen verrückten Hack mit dem Namen vvfat , der in der in der Lage ist, ein gefälschte Blockgerät zu erstellen, das an den VM so aussieht, dass es ein VFAT-Filesytem nur aus einem Verzeichnis / Datei enthältBaum auf dem Gastgeber.Es erfordert einen vollständigen rekursiven Scan vor dem Start, hängt von Angaben dazu ab, wie OSES an Dateisysteme schreibt, und fällt auf, wenn Sie alle Dateien unabhängig ändern, während sie verwendet werden, aber (irgendwie) wird (manchmal) funktionieren.

Es kann möglich sein, das NBD-Protokoll auf USB zu übersetzen, und "Bit-Bang" USB, der dem USB-Host als USB-Massenspeichergerät angezeigt wird.

    .
  • NBD- und USB-MSAS-Speicher sind sowohl Block-Level-Geräte, sodass es möglich ist, ein Protokoll mit dem anderen zu übersetzen. Dies würde jedoch fast sicherlich programmieren, da ich nicht glaube, dass dies existiert. http://travisgoodspeed.blogspot.com/2012 /07/emulierend-usb-devices-with-python.html sieht für die USB-Seite ziemlich nützlich aus, und https://bitbucket.org/hirofuchi/xnbd/wiki/home sollte Ihnen ein gutes Beispiel für die NBD-Clientseite geben.
  • Verwenden von VFAT bedeutet, dass Windows es als normales USB-Laufwerk mit keinem Treiber sehen kann.
      .
    • Als ein anderes Poster wird empfohlen, das VVFAT-Modul von Qemu dazu verwendet werden, um einige davon zu automatisieren.
    • Verschlüsselung des Verkehrs würde den Tunneln des NBD-Verkehrs durch SSH oder OpenVPN bedürfen.

      Das letzte Setup würde so etwas aussehen: generasacodicetagpre.

Blick auf die Optionen, würde ich die Verwendung des Ethernet-Gadgets in Betracht ziehen und IP-Autokonfiguration im Gerät durchführen, und leiten Sie SAMBA aus, um das Dateisystem in den Windows-Host zu exportieren.Dies würde Ihnen die Kontrolle geben, die Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top