挑战:我有一个Linux手持设备,它记录数据并将其存储到光盘上。它应该通过USB将这些数据与Windows应用程序交换。当用户可以访问此数据时 - 例如通过USB批量存储 - 必须加密。它应该在盒子外,使用各种操作系统,也适用于Citrix终端会话等。

计划:我在使用 fuse 的用户空间中创建一个文件系统,并提供它通过大容量存储到Windows。每当Windows访问一个文件时,我都会收到一个回调并激发数据。此外,我们可以拥有一些动态内容 - 例如当某些密码写入文件时,显示了更多内容。

问题:使用大容量存储小工具(例如 g_file_storage )它只接受文件或块设备 - 但没有文件系统(目录)。为什么?

[...]它提供了一个简单的界面,可以读取和写入数据的扇区 - 非常类似于用于访问任何硬盘驱动器的低级接口。操作系统可以像硬盘一样对待USB驱动器,并且可以使用它们所喜欢的任何文件系统格式化。 (从 wikipedia 所以没有机会通过批量存储有一个动态的文件系统......这似乎是原因,为什么我的Android手机未在手机上安装所有数据,当我将它连接到PC。

选项

  • 创建一个'块设备在userspace ' - 类似于保险丝(需要反向脂肪驱动程序,当我想要动态提供文件时)
  • 实现自己的nbd-server来创建一个块设备(也需要一个反向脂肪驱动程序?)
  • i将加密文件保存到分区,并将此分区传递给大容量存储小工具(问题将是性能和缺乏动态交互)
  • 不要提供大规模的Storrage设备,并留出其他想法(ETH超过USB)

    目前,只有最后一个选项似乎是现实的 - 或者你有另一个提示吗?

    我会感激!

    charly

有帮助吗?

解决方案

USB大容量存储协议是块设备协议;它无法在文件或目录的级别运行。 Windows主机希望看到G_MASS_STorage驱动程序公开的RAW VFAT文件系统,并将编写并读取为适当的VFAT元数据以弄清楚如何构建导演。

因此,将熔丝文件系统暴露给Windows主机是不动的。您必须模拟VFAT,将虚拟文件系统中的块分配给METADATA和数据,并且由于您可以自由地缓存它读取的任何数据或元数据,因此分配某些元数据或其无法更改的数据(因此更改您的保险丝数据无法反映在Windows文件系统中)。 Windows主机还可以延迟并重新排序给METADATA和数据 - 如果您尝试效仿,这是所有真正的混乱。

现在,您可以执行一些事情:

  1. 您可以在Windows侧面编写自定义IFS驱动程序,以通过在文件/目录级别工作的自定义协议上与Linux设备进行交互。
  2. 您可以将USB设备视为虚拟以太网端口,并将CIFS与Windows主机(Windows Host)表示
  3. 您可以以某种方式在连接时间上创建静态VFAT布局以公开Windows主机;尚未解密的数据可以返回I / O错误,以避免Windows主机缓存原始加密数据。
  4. 您可以使用DM-Crypt加密原始块设备,并将此整个块设备(加密为一个块加密)到Windows。
  5. 您可以实现一个 mtp 小工具。

    这些方法具有自己的问题:

    1. 需要安装Windows驱动程序,并由Microsoft等签名,不能在机器上使用而没有管理访问驱动程序。
    2. 不会自动播放;用户需要浏览网络浏览器以访问文件。防火墙设置可能会干扰。可能有很大的开销。
    3. 非常复杂。处理后端的元数据更新可能是非常困难的。惊喜拔掉事件可能是毁灭性的。接收IO错误时的Windows行为可能是一个问题,如果用户尝试访问锁定文件。
    4. 没有文件级加密,但否则应运作良好。
    5. 我不确定对非媒体文件MTP的支持有多少;支持不像大容量存储支持一样广泛。

其他提示

可能有感兴趣的是,您知道以前将自己作为USB大容量存储设备暴露于主机的Android,而是用作MTP设备(蜂窝字节)。

所说,有人已经实现了您的选项1,但是使用“设备”和“主机”有点反转。 qemu 有一个名为 vvfat ,它能够创建一个虚假的块设备,它看起来像它只能从目录/文件中包含一个vfat filesytem在主人上的树。它需要在开始之前进行完整的递归扫描,取决于内容对文件系统的内容写入的详细信息,如果您在使用中独立更改任何文件,但(以某种方式)管理(有时)工作。

可以将NBD协议转换为USB,并将“Bit-Bang”USB显示为USB主机作为USB大容量存储设备。

  • NBD和USB MSAS存储是块级设备,因此可以将一个协议转换为另一个协议。但是,这几乎肯定需要编程,因为我不认为这是存在的。但是, http://travisgoodst.blogspot.com/2012 / 07/emulation-usb-devices-with-python.html 对USB侧的看起来相当有用,而 https://bitbucket.org/hirofuchi/xnbd/wiki/home 应该给你一个很好的名录客户端的榜样。
  • 使用VFAT表示Windows可以将其视为普通的USB磁盘驱动器,没有驱动程序。
    • 作为另一个海报建议,Qemu的VVFAT模块可用于自动化其中一些。
    • 流量的加密需要通过ssh或openvpn隧道隧穿流量。

      最终设置看起来像这样:

      +---------------------------------+                +------------------+
      | 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 
      +----+----------------------+-----+                +------------------+   
      
      .

查看选项,我会考虑使用以太网 - 小工具,并在设备中执行IP自动配置,然后运行Samba以将文件系统导出到Windows主机。这将为您提供所需的控制级别。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top