ファイルレベルのUSB大容量記憶域
-
14-11-2019 - |
質問
チャレンジ:私はデータを記録してディスクに保存するLinuxハンドヘルドデバイスを持っています。それはこれらのデータをUSB経由でWindowsアプリケーションと交換する必要があります。このデータがユーザからアクセス可能であるとき。 USB-Mass-Storageを介して - 暗号化されています。それは、CitrixターミナルセッションなどのさまざまなOSを持つ箱外しを取り除くべきです。
プラン: fuse を使用して、ユーザー空間にファイルシステムを作成します。質量記憶域を介してWindowsに。 Windowsが1つのファイルにアクセスするときはいつでも、コールバックを受け取り、その場でデータを暗号化します。さらに、いくつかの動的コンテンツを持つことができます。一部のパスワードがファイルに書き込まれると、より多くのコンテンツが表示されます。
問題:マスストレージガジェットを使用する場合(例: g_file_storage )ブロックデバイス - しかし、ファイルシステム(ディレクトリ)はありません。なぜ?
[...]それは、データのセクタを読み書きするためのシンプルなインターフェースを提供します。オペレーティングシステムは、USBドライブをハードドライブのように扱い、好きなファイルシステムでフォーマットできます。 ( )
- 'ブロックデバイスを作成します。'のブロックデバイス - ヒューズと同様に(逆方向 - Fat-Driverが必要です。動的にファイルを提供したいとき)
- ブロックデバイスを作成するために私自身のNBDサーバーを実装する(逆流ドライバも必要ですか?)
- 暗号化ファイルをパーティションに保存し、このパーティションをマスストレージガジェットに渡す(問題はパフォーマンスと動的インタラクションの欠如)です。
- 大量記憶装置を提供していないため、他のアイデア(USB以上のETH)
現時点では、最後の選択肢だけが現実的なようです - またはあなたは私のためにもう一つのチップを持っていますか?
私は感謝するでしょう!
CHARLY
解決
USB大容量記憶装置プロトコルはブロックデバイスプロトコルです。ファイルやディレクトリのレベルでは動作しません。 Windowsホストは、g_mass_storageドライバによって公開されているRAW VFATファイルシステムが表示され、ディレクトリが構造化されている方法を見つけるために必要に応じてVFATメタデータを作成して読み取ることを期待します。
これにより、ヒューズファイルシステムをWindowsホストに公開するのは非論理的です。 VFATをエミュレートし、仮想ファイルシステム内のブロックをメタデータとデータに割り当てる必要があります。また、Windowsホストにはデータやメタデータがキャッシュでき、変更できないメタデータまたはデータを割り当てると(変更できません)。あなたのヒューズデータはWindowsファイルシステムに反映されませんでした)。 Windowsホストは、メタデータとデータの両方に書き込みを遅らせて並べ替えることができます。エミュレートしようとすると、すべての本当の混乱です。
今、あなたができることがいくつかあります:
- ファイル/ディレクトリレベルで機能するカスタムプロトコルを介して、Windows側にカスタムIFSドライバを作成してLinuxデバイスと対話できます。
- USBデバイスを仮想イーサネットポートとして扱い、Windowsホストに通話することができます。
- Windowsホストに公開するには、接続時間に静的なVFATレイアウトを作成できます。未復号化可能なデータは、生の暗号化データをキャッシュするWindowsホストを回避するためにI / Oエラーを返すことができます。
- DM-Cryptを使用してRAWブロックデバイスを暗号化するだけで、このブロックデバイス全体(1チャンクとして暗号化)をWindowsに公開できます。
- mtp ガジェット。
これらのアプローチには独自の問題があります。
- Windowsドライバをインストールする必要があり、Microsoftなどによって署名されているなど、ドライバをインストールするための管理アクセスなしで使用することはできません。
- 自動再生しない。ユーザーはネットワークブラウザを参照してファイルへのアクセスを取得する必要があります。ファイアウォールの設定が干渉する可能性があります。著しいオーバーヘッドがある可能性があります。
- 非常に複雑です。バックエンドのメタデータの更新を処理することは非常に困難になる可能性があります。驚きの抜き取りイベントが壊滅的かもしれません。 IOエラーを受信するWindowsの動作が、ユーザーがロックされたファイルにアクセスしようとすると問題が発生する可能性があります。
- ファイルレベルの暗号化はありませんが、そうでなければうまく機能するはずです。
- メディア以外のファイルがどのくらいのサポートを持っているかは正確にはありません。サポートは大容量記憶サポートとして広くわかりません。
他のヒント
以前にUSB大量記憶装置として自身をホストに露出させたAndroidが(ハニカムのように)MTPデバイスとして機能することを知っているかもしれません。
言っていると言われているのは、「デバイス」と「ホスト」が少し逆になっていますが、すでにあなたのオプション1を実装しています。 qemu vvfat VMに対応する偽のブロックデバイスを作成することは、ディレクトリ/ファイルからVFAT Filesytemが含まれているように見えます。ホストの木。それは始める前に完全な再帰的スキャンを必要とし、OSESystemsへのOSESの書き込み方法の詳細によって異なり、それが使用中にファイルを個別に変更した場合に依存しますが、(どういうわけかどうか)作業を実行します。
NBDプロトコルをUSBに変換し、USBホストにUSBホストに表示されるようにUSBホストに表示されます。
- NBDおよびUSB MSASストレージは両方ともブロックレベルデバイスであるため、1つのプロトコルをもう一方のプロトコルに変換することが可能です。しかし、これが存在しないとは思わないので、それはほぼ確実にプログラミングを必要とするでしょう。しかし、 http://travisgoodspeed.blogspot.com/2012. /07/eMulting-usb-devices-with-python.html は、USB側にはかなり有用で、 https://bitbucket.org/hirofuchi/xnbd/wiki/home は、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 +----+----------------------+-----+ +------------------+
オプションを見ると、イーサネットガジェットの使用、およびデバイス内のIP自動設定をしてから、Sambaを実行してファイルシステムをWindowsホストにエクスポートします。これにより、必要なコントロールのレベルが得られます。