Libvirt Ubuntu VM:在共享文件夾中的來賓上創建的文件在主機上僅授予 root 訪問權限
我使用以下命令在執行 Ubuntu Server 16.04.5 LTS 的伺服器上創建了一個 Ubuntu VM:
sudo virt-install \ --name TEST \ --memory 2048 \ --vcpus 2 \ --location 'http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/' \ --os-variant ubuntu16.04 \ --disk path=/pools/pool0/images/vm/test,size=150,bus=virtio,sparse=no,format=qcow2 \ --filesystem type=mount,source=/pools/pool0/volumes/shared,target=shared,mode=mapped \ --network network=vms \ --graphics none \ --virt-type kvm \ --hvm \ --console pty,target_type=serial \ --extra-args 'console=ttyS0,115200n8 serial'
請注意,我創建了一個共享文件夾,
shared
使用映射訪問權限呼叫,以便允許在來賓上進行讀寫。然後我用這個命令啟動虛擬機:
virsh start TEST --console
在來賓內部,我已編輯
/etc/fstab
以使用此行自動掛載共享文件夾,其中 UID 1000 是我的使用者,GID 1000 是不包含其他成員的關聯組:shared /mnt 9p trans=virtio,version=9p2000.L,rw,uid=1000,gid=1000 0 0
在
/mnt
客戶機上的目錄中,執行ls -ln
會給出以下輸出:$ ls -ln /mnt total 42 drwxrwxr-x 8 1000 1000 8 Jul 28 23:52 Backups drwxrwxr-x 6 1000 1000 6 Dec 28 00:15 Media drwxrwxr-x 6 1000 1000 67 Mar 31 2018 Misc drwxrwxr-x 2 1000 1000 4 Mar 31 2018 Recipes
ls -ln
在目錄中的主機上執行時,我得到相同的輸出/pools/pool0/volumes/shared
:$ ls -ln /pools/pool0/volumes/shared total 42 drwxrwxr-x 8 1000 1000 8 Jul 28 23:52 Backups drwxrwxr-x 6 1000 1000 6 Dec 28 00:15 Media drwxrwxr-x 6 1000 1000 67 Mar 31 2018 Misc drwxrwxr-x 2 1000 1000 4 Mar 31 2018 Recipes
在來賓中,我可以作為非特權使用者創建和修改文件和文件夾:
$ mkdir /mnt/Media/test-dir $ touch /mnt/Media/test-file $ ls -ln /mnt/Media total 75 drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music drwxrwxr-x 75 1000 1000 75 Jul 16 21:02 Photos drwxrwxr-x 2 1000 1000 2 Dec 29 20:30 test-dir -rw-rw-r-- 1 1000 1000 0 Dec 29 20:31 test-file drwxrwxr-x 15 1000 1000 15 Dec 18 15:40 TV Shows
但是,在主機作業系統上,這些文件和文件夾僅被授予 root 訪問權限:
$ ls -ln /pools/pool0/volumes/shared/Media total 75 drwxrwxr-x 199 1000 1000 199 Dec 28 22:07 Movies drwxrwxr-x 152 1000 1000 153 Dec 25 16:26 Music drwxrwxr-x 75 1000 1000 75 Jul 16 21:02 Photos drwx------ 2 0 0 2 Dec 29 20:30 test-dir -rw------- 1 0 0 0 Dec 29 20:31 test-file drwxrwxr-x 15 1000 1000 15 Dec 18 15:40 TV Shows
我在我的伺服器上執行自動化腳本,為了使這些腳本正常工作,我需要使用 UID
1000
、 GID創建這些文件夾和目錄,目錄1000
權限為rwxrwxr-x
(775),rw-rw-r--
文件權限為 (664)。我不想每次創建新文件/目錄時都必須手動執行chmod
。chown``sudo
我需要解決這個問題,最好不必從頭開始重新安裝 VM。
對於任何好奇的人,我沒有找到解決該問題的方法。但是,我通過在主機上託管一個samba 共享(使用 dperson/samba docker 容器)然後在來賓上託管一個 samba 共享,設法避免了這個問題,我安裝
cifs-utils
了這一行,然後將這一行添加到\etc\fstab
://192.168.1.7/Shared /media/shared cifs guest,uid=1000,iocharset=utf8,vers=3.0 0 0
192.168.1.7
主機的 IP 地址在哪裡,Shared
是 Samba 共享的名稱,/media/shared
是我在來賓中安裝共享的位置。
您需要使用
mode=passthrough
而不是mode=mapped
. 在這裡很好地解釋了這一點:https ://rabexc.org/posts/p9-setup-in-libvirt 。