![如何将 Apache2 DocumentRoot 设置为“vboxsf”VirtualBox 共享文件夹?(权限问题?)](https://linux22.com/image/1289361/%E5%A6%82%E4%BD%95%E5%B0%86%20Apache2%20DocumentRoot%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E2%80%9Cvboxsf%E2%80%9DVirtualBox%20%E5%85%B1%E4%BA%AB%E6%96%87%E4%BB%B6%E5%A4%B9%EF%BC%9F%EF%BC%88%E6%9D%83%E9%99%90%E9%97%AE%E9%A2%98%EF%BC%9F%EF%BC%89.png)
我在 VirtualBox VM 上安装了 Ubuntu 11.04 桌面 32 位,并与主机共享文件夹。共享文件夹是
/media/sf_Dev/
我想更改 Apache2 以指向DocumentRoot
该文件夹,因此我进行了编辑/etc/apache2/sites-available/default
以替换现有的二该文件中的路径为 /media/sf_Dev/ 而不是 /var/www,并且它不会显示 index.html。
当我看着/var
我ls -l
看到
drwxr-xr-x 2 root root ... www
当我ls -l /media/
看到
drwxrwx--- 1 root vboxsf ... sf_Dev
Apache 似乎看不到我放在该目录中的 index.html(cp /var/www/index.html /media/sf_Dev/
如果我没记错的话)
我也尝试编辑环境变量以使组成为 vboxsf,但我认为我做错了那部分。
export APACHE_RUN_GROUP=www-data
到
export APACHE_RUN_GROUP=vboxsf
我做错了什么,我需要做什么才能让 Apache2 从该目录提供文件?(从技术上讲,我想从 为 apache 提供文件,/media/sf_Dev/apache/www
但我认为一步一步来,所以如果这可以帮助你简化事情,那就这样吧)
答案1
将 vboxsf 组添加为 apache 的补充组可能是最简单的。
乌本图:
sudo usermod -a -G vboxsf www-data
Fedora:
sudo usermod -a -G vboxsf apache
当我想访问自动挂载的共享文件夹时,这对我来说就完成了。您可能还想将自己的用户名添加到 vboxsf 组以访问文件。
答案2
这看起来像是权限问题。您需要/media/sf_Dev/
对“其他”拥有读取和执行权限(第三组权限位,目前没有权限或---
)。
因此,您需要运行此命令(因为它是 Ubuntu,请注意 sudo):
sudo chmod 775 /media/sf_Dev/
这将为“其他”添加读取和执行权限,并为所有者和组保留完全权限。
还要确保索引文件确实存在于 /media/sf_Dev/ 中。(我假设您忘记了 cp 命令中的 sudo,并且您没有以 root 身份运行。)
答案3
你没有说具体错误是什么,只是
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
)
答案4
如果您已将共享文件夹配置为自动挂载。那么您需要先禁用该功能并手动挂载共享文件夹。如果您每次启动虚拟机时都需要自动挂载它,则需要在 /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。因此,只需在客户机上发出以下命令:
mount -t vboxsf -o rw,uid=33,gid=33 website /media/sf_website
请注意,website 是共享文件夹的名称(如上面的屏幕截图所示),/media/sf_website 是将安装该文件夹的位置。
更多详细信息请参阅此链接http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/