
KVM 게스트의 9p 공유에 대한 전체 쓰기 액세스를 설정하려고 합니다. 호스트와 게스트 모두 동일한 ID를 가진 동일한 사용자/그룹을 갖습니다. 호스트와 게스트 모두 동일한 사용자 이름을 사용하여 공유에 쓸 수 있어야 하며 파일이 호스트 또는 게스트에 의해 작성되었는지 구별하고 싶지 않습니다. kvm 프로세스가 루트로 실행 중입니다. /etc/libvirt/qemu.conf에 user
및를 group
설정 했습니다.root
호스트의 게스트 정의에서 공유는 다음과 같이 정의됩니다.
<filesystem type='mount' accessmode='passthrough'>
<source dir='/mnt/storage/data'/>
<target dir='data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
게스트에서 공유는 다음과 같이 마운트됩니다.
mount -t 9p -o rw,trans=virtio,version=9p2000.L,msize=262144 data /mnt/data
문제는 게스트의 루트 사용자가 호스트의 루트가 아닌 사용자가 소유한 파일/폴더에 쓸 수 없다는 것입니다. 더욱 이상한 점은 게스트의 루트가 이러한 파일의 이름을 바꾸고 삭제할 수 있다는 것입니다. 즉, 호스트 시스템에서 루트가 아닌 사용자로 파일을 생성하면 이름을 바꾸고 삭제할 수는 있지만 게스트의 루트로 편집할 수는 없습니다.
또한 루트가 아닌 사용자로 호스트에 생성된 폴더의 권한이 777로 설정되어 있으면 게스트의 루트가 해당 폴더에 쓸 수 있다는 사실도 발견했습니다(예: 폴더에 파일 생성). 그러나 이는 파일에는 적용되지 않습니다. 권한에 관계없이 여전히 편집할 수 없습니다.
호스트와 게스트 모두 Linux 서버 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64 GNU/Linux를 실행하고 있습니다. 데비안에서는 SELinux가 기본적으로 비활성화되어 있는데 저는 활성화하지 않았습니다. 사용 가능한 세 가지 9p 액세스 모드( passthrough
, mapped
및 ) 를 모두 시도했지만 squash
차이는 없었습니다.
작동하도록 조정할 수 있는 것이 있는지 궁금합니다. 아니면 단순한 버그인가요?
여기에 보고된 유사한 문제가 있습니다.libvirt/qemu를 사용하는 패스스루(9p) 파일 시스템에 대한 읽기/쓰기 액세스가 가능합니까?하지만 그 경우와는 달리 루트가 소유한 파일에 대해 100% 쓰기 액세스 권한이 있습니다. 게스트의 루트가 되어도 쓸 수 없는 루트가 아닌 사용자 파일일 뿐입니다.
답변1
나는 비슷한 문제가 있었지만 9p에서 작동하지 않았으며 다른 논평자들이 말했듯이 9p는 성숙하지 않았습니다.
나는 호스트 파일 시스템을 마운트하기 위해 삼바를 사용했고 잘 작동했습니다. 다른 네트워크 파일 시스템도 이 작업을 수행할 수 있습니다(예: Red Hat에서 권장하는 NFS, @Diagon의 의견 링크 참조).https://access.redhat.com/discussions/1119043).
답변2
공유 디렉토리의 acl과 같은 파일 시스템 추가 속성을 확인할 수 있습니까? 권한 문제가 의심됩니다.
답변3
제 경우에는 kvm 환경이 libvirt 사용자로 실행되고 있습니다. (기본값) 그런 다음 호스트의 libvirt-qemu.kvm이 /mnt/storage/data를 소유하고 chmod 0777 /mnt/storage/data가 배포된 경우 작동합니다. 게스트에서 일반 사용자(예: /mnt/storage/data/test/ )로 디렉토리를 생성할 수 있으며 루트는 사용자가 요청한 모든 작업을 수행할 수 있습니다. (게다가 게스트인 모든 사용자는 루트가 소유한 모든 파일도 삭제할 수 있습니다. 저는 호스트에서 권한을 777에서 775로 변경하여 이 문제를 관리했습니다. 게스트의 사용자가 그룹의 일부라면 그는 모든 것을 할 수 있습니다. 그렇지 않은 경우 읽기 권한만 갖습니다...)