Kvm

Libvirt Ubuntu VM:在共享文件夾中的來賓上創建的文件在主機上僅授予 root 訪問權限

  • April 20, 2022

我使用以下命令在執行 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)。我不想每次創建新文件/目錄時都必須手動執行chmodchown``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 。

引用自:https://unix.stackexchange.com/questions/491513