在Virtual Box虚拟机中运行Ubuntu,共享目录的正确方式是什么,以及如何设置正确的权限?

在VirtualBox中,如何在OS X主机和Ubuntu客户机之间共享目录是最好的方法?
主机:Mac OS X 10.7.3 客户机:Ubuntu 12.04 客户机通过VirtualBox设置挂载了一个共享目录,访问权限设置为“完全访问”(Access=Full),并且自动挂载(Auto-Mount=Yes)。
这种设置存在以下问题。在我的共享目录中,我无法更改权限(不是权限被拒绝的错误,而是更改不起作用)。
Ubuntu 12.04(客户机):
% ls -l
total 0
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 1
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 10
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 2
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 3
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 4
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 5
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 6
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 7
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 8
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 9

Mac OS X 10.7.3(主机):
$ ls -l
total 0
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 1
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 10
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 2
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 3
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 4
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 5
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 6
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 7
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 8
-rw-r--r--  1 <my-mac-user>  staff  0 Apr 17 21:56 9

如果我在访客上进行chmod操作,什么都不会改变。
% chmod +x 1 | ls -l 1 # guest
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 1

如果我在主机上进行chmod操作,它会在主机上发生变化,但在虚拟机上不会发生变化。
$ chmod +x 1 | ls -l 1 # host
-rwxrwx--x  1 <my-mac-user>  staff  0 Apr 17 21:56 1

% ls -l 1 # guest
-rwxrwx--- 1 root vboxsf 0 Apr 17 21:56 1

啊,我弄明白了,但是我还需要等8个小时才能发布答案(积分不够)。解决方法是执行 sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src,其中umask是用户的umask值,uid和gid来自于id <user>src是VBox共享的名称,而/meida/sf_src是所需的挂载点。 - jmdeldin
8个回答

我已经弄清楚了!
要复现:
关闭虚拟机,在VBox的设置中添加共享文件夹(永久=是,自动挂载=否)。
启动虚拟机。
在终端中以普通用户身份运行“umask && id”命令,得到类似以下输出:
002 # 这是您的umask uid=1000(luser) gid=1000(luser) groups=1000(luser),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),109(lpadmin),124(sambashare),125(vboxsf)
使用sudo命令创建目录“/media/sf_src”(src是共享目录)。
src目录挂载为一个测试:
sudo mount.vboxsf -o umask=002,gid=1000,uid=1000 src /media/sf_src 
                           |   |        |        |   |-> where to mount
                           |   |        |        |       the file
                           |   |        |        |-> name of the shared dir
                           |   |        |            (in VBox settings)
                           |   |        |
                           \   |        /
                        from the `id` command

要在登录时自动挂载它,请编辑 /etc/fstab,并添加以下内容:
src /media/sf_src vboxsf umask=002,gid=1000,uid=1000

这正是我一直在寻找的!最终,我创建了一个共享用户组,用于apache2和那些可以访问挂载文件夹的用户。http://serverfault.com/questions/6895/whats-the-best-way-of-handling-permissions-for-apache2s-user-www-data-in-var - thesmart
谢谢!请注意,直到我发现/sbin/mount.vboxsf是一个悬空的符号链接之前,我遇到了很大的问题!删除它,然后运行ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions/mount.vboxsf /sbin/mount.vboxsf解决了这个问题!可能是由于客户附加组件安装时无法创建符号链接。我花了太多时间才弄清楚这个问题! - csl
3现在唯一的问题似乎是vboxsf不能处理符号链接!也就是说,在虚拟机中无法在共享文件夹中创建符号链接!(至少在OSX上,VirtualBox 4.3.10版本) - csl
这个步骤肯定是其中之一可以帮助你达到目标。但在我的情况下,当我切换到共享目录并尝试执行ls命令时,终端会卡住。 - demongolem

问题--vbox/ubuntu访问OSX共享驱动器的权限问题
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied

目标是在Mac和Ubuntu环境之间共享目录的简单方法。不幸的是,到目前为止我看到的例子似乎比实际需要的要复杂一些,并且并没有真正解释需要解决的真正问题。我将在这里尝试处理这两个问题。
这里的环境是运行OSX 10.9.5的Mac,使用Virtual Box 4.3.16执行安装了Guest扩展的Ubuntu-14.04.1。2014年9月的东西。
我认为整个问题在于Mac上的目录的uid和Ubuntu中的目录必须匹配 - 在OSX和Ubuntu之间分配给用户和组的默认gid是不同的,这就是问题所在。
要访问文件,必须拥有它或者是拥有它的组的成员。由于访问实际上是基于组的id号码而不是组名,所以只需要在双方创建一个共同的组号码,用户属于该组即可。
下面的解决方案正是这样做的。不要被所写内容的长度误导,它实际上非常简单。只是有很多很多关于正在发生的事情的例子。
我在这里会在OSX和VBOX控制台之间切换(mac和虚拟机/virtual-box/ubuntu),请确保你知道自己在哪个窗口。最后一点注意:下面的解决方案是基于在OSX和Ubuntu环境之间建立一个共同的组ID,以便文件权限正常工作。可能还有其他更现代的解决方案。这个解决方案非常简单易懂,在纯净的基本安装上运行。

注意这是在一个全新的10.9.5 Mac上完成的,里面什么都没有,没有连接到公司网络,除了默认软件外没有其他花哨的东西。这就是最简单的情况。

当我在Mac上进行默认安装时,“joe_public”是管理员用户,他的UID设置为501。

Joes-MacBook-Pro:/ joe_public$ id
uid=501(joe_public) gid=20(staff) groups=20(staff),999(vboxsf),401(com.apple.sharepoint.group.1),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),501(access_bpf),33(_appstore),100(_lpoperator),204(_developer),398(com.apple.access_screensharing),399(com.apple.access_ssh)

请注意,uid501 — 这是OSX上默认的第一个账户ID — 没有什么特别之处。
我创建了一些我想在Mac端共享的目录 — 请注意,出于备份原因,我没有将它们放在我的用户目录下。
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/shared
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/public 
Joes-MacBook-Pro:/ joe_public$ mkdir /vdisk/images

Joes-MacBook-Pro:vdisk joe_public$ ls -al
total 0
drwxr-xr-x   5 joe_public  admin   170 Oct  8 01:08 .
drwxrwxr-t  36 root        admin  1292 Oct  6 02:26 ..
drwxrwxrwx   2 joe_public  admin    68 Oct  6 01:08 images
drwxr-xr-x   3 joe_public  admin   102 Oct  8 01:07 public
drwxrwxrwx   4 joe_public  admin   136 Oct  8 00:45 shared

VBOX: ——————

简单的默认虚拟盒和Ubuntu安装 - 再次强调,当我安装Ubuntu时,默认管理员是joe_public。

请再次注意,OSX和Ubuntu之间的命名空间完全不同。这两个名称之间绝对没有任何关联。

joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ id
uid=1000(joe_public) gid=1000(joe_public)   groups=1000(joe_public),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)

创建了三个挂载点,使用Virtual Box的设置->共享文件夹图形界面。
Name      Path              Auto-mount  Access
images    /vdisk/images     Yes         Full
public    /vdisk/pubic      Yes         Read-only
shared    /vdisk/shared     Yes         Full

注意:我实际上不得不重新启动我的会话,以便所有这些挂载点都能正常工作。
joe_public@joe_public-ubuntu-VirtualBox:~$ mount | grep vboxsf
shared on /media/sf_shared type vboxsf (gid=999,rw)
public on /media/sf_public type vboxsf (gid=999,rw)
images on /media/sf_images type vboxsf (gid=999,rw)

请注意,这些的gid是999 —— 这是vboxsf组。
joe_public@joe_public-ubuntu-VirtualBox:~$ grep 999 /etc/group
vboxsf:x:999

这是由Virtual Box版本4.3.16自动分配给我们的。vbox文档显示了如何通过命令行手动挂载路径来更改此设置,但是谁会记得呢?只需接受GUI强制给我们的默认设置即可。
但是它不起作用(在这一点上是预期的——这就是我们试图解决的问题)。
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied

请注意,此时的 joe_public 不是 vboxsf 组的成员 - 直到我们解决这个问题之前,这将会成为一个问题。顺便说一下:这些是在创建帐户时分配给默认组的。
joe_public@joe_public-ubuntu-VirtualBox:/media$ grep joe_public /etc/group
adm:x:4:syslog,joe_public
cdrom:x:24:joe_public
sudo:x:27:joe_public
dip:x:30:joe_public
plugdev:x:46:joe_public
lpadmin:x:108:joe_public
joe_public:x:1000:
sambashare:x:124:joe_public

所以在这一点上我们拥有的是(我们还没有采取任何措施来修复它)
•   On mac,   joe_public gid is 501
•   On linux, joe_public gid is 1000
•   On linux, vboxfs gid is 999
•   On mac,   vboxsf does not exist

我们不想在任何一侧更改用户joe_public的gid,因为这会给已安装的系统带来麻烦,并且不能解决其他用户的问题。最简单的解决方案是在Mac端创建一个匹配的组ID“vboxsf”,并确保在两侧都将joe_public作为其成员。
因此,在vbox/ubuntu上,将joe_public添加到999号vboxsf组中。
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
joe_public@joe_public-ubuntu-VirtualBox:/$ grep 999 /etc/group
vboxsf:x:999:joe_public

我觉得在这里我退出了我的账户,然后重新登录。

OSX: —————

现在我们需要在Mac上创建一个vboxsf组。我怀疑名称实际上在这里并没有什么区别 - 重要的是999组ID。请记住,主机和虚拟机操作系统之间的目录系统名称空间(以及用户名)是不同的。但为了让生活变得简单,我们都称之为Mac上的vboxsf。同样的道理,为什么在两边都使用joe_public作为用户名。

OSX没有像Linux那样简单的添加组命令 - 所以使用dscl命令来进行多步骤操作。请参阅Mac OS文档以获取更多详细信息。请注意,我们在这里创建了vboxsf组,并将joe_public添加到该组中。

sudo dscl . -create /Groups/vboxsf
sudo dscl . -create /Groups/vboxsf name vboxsf
sudo dscl . -create /Groups/vboxsf passwd "*”
sudo dscl . -create /Groups/vboxsf gid 999
sudo dscl . -create /Groups/vboxsf GroupMembership joe_public

所以,此时,我们应该有
•   On mac, joe_public gid is 501
•   On linux, joe_public gid is 1000
•   On linux, vboxfs gid is 999
•   On mac, vboxsf gid is 999
•   On linux, joe_public is member of vboxsf 
•   On mac, joe_public is member of vboxsf

证明在这里是它是否有效 - 这就是下一步
VBOX: ------------
进入我们的目录并创建一个文件
joe_public@joe_public-ubuntu-VirtualBox:/$ cd /media/sf_shared
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ touch foo

检查我们是否成功创建了文件。
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf  102 Oct  8 00:44 .
drwxr-xr-x 5 root root   4096 Oct  8 00:30 ..
-rwxrwx--- 1 root vboxsf    0 Oct  8 00:44 foo

OSX: —————

Joes-MacBook-Pro:shared joe_public$ cd /vdisk/shared
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx  3 joe_public  vboxsf  102 Oct  8 00:44 .
drwxr-xr-x  6 joe_public  admin   204 Oct  8 00:17 ..
-rw-r--r--  1 joe_public  vboxsf    0 Oct  8 00:44 foo

Joes-MacBook-Pro:shared joe_public$ touch bar
Joes-MacBook-Pro:shared joe_public$ ls -al
total 0
drwxrwxrwx  4 joe_public  vboxsf  136 Oct  8 00:45 .
drwxr-xr-x  6 joe_public  admin   204 Oct  8 00:17 ..
-rw-r--r--  1 joe_public  vboxsf    0 Oct  8 00:45 bar

VBOX: ——————
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -al
total 4
drwxrwx--- 1 root vboxsf  136 Oct  8 00:45 .
drwxr-xr-x 5 root root   4096 Oct  8 00:30 ..
-rwxrwx--- 1 root vboxsf    0 Oct  8 00:45 bar
-rwxrwx--- 1 root vboxsf    0 Oct  8 00:44 foo

一切似乎都在运作中...

VBOX: —————— 最终验证

我们在这里要检查的是整个过程是否依赖于用户joe_publicvboxsf组的成员 - 最简单的方法就是将joe_public从组中移除

从组中移除用户joe_public

joe_public@joe_public-ubuntu-VirtualBox:~$ sudo gpasswd -d joe_public vboxsf
log out/in ubuntu

看看我们是否可以访问我们的目录 - 我们不能,这证明是一个组权限问题。
joe_public@joe_public-ubuntu-VirtualBox:/$ ls /media/sf_shared
ls: cannot open directory /media/sf_shared: Permission denied

将用户重新添加到vboxsf
joe_public@joe_public-ubuntu-VirtualBox:/$ sudo usermod -a -G vboxsf joe_public
log out/in ubuntu

它又恢复正常了!
joe_public@joe_public-ubuntu-VirtualBox:~$ ls -al /media/sf_shared
total 4
drwxrwx--- 1 root vboxsf  170 Oct  8 01:48 .
drwxr-xr-x 6 root root   4096 Oct  8 01:25 ..
-rwxrwx--- 1 root vboxsf    0 Oct  8 00:45 bar
-rwxrwx--- 1 root vboxsf    0 Oct  8 00:44 foo

VBOX: -- 又一个问题 -- vbox 中的符号链接 -------
如果你进入 /media/sf_shared,你会发现共享目录中的符号链接根本不起作用。如果你试图在共享驱动器上设置一个完整的 Linux 开发环境,这是一个非常大的问题。
joe_public@joe_public-ubuntu-VirtualBox:/media$ cd sf_images
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ls
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ mkdir test
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2
ln: failed to create symbolic link ‘test2’: Read-only file system

默认情况下,虚拟盒子共享不支持符号链接。请参阅下文以了解详细说明。基本上我理解的是,符号链接是一个安全漏洞,在2011年的4.1.8版本中通过禁用对它们的支持来进行了“修复”。我正在使用的是4.3.16版本...

https://www.virtualbox.org/ticket/10085

http://ahtik.com/blog/fixing-your-virtualbox-shared-folder-symlink-error/

幸运的是,有一个后门可以通过主机的VBoxManage命令重新启用它。就像往常一样,请理解可能会打开的安全漏洞。我在一个独立的开发机上,所以这似乎不是个问题。
OSX: ------------
Joes-MacBook-Pro:shared pbradstr$ VBoxManage setextradata Ubuntu VBoxInternal2/SharedFoldersEnableSymlinksCreate/shared 1   

注意:Ubuntu是我的虚拟机名称,shared是共享目录的名称。
您可以通过以下方式获取虚拟机名称:
Joes-MacBook-Pro:shared pbradstr$ VBoxManage list vms
"Ubuntu" {8461045a-1cee-4d44-8148-05920a47cee0}
Joes-MacBook-Pro:shared pbradstr$

无论是通过Virtual Box图形界面,还是通过共享文件夹名称,
Joes-MacBook-Pro:shared pbradstr$ VBoxManage showvminfo Ubuntu | grep -A 5 "Shared folders"
Shared folders:  

Name: 'shared', Host path: '/vdisk/shared' (machine mapping), writable
Name: 'public', Host path: '/vdisk/public' (machine mapping), readonly
Name: 'images', Host path: '/vdisk/images' (machine mapping), writable

我在这里重新启动了整个虚拟机系统,但是我还没有弄清楚它所需的最低要求。
无论如何,为了测试这个,请返回到你的vbox窗口。 VBOX: ---------
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_images$ ln -s test test2

没有错误 - 并验证
joe_public@joe_public-ubuntu-VirtualBox:/media/sf_shared$ ls -ald test*
drwxrwx--- 1 root vboxsf 102 Oct  8 11:33 test
lrwxrwx--- 1 root vboxsf   4 Oct  8 13:10 test2 -> test

OSX: ----------

回到Mac端,只是为了证明一切都正常运作

Joes-MacBook-Pro:shared pbradstr$ ln -s test test3
Joes-MacBook-Pro:shared pbradstr$ ls -ald test*
drwxr-xr-x  4 joe_public  admin  136 Oct  8 13:20 test
lrwxr-xr-x  1 joe_public  admin    4 Oct  8 13:10 test2 -> test
lrwxr-xr-x  1 joe_public  admin    4 Oct  8 13:21 test3 -> test

请注意,我只在OSX主机和Ubuntu虚拟机客户端上进行了测试。我列出的参考资料似乎表明,在基于Windows的主机上可能会出现问题。 留给学生的练习——————— 上述方法的好处是它可以在独立的机器上运行,没有网络访问。但是,如果您考虑一下,这个名称与ID的问题必须是任何异构计算环境之间的常见问题。
还有哪些解决方案可用,其中解决该问题的解决方案可用?像Active Directory(微软产品)之类的东西可能能够解决这个问题。有趣的是,获取这些解决方案的集合并比较它们的各种功能和权衡。

对我来说,我只需要做的就是:
sudo adduser [username] vboxsf

这对我来说已经足够让我访问共享文件夹了。该文件夹有一个vboxsf组,用户只需要被分配到该组就可以访问。 如果您需要设置更严格的访问权限或更可控的访问方式,您可能需要手动挂载并使用正确的用户ID进行操作。
对我来说,fstab解决方案不起作用,并导致机器无法正确启动。

自从VirtualBox v4.0以来,解决这些权限问题变得很容易!你不需要担心mkdir、mount、chmod、umask等。要访问自动挂载的共享文件夹(默认情况下出现在/media目录下,并以sf_前缀命名),你只需要做一件事:通过sudo usermod -a -G vboxsf [username]将你的用户名添加到vboxsf组中。
为了方便起见,你可能还想在你的home文件夹中创建指向这些共享文件夹的符号链接(例如ln -s /media/sf_Stuff ~/Stuff)。
来源:http://www.virtualbox.org/manual/ch04.html#sf_mount_auto

关于符号链接的观点很好。 - Shaun Dychko

在Virtualbox设置中创建共享文件夹后,Ubuntu会在下次启动系统时自动挂载它(您将在桌面上看到一个图标)。

enter image description here

但是如果您没有使用root账户,您将无权访问它。您需要做的是将您的用户账户添加到一个叫做“vboxsf”的用户组中:
sudo usermod -G vboxsf -a $USER

然后退出并重新登录。现在您可以访问共享文件夹了。

主机操作系统: macOS
虚拟机(客户端)操作系统: Ubuntu Server 16.04.5 LTS
VirtualBox v5.2.18
主机操作系统和客户端操作系统必须使用相同的用户(在后文中称为用户名)。

阶段1:安装VirtualBox Guest Additions

1.1. 找到VirtualBox Guest Additions,

$ cd /Applications/VirtualBox.app/Contents/MacOS/
$ cp VBoxGuestAdditions.iso ~/Downloads/

1.2. 启动虚拟机
1.3. 点击底部右侧任务栏中的CD图标
1.4. 选择“选择磁盘映像...”并搜索VBoxGuestAdditions.iso
1.5. 在客户端终端中输入以下命令(如果您通过SSH登录到主机终端,也可以在主机终端中执行此操作):
$ sudo su
$ apt update
$ apt upgrade
$ apt-get install dkms build-essential linux-headers-generic gcc make
$ mount /dev/cdrom /mnt
$ cd /mnt
$ sh ./VBoxLinuxAdditions.run
$ reboot

阶段2:共享文件夹设置:

2.1 在虚拟机中创建规则:

  • 停止虚拟机
  • 进入“设置 > 共享文件夹”
  • 点击窗口右上角的“添加新的端口转发规则”绿色按钮
  • 搜索并选择您想要共享的文件夹(例如:/path/to/shared/host_folder
  • 选择“自动挂载”和“永久性”选项
  • 启动虚拟机

2.2 要在/opt上挂载共享文件夹,您必须创建shared_folder_dir子文件夹并设置适当的权限:

$ sudo mkdir -p /opt/shared_folder_dir
$ sudo chmod ug+w -Rv /opt/shared_folder_dir
$ sudo chown username:username -Rv /opt/shared_folder_dir

2.3. 将 用户名 添加到 vboxsf 组中:
$ sudo adduser username vboxsf
$ sudo usermod -a -G vboxsf username

2.4. 重新启动虚拟机以应用更改:
$ sudo reboot

第三阶段:自动挂载host_folder/opt/shared_folder_dir
3.1. 修改虚拟机的/etc/rc.local文件:
$ sudo nano /etc/rc.local

将以下内容放在exit 0的上方:
# 'folder_name' = given in the shared folders configuration
# 'path/to/shared/folders' = guest path to access the shared folders from
# 'id' = prints uid/gid
# sudo mount -t vboxsf -o uid={uid},gid={gid} {shared_folder_name} {path/to/shared/folder}
sleep 5
sudo mount -t vboxsf -o uid=1000,gid=1000 host_folder /opt/shared_folder_dir
exit 0
<<< EOF >>>

注意:我已经添加了“sleep 5”来在VirtualBox Guest Additions启动后执行挂载操作。您可以通过“journalctl -b”命令来检查。
3.2. 重新启动虚拟机以应用更改:
$ sudo reboot

另请参阅


我找到了这个方法,我测试过在Ubuntu和Xubuntu中是有效的,只是自动挂载功能对我来说不起作用。

一. 安装“Guest Additions”

首先,需要将VirtualBox的“Guest Additions”安装到主机系统中:

在VirtualBox菜单中选择: 设备 -> 安装“Guest Additions”...

它会为主机系统挂载一个新的ISO文件。 在Ubuntu中会出现一张新的光盘(或者手动挂载它)。在终端窗口中以root权限运行VBoxLinuxAdditions-x86.run安装脚本(因为它是基于Intel的Mac):

cd /media/cdrom
sudo VBoxLinuxAdditions-x86.run

可能会要求您重新启动Ubuntu。

安装Guest Additions有许多优点,例如采用屏幕分辨率(窗口大小是系统分辨率,即没有滚动条),轻松的鼠标模式(无需按下左命令按钮释放鼠标光标)以及我们正在寻找的共享文件夹。

II. 创建共享文件夹

目标是访问共享文件夹,比使用sshd或Samba更容易的方法是什么。

在VitualBox菜单中选择:设备->共享文件夹...

  • 点击添加新共享文件夹按钮。
  • 选择文件夹路径-您Mac硬盘上的文件夹,例如/Users/ondrej/Pictures。
  • 选择文件夹名称-标识此共享文件夹在Ubuntu(作为主机系统)中的名称,例如pictures。
  • 选择使其永久-如果您想保留此共享文件夹定义。
  • 点击确定。
  • 点击确定关闭共享文件夹列表。

III. 挂载共享文件夹

将创建的共享文件夹挂载到具有用户权限的文件夹中。 让我们在Ubuntu上打开终端窗口并:

创建一个文件夹,用于挂载共享文件夹。(如果已经有了这个文件夹,请跳过此步骤。)
mkdir DIR

例如(在/tmp中)
mkdir share

获取用户UID:
id

结果将会是这样的:
uid=1000(ondrej)gid=1000(ondrej)groups=4(adm),20(dialout),24(cdrom),
46(plugdev),112(lpadmin),119(admin),120(sambashare),1000(ondrej)

我的用户的uid是1000。 将共享文件夹SHARED_FOLDER_NAME挂载到文件夹MOUNTED_FOLDER,并以root身份为具有uid USER_ID的用户设置所有权:
sudo mount -t vboxsf -o uid=USER_ID SHARED_FOLDER_NAME MOUNTED_FOLDER

例如

sudo mount -t vboxsf -o uid=1000 pictures /tmp/share

指定uid参数可以让您的用户写入共享文件夹。 挂载的文件夹MOUNTED_FOLDER(例如/tmp/share)包含来自Mac硬盘上共享文件夹的文件。也可以向共享文件夹写入内容。 可选择在虚拟机启动时自动挂载共享文件夹。 请将以下行添加到/etc/fstab文件中(作为root用户,例如sudo vim /etc/fstab):
SHARED_FOLDER_NAME /PATH/TO/MOUNTED/FOLDER vboxsf uid=1000,gid=1000 0 0

例如

pictures /tmp/share vboxsf uid=1000,gid=1000 0 0

在id命令的输出中可以找到uid和gid值(详细示例请参见步骤2)。 虚拟机重启后,共享文件夹仍然可用。
来源:http://www.valibuk.net/2009/03/accessing-mac-os-x-harddrive-from-ubuntu-in-virtualbox-via-shared-folders/