Вопрос

Вызов : у меня есть ручное устройство Linux, которое записывает данные и сохраняет его на диск. Он должен обменять эти данные с приложением Windows через USB. Когда эти данные доступны пользователем - E.g. через USB-Mass-Storage - это должно быть зашифровано. Он должен работать не в коробке, с различными ОС, также для сеансов клеммы Citrix и т. Д.

План : Я создаю файловую систему в пользовательском пространстве с fuse и предложит его к Windows через масштабное хранение. Всякий раз, когда Windows доступа к одному файлу, я получаю обратный вызов и зашифруйте данные на лету. Дальше большее, мы можем иметь некоторое динамическое содержание - например Когда какой-то пароль записан в файл, отображается больше контента.

проблема : при использовании гаджета для хранения масс (например, g_file_storage ) только принимает файлы или Блок-устройства - но нет файловых систем (каталогов). Почему?

[...] Он предоставляет простой интерфейс для чтения и записи секторов данных, таких как интерфейс низкого уровня, используемый для доступа к любому жесткому диску [...]. Операционные системы могут обрабатывать USB-накопитель, как жесткий диск, и может отформатировать его с любой файловой системой. (от wikipedia )

Итак, нет шансов иметь динамическую файловую систему с помощью массового хранения ... и это, кажется, причина, почему мой мобильный телефон Android Un-Clots все данные на телефон, когда я подключаю его к ПК.

<Сильные> Параметры :

    .
  • Создать ' Блоковое устройство в пользовательском пространстве ' - похож на предохранитель (нужен драйвер обратного жира, Когда я хочу предлагать файлы динамически)
  • Реализуйте свой собственный NBD-сервер для создания блочного устройства (нуждается в обратном толсте, а также?)
  • Я сохраняю зашифрованные файлы в раздел, и пропустите этот раздел на гаджет-хранилище (проблема будет производительность и отсутствие динамического взаимодействия)
  • Не предлагайте устройства для кручения массы и следить за другими идеями (через USB)

    На данный момент только последний вариант, кажется, реалистична - или у вас есть еще один совет для меня?

    Я был бы благодарен!

    Charly

Это было полезно?

Решение

Протокол массы USB - это протокол блочного устройства; Он не работает на уровне файлов или каталогов. Хост Windows рассчитывает увидеть файловую систему RAW VFAT, выставленную драйвером G_MASS_Storage, и сделает пишет и читает метаданные VFAT в соответствии с соответствующими выяснениями, как структурированы каталоги.

Из-за этого он нетривиален, чтобы открыть файловую систему предохранителей к хосту Windows. Вам придется эмулировать VFAT, присвоение блоков в виртуальной файловой системе метаданных и данных, и поскольку хост Windows свободен кэшировать любые данные или метаданные, которые он читает, как только вы назначите некоторые метаданные или данные, которые он не может измениться (поэтому изменения в Данные предохранителя не могут быть отражены в файловой системе Windows). Хост Windows также может задержать, и переупорядочить пишет как метаданные, так и данные - это все реальный беспорядок, если вы пытаетесь эмулировать.

Теперь, есть некоторые вещи, которые вы можете сделать:

  1. Вы можете написать пользовательский драйвер IFS на стороне Windows, чтобы взаимодействовать с устройством Linux через пользовательский протокол, который работает на уровне файла / каталога.
  2. Вы можете обрабатывать USB-устройство как виртуальный порт Ethernet, и выступайте CIFS к хосту Windows
  3. Вы можете как-то создать статический макет VFAT в момент соединения, чтобы открыть до хоста Windows; Несмотря на это дешифруемые данные могут вернуть ошибки ввода / вывода, чтобы избежать зашифрованных данных Host Caching Host Windows.
  4. Вы можете просто шифровать необработанное блочное устройство, используя DM-Crypt и выставлять все это блочное устройство (зашифровано как один кусок) в Windows.
  5. Вы могли бы реализовать mtp гаджетом.

    Эти подходы поставляются со своими проблемами:

    1. требует установки драйвера Windows и для подписания Microsoft и т. Д. Не может использоваться на машине без административного доступа для установки драйвера.
    2. не будет автозаписи; Пользователь должен будет просматривать сетевой браузер, чтобы получить доступ к файлам. Настройки брандмауэра могут вмешиваться. Может иметь значительные накладные расходы.
    3. очень сложный. Обработка обновления метаданных обновлений на бэкэнде может быть чрезвычайно сложной. Сюрприз отключающих событий может быть разрушительным. Поведение Windows при получении ошибки IO может быть проблемой, если пользователь пытается получить доступ к заблокированному файлу.
    4. Никакий шифрование на уровне файлов не доступен, но в противном случае должен работать хорошо.
    5. Я точно не уверен, сколько поддержки для немассливых файлов MTP имеет; Поддержка не так широко распространена, как поддержка массовых хранилищ.

Другие советы

Это может заинтересовать вас узнать, что Android, который ранее выяснил себя в качестве устройства для хранения USB для хоста, вместо этого действует как устройство MTP (как сотовый).

, который говорится, что кто-то уже внедрил ваш вариант 1, хотя с «устройством» и «хозяином» немного обращается. QEMU имеет безумный хак под названием VVFAT Что может создать поддельное блочное устройство, которое к виртуальному виду выглядит так, как он содержит файловый файл VFAT только из каталога / файлаДерево на хосте.Требуется полное рекурсивное сканирование перед запуском, зависит от подробной информации о том, как OSES записывает файловые системы, и падает, если вы независимо отмените какие-либо файлы во время использования, но (как-то) удается (иногда) работа.

Может быть возможно перевести протокол NBD в USB, а USB «BIT-BANG», чтобы отображаться на хосте USB в виде устройства для хранения USB.

    . Хранение MSAS NBD и USB и USB являются оба устройства уровня блока, поэтому может быть возможно перевести один протокол к другому. Однако, что бы почти наверняка потребует программирования, так как я не думаю, что это существует. Тем не менее, http://travisgoodspeed.blogspot.com/2012 /07/emution-usb-devices-with-wython.html выглядит довольно полезно для USB-стороны, а https://bitbucket.org/hirofuchi/xnbd/wiki/home должен дать вам хороший пример для сторон NBD клиента.
  • Использование VFAT означает, что Windows может видеть ее как обычный USB-диск, без драйверов.
      .
    • как другой постер предложил, модуль VVFAT QEMU может быть использован для автоматизации некоторых из этого.
    • Шифрование трафика потребует туннелирования трафика NBD через 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 
      +----+----------------------+-----+                +------------------+   
      
      .

Наблюдение на варианты, я бы рассмотрел с помощью Ethernet-Gadget и выполняя аутоконфигурацию IP в устройстве, а затем запустить Samba для экспорта файловой системы к хосту Windows.Это даст вам уровень контроля, который вам нужен.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top