Question

Le défi : J'ai un périphérique à main Linux, qui enregistre les données et le stocke au disque. Il devrait échanger ces données avec une application Windows via USB. Lorsque ces données sont accessibles par l'utilisateur - par exemple Via USB-Mass-Stockage - il doit être crypté. Il devrait fonctionner hors de la boîte, avec une variété d'OS, également pour les sessions terminales Citrix, etc.

le plan : je crée un système de fichier dans l'espace utilisateur avec fusible et l'offrir à Windows via un stockage de masse. Chaque fois que Windows accède à un fichier, je reçois un rappel et crypté les données à la volée. De plus, nous pouvons avoir un contenu dynamique - par exemple Lorsqu'un mot de passe est écrit dans un fichier, plus de contenu est affiché.

le problème : Lorsque vous utilisez le gadget de stockage de masse (par exemple, g_file_storage ) n'accepte que des fichiers ou Dispositifs de blocs - mais pas de systèmes de fichiers (répertoires). Pourquoi?

[...] Il fournit une interface simple à lire et à écrire des secteurs de données - un peu comme l'interface de bas niveau utilisée pour accéder à n'importe quel disque dur [...]. Les systèmes d'exploitation peuvent traiter le lecteur USB comme un disque dur et peuvent le formater avec tout système de fichiers qu'ils aiment. (de wikipedia )

Il n'y a donc aucune chance d'avoir un système de fichiers dynamique via un stockage de masse ... et cela semble être la raison, pourquoi mon téléphone mobile Android Nations monte toutes les données sur le téléphone, lorsque je le connecte à la Pc.

options :

  • Créer un ' périphérique de bloc de l'espace utilisateur ' - similaire au fusible (besoin d'un pilote inverse en gras, Quand je veux proposer des fichiers de manière dynamique)
  • Implémentez mon propre serveur NBD pour créer un périphérique de bloc (besoin d'un conducteur de graisse inverse aussi?)
  • Je sauvegarde des fichiers cryptés à une partition et transmettez cette partition sur le gadget de stockage de masse (problème serait la performance et le manque d'interaction dynamique)
  • Ne pas offrir un dispositif de masse-standage et faites attention aux autres idées (ETH Over USB)

    Pour le moment, seule la dernière option semble être réaliste - ou avez-vous un autre conseil pour moi?

    Je serais reconnaissant!

    charly

Était-ce utile?

La solution

Le protocole de stockage de masse USB est un protocole de dispositif de bloc; Il ne fonctionne pas au niveau des fichiers ou des répertoires. L'hôte Windows s'attend à voir un système de fichiers VFAT brut exposé par le pilote g_mass_storage et effectuera des écrires et se lit en métadonnées VFAT, le cas échéant pour comprendre comment les répertoires sont structurés.

À cause de cela, il est non provisoire d'exposer un système de fichiers fusible à l'hôte Windows. Vous devez imiter VFAT, affectant des blocs dans le système de fichiers virtuel aux métadonnées et aux données, et puisque l'hôte Windows est libre de mettre en cache toutes les données ou métadonnées, une fois que vous avez attribué des métadonnées ou des données, il ne peut pas modifier (ainsi modifier Vos données de fusible n'ont pas pu être reflétées dans le système de fichiers Windows). L'hôte Windows peut également retarder et réorganiser les écritures sur les métadonnées et les données - c'est tout le désordre réel si vous essayez d'imiter.

Maintenant, il y a des choses que vous pouvez faire:

  1. Vous pouvez écrire un pilote IFS personnalisé sur le côté Windows pour interagir avec votre périphérique Linux sur un protocole personnalisé qui fonctionne au niveau de fichier / répertoire.
  2. Vous pouvez traiter le périphérique USB comme port Ethernet virtuel et parler CIFS à l'hôte Windows
  3. Vous pouvez en quelque sorte créer une mise en page statique VFAT sur le temps de connexion pour exposer à l'hôte Windows; Les données non encore-chiffrées peuvent renvoyer des erreurs d'E / S afin d'éviter les données cryptées brutes d'hôte Windows.
  4. Vous pouvez simplement chiffrer un dispositif de bloc brut à l'aide de DM-CRYPT et exposer tout ce type de bloc (chiffré comme une seule morceau) à Windows.
  5. Vous pouvez implémenter un MTP Gadget.

    Ces approches viennent avec leurs propres problèmes:

    1. Nécessite un pilote Windows à installer et être signé par Microsoft, etc. ne peut pas être utilisé sur une machine sans accès administratif pour installer le pilote.
    2. ne sera pas la lecture automatique; L'utilisateur aurait besoin de parcourir le navigateur réseau pour accéder aux fichiers. Les paramètres de pare-feu peuvent interférer. Peut avoir des frais généraux importants.
    3. très complexe. Manipulation des mises à jour des métadonnées sur le backend peut être extrêmement difficile. Des événements débranchement surprise peuvent être dévastateurs. Le comportement Windows sur la réception d'une erreur IO peut être un problème si l'utilisateur tente d'accéder à un fichier verrouillé.
    4. Aucun cryptage au niveau du fichier n'est disponible, mais autrement devrait bien fonctionner.
    5. Je ne suis pas sûr à quel point la prise en charge des fichiers non multimédia MTP a; Le soutien n'est pas aussi répandu que le support de stockage de masse.

Autres conseils

Cela peut vous intéresser à savoir que Android, qui s'est précédemment exposé en tant que périphérique de stockage de masse USB à l'hôte, est plutôt en tant que périphérique MTP (à partir de nid d'abeille).

Cela étant dit, quelqu'un a déjà implémenté votre option 1, cependant avec le "périphérique" et "hôte" un peu inversé. qemu a un piratage insensé appelé VVFAT , capable de créer un faux périphérique de bloc qui est à l'image de VM contient un fichier de fichiers VFAT juste à partir d'un répertoire / fichierarbre sur l'hôte.Il nécessite une analyse recuive complète avant de commencer, dépend des détails de la manière dont les systèmes d'ébriomie des systèmes de fichiers et tombent si vous modifiez de manière indépendante tous les fichiers alors qu'il est utilisé, mais (en quelque sorte) (parfois) fonctionne (parfois).

Il peut être possible de traduire le protocole NBD en USB et "bit-bang" USB à apparaître à l'hôte USB en tant que périphérique de stockage de masse USB.

  • NBD et USB MSA Storage sont à la fois des dispositifs de niveau de bloc, il peut donc être possible de traduire un protocole à l'autre. Cependant, cela nécessiterait presque certainement des programmes, car je ne pense pas que cela existe. Cependant, http://travisgoodspeed.blogspot.com/2012 /07/emulation-usb-devices-with-pytHon.html semble assez utile pour le côté USB et https://bitbucket.org/hirofuchi/xnnbd/wiki/home devrait vous donner un bon exemple pour le côté client de la NBD.
  • Utilisation de VFAT signifie que Windows peut le voir sous la forme d'un lecteur de disque USB normal, sans pilotes.
    • Comme une autre affiche suggérée, le module VVFAT de QEMU pourrait être utilisé pour automatiser une partie de celle-ci.
    • Le cryptage du trafic nécessiterait de tunneler le trafic NBD via SSH ou OpenVPN.

      La configuration finale ressemblerait à quelque chose comme ceci:

      +---------------------------------+                +------------------+
      | data collection device          |                | client device    |
      | +----------------+              |                |                  |
      | | collected data |              |                |  SSH -> NBD      |
      | | -> linux fs    |              |                |         client   |
      | +--+-------------+--------+     |                |         |        |
      | -> | qemu vvfat           | SSH +-{some network}-+         V        |--> client PC
      |    | run NBD inside the VM|     |                | USB Mass Storage |    USB port 
      +----+----------------------+-----+                +------------------+   
      

En regardant les options, je envisagerais d'utiliser le gadget Ethernet et de faire une autoconfiguration IP dans l'appareil, puis de l'exécution de Samba pour exporter le système de fichiers vers l'hôte Windows.Cela vous donnerait le niveau de contrôle dont vous avez besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top