Fel*_*lix 13 server permissions virtualization qemu
Ubuntu Server 14.04 主机通过 libvirt/qemu-kvm 托管 Ubuntu Server 14.04 来宾。系统运行良好,但是 - 作为访客 - 我在写入共享文件夹 ( <filesystem>) 时遇到问题,这让我发疯。两台机器都是相对的香草安装。
我像这样附加了给定的文件夹:
[host] $ virsh edit guest-vm-name
# ...
<filesystem type='mount' accessmode='mapped'>
<source dir='/data'/>
<target dir='/data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</filesystem>
# ...
Run Code Online (Sandbox Code Playgroud)
从来宾我挂载文件系统如下:
[guest] $ sudo -u www-data mkdir /tmp/mnt
[guest] $ sudo mount -t 9p -otrans=virtio,rw,version=9p2000.L /data /tmp/mnt
Run Code Online (Sandbox Code Playgroud)
我使用www-data用户,因为它稍后将成为有效用户,如果使用 p9,则组和用户 ID 必须匹配,afaiu。这也意味着在主机上,/data(这是 ext4 分区,RAID 上的 LVM)看起来像
[host] $ ls -lha /data
[host] $ drwxrwxr-x 4 www-data www-data 4.0K Nov 11 08:34 .
[host] $ drwxr-xr-x 24 root root 4.0K Nov 7 16:58 ..
[host] $ drwxr-xr-x 2 www-data www-data 4.0K Nov 11 08:34 jail
# ...
Run Code Online (Sandbox Code Playgroud)
在来宾中,如果我尝试写入共享文件系统上的任何内容,我会收到权限错误(无论使用的用户如何):
[guest] $ sudo -u www-data touch /tmp/mnt/jail/letmeout
touch: cannot touch ‘/tmp/mnt/jail/letmeout’: Permission denied
Run Code Online (Sandbox Code Playgroud)
虽然我可以读取文件
[guest] $ cat /tmp/mnt/jail/throughthewindow
Great Weather!
Run Code Online (Sandbox Code Playgroud)
我尝试了各种方法,尤其是:
/etc/libvirt/qemu.conf/etc/libvirt/qemu.conf/var/log/syslog 和 dmesg 没有显示任何可疑内容。
有什么指点吗?!谢谢。
Ale*_*der 12
我知道,这是一个旧线程,但我刚刚遇到了一个类似的问题,并找到了一个至少部分有效的解决方案。
我也像你一样将 user 和 group 值更改/etc/libvirt/qemu.conf为root。
但我也改变了dynamic_ownership设置,因为描述听起来很有希望:
# libvirt 是否应该动态更改文件所有权
# 以匹配上面配置的用户/组。默认为 1。
# 设置为 0 以禁用文件所有权更改。
我的设置是:
rootlibvirt(可能很重要)/mnt/data)上的挂载点属于用户 1000 ("alexander")我现在终于可以写在安装共享文件夹中的文件与两个根(0)和亚历山大(1000)。(在我这样做之前,这里只允许 root 写入文件)
设置dynamic_ownership为 0 是必须在“映射”访问模式中完成的操作。
以下是有关我的设置的更多信息:
user = "root"
group = "root"
dynamic_ownership = 0
Run Code Online (Sandbox Code Playgroud)
<!-- ... -->
<filesystem type='mount' accessmode='mapped'>
<source dir='/share/vm.localdomain/owncloud_data'/>
<target dir='/data'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</filesystem>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)
ls -al /share/vm.localdomain/owncloud_data/
total 8
drwxr-xr-x 2 root root 4096 Sep 8 00:15 .
drwxr-xr-x 7 root root 4096 Sep 8 00:10 ..
Run Code Online (Sandbox Code Playgroud)
/data /mnt/data/ 9p trans=virtio 0 0
Run Code Online (Sandbox Code Playgroud)
root@debian:~# cd /mnt/data
root@debian:/mnt/data# touch touched_by_root
root@debian:/mnt/data# su - alexander
alexander@debian:~$ cd /mnt/data
alexander@debian:/mnt/data$ touch touched_by_user
alexander@debian:/mnt/data$ ls -al
total 16
drwxr-xr-x 2 alexander alexander 4096 Sep 8 00:30 .
drwxr-xr-x 6 root root 4096 Sep 7 18:13 ..
-rw-r--r-- 1 root root 0 Sep 8 00:30 touched_by_root
-rw-r--r-- 1 alexander alexander 0 Sep 8 00:30 touched_by_user
Run Code Online (Sandbox Code Playgroud)
root@Host /share/vm.localdomain # ls -al /share/vm.localdomain/owncloud_data/
total 16
drwxr-xr-x 2 root root 4096 Sep 8 00:30 .
drwxr-xr-x 7 root root 4096 Sep 8 00:10 ..
-rw------- 1 root libvirt-qemu 0 Sep 8 00:30 touched_by_root
-rw------- 1 root libvirt-qemu 0 Sep 8 00:30 touched_by_user
Run Code Online (Sandbox Code Playgroud)
奇怪的是,在来宾上这两个文件属于不同的用户(root 与 alexander),而在主机上,这两个文件属于同一个用户(root:libvirt-qemu)。:-O
我不知道这个魔法究竟是如何工作的,但显然它确实如此。
希望这会有所帮助,
亚历山大
小智 0
我也遇到了这个问题,/home/user/shared在主机上创建了一个名为的文件夹,然后使用 virt-manager 添加该文件夹并将其作为 9p virtio 安装在 qemu 虚拟机上。
我检查了 /etc/apparmor.d/libvirt 中的设置,它有新的条目/home/user/shared,,我注意到它只具有 ' r' 权限/home/user/shared,但它rw具有/home/user/shared/. 我尝试添加 aw 以获得写入权限,但这似乎没有保存,所以我进入主机/home/user/shared并创建了一个子目录,并在该子目录上执行了 chmod 777 。这很有效,来宾虚拟机能够向 su 控制器写入任何创建和编辑的文件。
tldr:在共享文件夹中创建一个具有 777 权限的子目录,看看是否可以写入该子目录。
| 归档时间: |
|
| 查看次数: |
22856 次 |
| 最近记录: |