如何将Apache2 DocumentRoot设置为“ vboxsf” VirtualBox共享文件夹?(权限问题?)


17

我在VirtualBox VM上设置了32位Ubuntu 11.04桌面,并与主机共享了一个文件夹。共享文件夹为

/media/sf_Dev/

我想更改Apache2使其指向该DocumentRoot文件夹,所以我进行了编辑/etc/apache2/sites-available/default,以将该文件中的现有两个路径替换为/ media / sf_Dev /而不是/ var / www,并且它不会显示index.html。

当我看着时/varls -l我看到

drwxr-xr-x  2 root root ... www

ls -l /media/我看到

drwxrwx---  1 root vboxsf ... sf_Dev

而且Apache似乎看不到我放在该目录(cp /var/www/index.html /media/sf_Dev/iirc)中的index.html

我还尝试编辑envvars以使该组成为vboxsf,但我认为我做错了那部分。

export APACHE_RUN_GROUP=www-data

export APACHE_RUN_GROUP=vboxsf

我在做什么错,我需要怎么做才能使Apache2从该目录提供文件?(从技术上讲,我想从中为apache提供文件,/media/sf_Dev/apache/www但是我一次只计算了一个步骤,因此,如果这有助于您使事情短路,就可以了)

Answers:


22

将vboxsf组添加为apache的补充组可能是最简单的。

Ubuntu:

sudo usermod -a -G vboxsf www-data

软呢帽:

sudo usermod -a -G vboxsf apache

当我要访问自动挂载的共享文件夹时,为我完成了此操作。您可能还希望将自己的用户名添加到vboxsf组以访问文件。


但是apache应用程序是否在用户名apache下运行?我以为那变了>。>
jcolebrand's

您是正确的,我混合了apache用户和fedora和ubuntu。编辑:)
Fuu

1
节省了我大量时间进行手动安装..谢谢!
xorinzor 2013年

此解决方案已在Ubuntu 15上为我修复。非常感谢!
伊恩·刘易斯

3

看来是权限问题。您需要/media/sf_Dev/对“其他”(第三组权限位,目前没有权限---)进行读取和执行权限。

因此,您需要运行以下命令(因为它是Ubuntu,请注意sudo):

sudo chmod 775 /media/sf_Dev/

这将为“其他”添加读取和执行,并为所有者和组保留全部权限。

还要确保索引文件实际存在于/ media / sf_Dev /中。(我假设您在cp命令中忘记了sudo,并且您没有以root身份运行。)


1
啊,但是当我这样做时并没有做出我需要的更改。关于vboxfs的某些事情不会让这些更改发生(例如:像NFTS)...哦,这可能是问题所在,这些文件最初托管在NTFS上(因为它是Windows主机),所以我不认为我可以做到的。~~我忘了问之前先看一下错误日志。今天晚上我要检查一下。但是,假设这是一个权限错误。
jcolebrand 2011年

@jcolebrand故障排除规则1:是否已插入?没关系,我正在考虑答案的长期实用性,并且我知道您是数据库和.NET专家。:P
George Marian

@jcolebrand所以,愚蠢的问题:您是否重新启动了Apache? sudo apache2ctl restart
乔治·玛丽安

哈哈哈哈哈,这就是为什么我需要帮助,我是db和.net的人;)...是的,我实际上是在sudo su它开始成为一个笨蛋后就掉进去的,所以我可以进入所有目录并查看被“破坏了”的东西...我将按照Josh的建议去做PHP文件。
jcolebrand 2011年

1
vboxsf可能不支持文件系统根文件夹的设置权限,并且可能提供模式,uid和gid挂载选项以全局设置文件权限。
billc.cn

2

您没有说具体的错误是什么,只是

而且Apache似乎看不到我放在该目录中的index.html

具体的错误会有所帮助。您可以将此文件提交到Apache的中error_log,该文件通常/var/log/apache2/error.log位于Ubunt下,但可以通过您的ErrorLog指令中的配置<VirtualHost>

没有实际的错误,我认为George Marian是正确的,并且是权限错误。您可以使用以下命令查看Apache正在运行的组:

ps -o pid,group -o atime,comm=CMD awx | grep apache

/media/sf_Dev/如他所说,尝试链接权限。

我认为您最好使用Alias指令处理此问题,因为这将使您仅将DocumentRoot的某些部分指向外部位置:

Alias /info /media/sf_Dev
<Directory /media/sf_Dev >
  Order allow,deny
  Allow from all
</Directory>

编辑:如果Apache服务器具有mod_php(不是FastCGI PHP)并且未使用suexec,则可以使用以下PHP片段确定Apache是​​否在正确的GID(组ID)下运行:

<?php

var_dump(posix_getegid());

确保返回与相同的GID vboxsf。(您可以在中找到vboxsf的GID /etc/groups


我忘了问之前先看一下错误日志。今天晚上我要检查一下。但是,假设这是一个权限错误。请参阅上方我对George的回应
jcolebrand 2011年

好。然后,我们应该集中精力让Apache作为GID运行vboxsf。您可以在更改的地方编辑和发布相关的部分Group吗?
乔什

我在envvars中编辑了一行,它说是group,但是我现在不在看方框。
jcolebrand 2011年

0

如果已将共享文件夹配置为自动挂载。然后,您需要先禁用它,然后手动安装共享文件夹。如果每次启动vm都需要自动挂载它,则需要在/ etc / fstab中添加相应的条目。(似乎通过fstab挂载vbox共享文件夹存在一些问题。因此,在/etc/rc.local中添加下面提到的命令对我来说是可以在开始时挂载它的)。

使用正确的用户/组加载共享文件夹

据我所知,此错误是由于共享文件夹的所有者和组引起的。Apache希望呈现的文件属于www-data组。但是,默认情况下,VirtualBox中的共享文件夹属于vboxsf用户。我们将此用户添加到www-data组。为此,请在来宾上编辑组属性:

sudo usermod -a -G vboxsf www-data

现在,我们将挂载共享文件夹并将其分配给www-data用户和组。要查看用户和组ID,可以查看客户机上的/ etc / passwd文件(cat / etc / passwd | grep'www-data')。在基于Debian的操作系统上,两个id通常都设置为值33。因此,只需在guest虚拟机上发出以下命令:

mount -t vboxsf -o rw,uid=33,gid=33 website /media/sf_website

请注意,网站是共享文件夹的名称(如上面的屏幕截图所示),/ media / sf_website是该文件夹的安装位置。

有关更多详细信息,请参考此链接http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.