QEMU Windows 게스트와 Linux 호스트 간의 공유 폴더


24

과거에는 가상 게스트를 사용했는데 호스트의 폴더를 Windows 게스트와 공유하는 데 매우 적합합니다. QEMU와 비슷한 기능을 찾고 있습니다.

이 문서는 네트워크 어딘가에서 실행중인 Samba 서버를 공개하거나을 사용하여 Samba 서버 -net user,smb=/path/to/folder를 시작하도록 제안 합니다.

나는 -net user,smbQEMU 의 선택에 운이 없었습니다 . 모든 작업이 시작됩니다 smbd(포트 충돌로 인해 로컬로 실행중인 다른 서비스와 충돌). 말할 것도없이, 특히 여러 명의 손님을 염두에두고 사용할 수 없습니다. (Linux의 경우 -virtfs(계획 9)를 사용하여 폴더를 쉽게 공유 할 수 있습니다.)

Samba의 다른 문제는 폴더 공유에만 국한되지 않고 프린터 공유, 사용자 매핑 및 기타 기능도 수행한다는 것입니다. 필요한 것은 하나 이상의 폴더를 Windows 게스트와 공유하는 것입니다.

Windows 게스트와 작동하는 QEMU에 대한 대체 폴더 공유 방법이 있습니까?

아니면 매우 제한된 기능 세트로 제한하고 QEMU에 통합하도록 Samba를 구성하는 방법이 있습니까? 다음과 같아야합니다.

  • 네트워크의 모든 사람이 폴더에 액세스 할 수있는 것은 아닙니다.
  • 로컬 사용자 포함 (가능한 경우).
  • 다른 기능을 제공하지 않습니다 (프린터 공유).
  • 유스 케이스 : git 디렉토리를 Windows에 노출시키고 Windows에서 컴파일하고 Linux를 사용하여 분석하십시오.
  • 적절한 속도를 유지하기 위해 Windows는 virtio-scsi 및 virtio-net을 사용합니다.
  • Linux 호스트에서 Windows 7 게스트와 폴더를 공유 할 수 있습니다.


1
@CiroSantilli 包子 露 宪 六四 事件 法轮功이 질문은 Linux가 제대로 -virtfs작동하는 곳으로 태그되었습니다 (이 질문도 참조하십시오). 그러나 Windows 용 9p 드라이버를 인식하지 못합니다.
Lekensteyn

예, 그것이 속임수 또는 다른 것임을 말하지 않고, 단지 관련이 있습니다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

답변:


14

QEMU의 내장 삼바 서비스

작동하지 않는 -net user,smb옵션은 최신 Samba 버전 (> = 4)과 호환되지 않기 때문에 발생했습니다. 이 변경 사항은 QEMU v2.2.0 이상에서 수정되었습니다.

(데비안은 후자의 두 패치를 Jessie에있는 2.1 + dfsg-6으로 백 포트했습니다.)

용법

\\10.0.2.4\qemu사용자 네트워킹을 사용할 때 와 같이 하나의 폴더를 내보낼 수 있습니다 .

qemu-system-x86_64 \
    -net user,smb=/absolute/path/to/folder \
    -net nic,model=virtio \
    ...

이러한 옵션으로 QEMU가 성공적으로 시작되면를 /tmp/qemu-smb.*-*/포함하는 새 디렉토리가 작성됩니다 smb.conf. 충분히 빠르면 경로를 읽기 전용으로 만들거나 더 많은 폴더를 내보내도록이 파일을 수정할 수 있습니다.

동작 모드

samba 데몬은 포트 139 또는 445가 "사용자"네트워크를 통해 액세스 될 때마다 실행됩니다. smbd 프로세스의 표준 입 / 출력 / 오류를 통해 통신이 이루어집니다. 이것이 새로운 데몬이 실패한 이유이며, 오류 메시지를 프로토콜 메시지 대신 파이프에 씁니다.

이 작업 방법으로 인해 데몬은 호스트 포트에서 수신 대기하지 않으므로 게스트 만 액세스 할 수 있습니다. 따라서 네트워크의 다른 클라이언트 및 로컬 사용자조차도이 데몬을 사용하여 폴더에 액세스 할 수 없습니다.

samba 구성을 통해 QEMU v2.2.0 프린터 공유가 완전히 비활성화되었으므로 여기에 또 다른 걱정이 있습니다.

속도는 네트워크 어댑터에 따라 다르므로 Windows 에서 virtio netkvm드라이버 를 사용하는 것이 좋습니다 .

또한 데몬은 /usr/sbin/smbd컴파일 타임에 지정된 절대 경로 (일반적으로 )로 실행됩니다 ( --smbd옵션 사용). 새로운 바이너리 또는 interpose를 시도해야 할 때마다 smbd해당 경로에서 파일을 수정해야합니다.

다른 경고

게스트가 실행 권한을 가지 *.exe려면 실행 파일 ( )이 호스트 ( chmod +x FILE)에서 실행 가능해야합니다 . 파일을 실행하려면 acl allow execute always = True공유에 옵션을 추가하십시오 .

모든 파일을 실행할 수있는 읽기 전용 smb.conf 구성 예 (QEMU v2.2.0 기반) :

...
[qemu]
경로 = / home / peter / windows 
읽기 전용 = 
손님 ok = true
강제 사용자 = 피터 
acl 항상 실행 허용 = True

이 옵션을 사용했는데 읽기 / 쓰기 액세스가 모두 필요합니다. qemu 서비스를 다시 시작하고 그에 따라 conf를 업데이트했습니다. Windows 게스트 탐색기의 네트워크 폴더에 아무것도 표시되지 않습니다. 또한이 경우 호스트 IP (10.0.2.4라고 가정)를 어떻게 찾을 수 있습니까? 이 NIC의 게스트 IP는 10.0.2.15입니다. @ Lekensteyn-어떤 아이디어?
tsar2512

@ tsar2512 일반적으로 Explorer로 이동 한 다음 Map Network Drive를 사용하여에 편지를 할당합니다 \\10.0.2.4\qemu. 최근에 그 단계를 건너 뛰고 실행 대화 상자에서 직접 해당 경로를 열었습니다.
Lekensteyn

6

에서 2018 간단한 방법은 간 폴더 공유 리눅스 호스트 및 윈도우 가상 머신이하는 것입니다 수 있도록 RDP를 윈도우에서 guest&받는 연결 vm원격 데스크톱 클라이언트 Remmina 공유 폴더 및 수 :

Remmina RDP 설정

이 아래에 폴더를 만들고 이 PC ( 리눅스 공유 폴더hostname ) & A \\tsclient\shared-folder-name내부 네트워크 공유 guest. 네트워크 드라이브를 매핑 할 수도 있습니다.

Windows 게스트 폴더 공유

  • 이 솔루션은 실행 하지 않아도 samba됩니다.

  • libvirt/에서 테스트 virt-manager되었지만 모든 가상화에서 작동합니다.


흥미로운 기술인 파일 시스템 리디렉션은 RDP 기능인 것으로 보입니다. xfreerdp /drive:shared-folder-name,/home/user/shared옵션은 잘 작동합니다. 소스 코드 참조 : Remmina 구성 , FreeRDP 라이브러리 코드 .
Lekensteyn

잠재적 인 공격자의 위험이없는 안전한 솔루션입니까?
데이브
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.