13

課題: 私は、データを記録してディスクに保存する Linux ハンドヘルド デバイスを持っています。これらのデータは、USB 経由で Wi​​ndows アプリケーションと交換する必要があります。ユーザーがこのデータにアクセスできる場合 (USB マスストレージなどを介して)、データを暗号化する必要があります。さまざまなOSで、citrix端末セッションなどでも、すぐに使用できるはずです。

計画: FUSEを使用してユーザー空間にファイル システムを作成し、大容量ストレージを介して Windows に提供します。Windows が 1 つのファイルにアクセスするたびに、コールバックを受け取り、その場でデータを暗号化します。さらに、いくつかの動的コンテンツを含めることができます。たとえば、パスワードがファイルに書き込まれると、より多くのコンテンツが表示されます。

問題: 大容量ストレージ ガジェット ( g_file_storage など) を使用する場合、ファイルまたはブロック デバイスのみを受け入れますが、ファイル システム (ディレクトリ) は受け入れません。なんで?

[...] データのセクターを読み書きするためのシンプルなインターフェイスを提供します。これは、ハード ドライブへのアクセスに使用される低レベル インターフェイスによく似ています [...]。オペレーティング システムは、USB ドライブをハード ドライブのように扱い、任意のファイル システムでフォーマットできます。(ウィキペディアより)

したがって、大容量ストレージを介して動的ファイルシステムを使用する機会はありません...これが、Android携帯電話をPCに接続すると、電話上のすべてのデータをアンマウントする理由のようです。

オプション:

  • 「ユーザー空間にブロックデバイス」を作成します-FUSEに似ています(ファイルを動的に提供したい場合は、リバースFATドライバーが必要です)
  • ブロックデバイスを作成するために独自の nbd サーバーを実装します (リバース FAT ドライバーも必要ですか?)
  • 暗号化されたファイルをパーティションに保存し、このパーティションを大容量ストレージ ガジェットに渡します (問題は、パフォーマンスと動的相互作用の欠如です)
  • 大容量ストレージ デバイスを提供せず、他のアイデア (eth over USB) に注意する

現時点では、最後のオプションのみが現実的であるように思われます - または、別のヒントはありますか?

私は感謝されます!

チャーリー

4

4 に答える 4

11

USB マス ストレージ プロトコルはブロック デバイス プロトコルです。ファイルやディレクトリのレベルでは動作しません。Windows ホストは、g_mass_storage ドライバーによって公開された未加工の VFAT ファイルシステムを認識し、必要に応じて VFAT メタデータへの書き込みと読み取りを行い、ディレクトリの構造を把握します。

このため、FUSE ファイルシステムを Windows ホストに公開することは簡単ではありません。仮想ファイルシステムのブロックをメタデータとデータに割り当てて、VFAT をエミュレートする必要があります。Windows ホストは、読み取ったデータまたはメタデータを自由にキャッシュできるため、メタデータまたはデータを割り当てると、変更できなくなります (したがって、 FUSE データを Windows ファイルシステムに反映できませんでした)。Windows ホストは、メタデータとデータの両方への書き込みを遅らせたり、並べ替えたりすることもできます。エミュレートしようとすると、すべてが大変なことになります。

今、あなたができることがいくつかあります:

  1. Windows 側でカスタム IFS ドライバーを記述して、ファイル/ディレクトリ レベルで動作するカスタム プロトコルを介して Linux デバイスとやり取りすることができます。
  2. USB デバイスを仮想イーサネット ポートとして扱い、CIFS を Windows ホストに話しかけることができます。
  3. 接続時に静的な VFAT レイアウトを作成して、Windows ホストに公開することができます。Windows ホストが未加工の暗号化データをキャッシュしないようにするために、まだ復号化できないデータが I/O エラーを返すことがあります。
  4. dm-crypt を使用して raw ブロック デバイスを暗号化し、このブロック デバイス全体 (1 つのチャンクとして暗号化) を Windows に公開することができます。
  5. MTPガジェットを実装できます。

これらのアプローチには、独自の問題があります。

  1. Windows ドライバーをインストールし、microsoft などによって署名する必要があります。ドライバーをインストールするための管理者アクセスがないマシンでは使用できません。
  2. 自動再生しません。ファイルにアクセスするには、ネットワーク ブラウザを介して参照する必要があります。ファイアウォールの設定が干渉する場合があります。かなりのオーバーヘッドが発生する可能性があります。
  3. 非常に複雑です。バックエンドでメタデータの更新を処理することは、非常に困難な場合があります。突然プラグを抜くイベントは壊滅的なものになる可能性があります。ユーザーがロックされたファイルにアクセスしようとすると、IO エラーを受け取ったときの Windows の動作が問題になる場合があります。
  4. ファイルレベルの暗号化は利用できませんが、それ以外はうまく機能するはずです。
  5. MTP がメディア以外のファイルをどの程度サポートしているか正確にはわかりません。サポートは、大容量ストレージのサポートほど普及していません。
于 2011-05-16T20:16:50.990 に答える
6

以前は USB 大容量ストレージ デバイスとしてホストに公開されていた Android が、(Honeycomb の時点で) MTP デバイスとして機能していることを知っておくと興味深いかもしれません。

そうは言っても、「デバイス」と「ホスト」が少し逆になっていますが、誰かがすでにオプション1を実装しています。 QEMUにはvvfatと呼ばれる非常識なハックがあり、VM にはホスト上のディレクトリ/ファイル ツリーからの VFAT ファイルシステムが含まれているように見える偽のブロック デバイスを作成できます。開始前に完全な再帰スキャンが必要であり、OS がファイルシステムに書き込む方法の詳細に依存し、使用中にファイルを個別に変更するとフォールオーバーしますが、(どういうわけか) なんとか (時々) 動作します。

于 2011-05-17T02:22:12.363 に答える
1

NBD プロトコルを USB に変換し、「ビットバン」usb を USB ホストに USB 大容量記憶装置として表示することができる場合があります。

  • NBD と USB msas ストレージはどちらもブロック レベルのデバイスであるため、1 つのプロトコルを別のプロトコルに変換できる可能性があります。ただし、これが存在するとは思わないため、ほぼ確実にプログラミングが必要になります。ただし、http://travisgoodspeed.blogspot.com/2012/07/emulating-usb-devices-with-python.htmlは USB 側でかなり便利に見えます。 https://bitbucket.org/hirofuchi/xnbd/wiki/ホームは、NBD クライアント側の良い例です。
  • VFAT を使用するということは、Windows がそれをドライバーなしで通常の USB ディスク ドライブとして認識できることを意味します。
    • 別のポスターが示唆したように、qemu の vvfat モジュールを使用して、この一部を自動化できます。
  • トラフィックを暗号化するには、SSH または OpenVPN を介して NBD トラフィックをトンネリングする必要があります。

最終的なセットアップは次のようになります。

+---------------------------------+                +------------------+
| 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 
+----+----------------------+-----+                +------------------+   
于 2012-11-06T14:11:30.067 に答える
0

オプションを見ると、イーサネット ガジェットを使用し、デバイスで IP 自動構成を実行してから、Samba を実行してファイル システムを Windows ホストにエクスポートすることを検討します。これにより、必要なレベルの制御が可能になります。

于 2011-05-16T21:05:59.363 に答える