문제

챌린지 : 나는 데이터를 기록하고 디스크에 저장하는 리눅스 핸드 헬드 장치를 가지고있다. USB를 통해 Windows 응용 프로그램 으로이 데이터를 교환해야합니다. 이 데이터가 사용자가 액세스 할 수있는 경우 - 예를 들어 USB - 대용량 저장 장치를 통해 - 암호화해야합니다. 다양한 OS, Citrix 터미널 세션 등 다양한 OS를 사용해야합니다.

계획 : 퓨즈 와 함께 사용자 공간에서 파일 시스템을 만듭니다. 대용량 저장 장치를 통해 Windows로. Windows가 한 파일에 액세스 할 때마다 콜백을 받고 즉시 데이터를 암호화합니다. 더 자세히, 우리는 동적 콘텐츠를 가질 수 있습니다 - 예 : 일부 암호가 파일에 기록되면 더 많은 내용이 표시됩니다.

문제 : 대용량 저장 장치 가젯 (예 : g_file_storage )을 사용할 때만 파일을 수락하거나 블록 디바이스 - 그러나 파일 시스템 (디렉토리)은 없습니다. 왜?

[...] 하드 드라이브 [...]에 액세스하는 데 사용되는 로우 레벨 인터페이스와 같이 데이터의 섹터를 읽고 쓰는 간단한 인터페이스를 제공합니다. 운영 체제는 하드 드라이브와 같은 USB 드라이브를 처리하고 원하는 파일 시스템으로 포맷 할 수 있습니다. ( Wikipedia)

대용량 저장 장치를 통해 동적 파일 시스템을 사용할 수있는 기회가 없으며 이유는 이유가있는 것처럼 보입니다. 왜냐하면 내 Android 휴대폰이 전화로 모든 데이터를 마운트하지 않게합니다. PC.

옵션 :

도움이 되었습니까?

해결책

USB 대용량 저장소 프로토콜은 블록 장치 프로토콜입니다. 파일이나 디렉토리 수준에서는 작동하지 않습니다. Windows 호스트는 g_mass_storage 드라이버가 노출 된 원시 VFAT 파일 시스템을보고 디렉토리가 구조화되는 방법을 알아 내기에 적절하게 Writes 및 Read를 읽고 읽습니다.

이 때문에 FUSE 파일 시스템을 Windows 호스트에 노출하는 것은 아직 중요하지 않습니다. 가상 파일 시스템의 블록을 메타 데이터 및 데이터에 지정하고 Windows 호스트가 읽는 데이터 또는 메타 데이터를 자유롭게 할 수 없으므로 변경할 수없는 일부 메타 데이터 또는 데이터를 할당 할 수 없으므로 변경할 수 없으므로 변경할 수 없으므로 퓨즈 데이터를 Windows 파일 시스템에 반영 할 수 없습니다. Windows 호스트는 메타 데이터 및 데이터 모두에 대한 쓰기를 지연시키고 재구성 할 수 있습니다. 에뮬레이트하려고하면 모든 실제 엉망입니다.

이제는 할 수있는 일이 있습니다 :

  1. 파일 / 디렉토리 수준에서 작동하는 사용자 지정 프로토콜을 통해 Linux 장치와 상호 작용하려면 Windows 측면에 사용자 정의 IFS 드라이버를 작성할 수 있습니다.
  2. USB 장치를 가상 이더넷 포트로 처리하고 Windows 호스트 에 CIFS를 사용하도록 할 수 있습니다.
  3. 어떻게 연결 시간에 정적 vFAT 레이아웃을 만들어 Windows 호스트에 노출 할 수 있습니다. 아직 해독 할 수없는 데이터는 원시 암호화 된 데이터를 캐싱하는 Windows 호스트를 피하기 위해 I / O 오류를 반환 할 수 있습니다.
  4. DM-Crypt를 사용하여 원시 블록 장치를 암호화 하고이 전체 블록 장치 (하나의 청크로 암호화 된)를 Windows로 노출 할 수 있습니다.
  5. MTP 가제트를 구현할 수 있습니다.

    이러한 접근법은 자신의 문제가 있습니다 :

    1. 에는 Windows 드라이버가 설치되어 있으며 Microsoft 등이 서명되어야 할 수있는 관리 액세스가없는 시스템에서는 드라이버를 설치할 수 없습니다.
    2. 는 자동 재생되지 않습니다. 사용자는 네트워크 브라우저를 탐색하여 파일에 액세스해야합니다. 방화벽 설정이 간섭 할 수 있습니다. 상당한 오버 헤드가있을 수 있습니다.
    3. 매우 복잡합니다. 백엔드의 메타 데이터 업데이트를 처리하는 것은 매우 어렵습니다. 놀람 플러그를 뽑은 이벤트가 파괴 될 수 있습니다. 사용자가 잠긴 파일에 액세스하려고하면 IO 오류를 수신하는 Windows 동작이 문제가 될 수 있습니다.
    4. 파일 수준 암호화는 사용할 수 없지만 그렇지 않으면 잘 작동해야합니다.
    5. 미디어가 아닌 파일에 대한 지원이 정확하게 확신 확실하지 않습니다. MTP가 있습니다. 지원은 대용량 저장소 지원만큼 널리 보급되지 않습니다.

다른 팁

이전에 호스트에 USB 대용량 저장 장치로 스스로 노출 된 Android가 대신 MTP 장치 (Honeycomb)로 작동하는 것을 알고 싶을 수도 있습니다.

"장치"와 "호스트"가 비록 반전되어 있지만 누군가가 옵션 1을 이미 구현했습니다. Qemu VVFAT VM이 디렉토리 / 파일에서 vfat filesytem을 포함하는 것처럼 보이는 가짜 블록 장치를 만들 수있는 vvfat 호스트의 나무.시작하기 전에 완전한 재귀 검사가 필요하며, OSES가 파일 시스템에 쓰는 방법에 대한 세부 사항에 따라 다르며 사용 중이는 동안 파일을 독립적으로 변경하지만 (때로는) 작업을 관리합니다.

NBD 프로토콜을 USB로 변환하고 "비트 뱅"USB를 USB 대용량 저장 장치로 USB 호스트에 표시 할 수 있습니다.

  • NBD 및 USB MSAS 스토리지는 모두 블록 레벨 디바이스들이 있으므로 하나의 프로토콜을 다른 프로토콜로 변환하는 것이 가능할 수 있습니다. 그러나 이것은 거의 확실히 프로그래밍이 필요하다고 생각하지 않으므로 거의 프로그래밍이 필요합니다. 그러나, http://travisgoodspeed.blogspot.com/2012. /07/emulation-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 호스트로 내보내는 것을 고려합니다.이것은 당신에게 필요한 통제 수준을 줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top