Virtual Box(Ubuntu Guest、Windows Host)下共享文件夹的文件权限问题

use*_*019 132 ubuntu permissions virtual-machine virtualbox

我在 Virtual Box 上使用 Ubuntu,我有一个在主机 (Windows) 和 VM (Ubuntu) 之间共享的文件夹。当我在 Ubuntu 的共享文件夹中打开任何文件时,我无法更改它,因为它的所有者设置为 root。

如何将所有权更改为我自己?

这是输出ls -l

-rwxrwxrwx 1 root root 0 2012-10-05 19:17 BuildNotes.txt
Run Code Online (Sandbox Code Playgroud)

的输出df是:

m@m-Linux:~/Desktop/vbox_shared$ df
Filesystem   1K-blocks      Used Available Use% Mounted on
/dev/sda1     29640780  10209652  17925440  37% /
none            509032       260    508772   1% /dev
none            513252       168    513084   1% /dev/shm
none            513252        88    513164   1% /var/run
none            513252         0    513252   0% /var/lock
none            513252         0    513252   0% /lib/init/rw
Ubuntu       214153212  31893804 182259408  15% /media/sf_Ubuntu
/dev/sr0         53914     53914         0 100% /media/VBOXADDITIONS_4.2.0_80737
Ubuntu       214153212  31893804 182259408  15% /home/m/Desktop/vbox_shared
Run Code Online (Sandbox Code Playgroud)

VM 中的选项是 automount 并且不检查 readoly。

尝试使用/media/sf_Ubuntu,但获得权限错误:

m@m-Linux:/media$ ls -l 
total 10
drwxrwx--- 1 root vboxsf 4096 2012-10-23 15:35 sf_Ubuntu
drwxrwx--- 2 root vboxsf 4096 2012-10-21 23:41 sf_vbox_shared
dr-xr-xr-x 6 m    m      2048 2012-09-13 07:19 VBOXADDITIONS_4.2.0_80737
m@m-Linux:/media$ cd sf_Ubuntu/
bash: cd: sf_Ubuntu/: Permission denied
m@m-Linux:/media$ cd sf_vbox_shared/
bash: cd: sf_vbox_shared/: Permission denied
Run Code Online (Sandbox Code Playgroud)

请注意,我在组中vboxsf

m@m-Linux:~$ id
uid=1000(m) gid=1000(m) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare),1000(m),1001(vboxsf)
Run Code Online (Sandbox Code Playgroud)

Eig*_*ony 196

现在访问文件的常规方法是允许 VirtualBox 自动挂载共享文件夹(这将使其显示在 下/media/sf_directory_name),然后将您的常规 Ubuntu 用户添加到vboxsf组中(以 root 身份#)。

# usermod -aG vboxsf <youruser>
Run Code Online (Sandbox Code Playgroud)

默认情况下,无需手动操作,挂载看起来像这样,

drwxrwx--- 1 root vboxsf 40960 Oct 23 10:42 sf_<name>
Run Code Online (Sandbox Code Playgroud)

因此该vboxsf组具有完全访问权限。通过将您的用户添加到该组,您可以获得完全访问权限。因此,您不必担心更改他们的权限(这在 Windows 主机上没有意义),您只需授予自己访问权限即可。

在这种特定情况下,这是自动挂载的共享文件夹,

Ubuntu               214153212  31893804 182259408  15% /media/sf_Ubuntu
Run Code Online (Sandbox Code Playgroud)

通过将本地用户放入vboxsf组中,应该使用该目录访问共享文件夹。如果您想在用户的主目录下有一个“更好”的链接,您可以随时创建一个符号链接。

ln -s /media/sf_Ubuntu /home/m/Desktop/vbox_shared
Run Code Online (Sandbox Code Playgroud)

您需要重新启动 VM 才能使这些更改生效

如果您手动挂载共享文件夹,那么您需要使用mount命令上的相关选项来设置具有正确所有权的文件夹(即 gid、uid 和 umask 选项为mount)。这是因为 Host OS 不支持与 Linux 相同的权限系统,因此 VirtualBox 无法知道谁应该拥有这些文件。

但是,我强烈建议只将共享文件夹配置为自动挂载(这是 VirtualBox 本身中共享文件夹配置的设置)。


为免生疑问,我不相信您无论如何都可以正常更改权限,如果该文件系统以常规方式挂载,

tony@jabba:/media/sf_name$ ls -l tst.txt
-rwxrwx--- 1 root vboxsf 2283 Apr  4  2012 tst.txt
tony@jabba:/media/sf_name$ sudo chown tony tst.txt
[sudo] password for tony: 
tony@jabba:/media/sf_name$ ls -l tst.txt
-rwxrwx--- 1 root vboxsf 2283 Apr  4  2012 tst.txt
tony@jabba:/media/sf_name$ 
Run Code Online (Sandbox Code Playgroud)

  • 似乎需要重新启动才能使其生效。 (11认同)
  • 你值得一瓶啤酒来回答这个问题!!!在我遇到这个之前,我根本无法让它发挥作用。不敢相信这不是更多。我希望我能不止一次投票!! (7认同)
  • 当我尝试此操作时,我收到消息说用户已加入组,但是当我尝试更改共享文件夹中的文件时,当我想保存它时出现错误。错误是:无法保存文件 /home/m/Desktop/vbox_shared/test.tst 意外错误:重命名临时文件时出错:文本文件繁忙。 (2认同)

Yor*_*iev 6

为非 root Linux 用户从 Ubuntu 来宾启用对 Windows 主机上共享文件夹的完全读取、写入访问

此步骤将使您能够从 Linux 来宾终端访问 Windows 主机上的某个目录。在此示例中,从 OVB 角度来看,共享的名称将为 vshare(这是默认值),Windows 操作系统(主机操作系统)的完整目录路径将为“C:\var\”,完整文件路径将为要从来宾虚拟机访问它,将是“/vagrant”。最后,启用完全读/写访问权限的用户名将是“您”。

 # how-to add a shared folder on the host
 VBoxManage sharedfolder add "host-name" -name "vshare" -hostpath "C:\var" -automount
Run Code Online (Sandbox Code Playgroud)

1. 安装 Guest Additions 必备组件

通过发出以下命令来安装 Guest Additions 必备组件:

 sudo apt-get install -y build-essential make gcc  linux-headers-$(uname -r) 
 linux-headers-generic make linux-source  linux-generic linux-signed-generic
Run Code Online (Sandbox Code Playgroud)

2. 安装来宾添加

不要使用 .iso 文件从那里下载并运行安装程序 - 它根本不起作用!

sudo apt-get install virtualbox-guest-dkms 
Run Code Online (Sandbox Code Playgroud)

3. 启动时自动挂载共享

通过将以下行添加到 /etc/fstab 文件的末尾(请注意“vshare”conf 和 uid=10001 ),将共享目录配置为在 vm 启动时自动挂载:

/media/sf_vshare /vagrant vboxsf bind,uid=10001,rw,umask=0000 0 0
# eof file: /etc/fstab 
Run Code Online (Sandbox Code Playgroud)

4. 将自己添加到 vboxsf 组

# mount
sudo mount -a

sudo usermod -G vboxsf -a you 
Run Code Online (Sandbox Code Playgroud)

5. 重启并验证

重新启动虚拟机并通过 ssh 登录以验证文件共享。

# ssh to the vm
ssh you@host-name

# check as yourself that you have access
find /vagrant
Run Code Online (Sandbox Code Playgroud)