无法使用 VirtualBox 共享文件夹作为 Apache 文档根目录

无法使用 VirtualBox 共享文件夹作为 Apache 文档根目录

经过数百次尝试,我终于成功让 Centos 5.8 挂载了 VirtualBox 共享文件夹(不是只读),现在显示为:

/media/sf_sites

这是我的主机(Mac OS X 10.8.2)上包含站点的一个文件夹。

该目录及其子文件夹均归用户root和组所有vboxsf

我已将用户添加apache到该组vboxsf

然而httpd不允许我将共享文件夹用作文档根目录。我的虚拟主机设置为:

DocumentRoot /media/sf_sites/mysite/public

Apache 重新启动时我得到以下信息:

Starting httpd: Warning: DocumentRoot [/media/sf_sites/mysite/public] does not exist
                                                           [  OK  ]

毫不奇怪,当我在浏览器中查看该网站时,出现了 403 错误。(“您无权访问此服务器上的 /。”)

有什么想法是否可以实现这个目标?

我想在 Mac 上进行开发,但使用 VirtualBox 中的 Linux 作为开发服务器。还有其他方法吗?

答案1

这是因为共享文件夹的 SELinux 安全上下文不允许 Apache 使用它。由于无法更改 VBox 共享文件夹的安全上下文,您可以修改 SELinux 安全策略以允许 Apache 使用该上下文。这类似于在防火墙中打开端口以向应用程序公开某个端口。关闭 SELinux 并不是一个好主意,正如其他人所建议的那样,因为这会使您的服务器更容易受到攻击。

首先,确保您的 apache 用户是拥有共享文件夹的组的一部分,如果不是,您可以使用如下命令添加它(用户/组名称在您的系统上可能不同):

usermod -aG vboxsf apache

然后你可以使用audit2allow生成新的安全策略来解决您的问题。这是一个很好的教程

如果您很懒,只想允许 Apache 读取您的 VBox 共享文件夹,您可以调整以下my_httpd_t.te策略文件并使用其中包含的命令将其应用于您的系统。

module my_httpd_t 1.0;

require {
        type httpd_t;
        type vmblock_t;
        class dir read;
        class file { read getattr open };
}

#============= httpd_t ==============
allow httpd_t vmblock_t:dir read;
allow httpd_t vmblock_t:file { getattr open read };

# Generated by audit2allow

# To apply this policy:
## checkmodule -M -m -o my_httpd_t.mod my_httpd_t.te
## semodule_package -o my_httpd_t.pp -m my_httpd_t.mod
## semodule -i my_httpd_t.pp
## systemctl restart httpd

答案2

在你的Linux中创建一个挂载点,安装SSHFS如果你还没有的话。

在 CentOS 中执行以下操作

sudo su - apache
sshfs root@< your OS X IP >:< web folder path > < mount point >

例如:

  • OS X IP:192.168.0.10
  • OS X Web 文件夹路径:/Users/me/webOSX
  • CentOS 挂载点:/var/www/webLinux

sshfs 命令将是:SSHFS[电子邮件保护]:/用户/我/webOSX / var / www / webLinux

答案3

我从来没有解决过“文件意外结束”的问题,但是后来流浪汉出现了,它为你完成了所有艰苦的工作。

答案4

DocumentRoot如果您需要将共享文件夹设置为Apache 服务器,则需要禁用 SELinux 。

转到/etc/selinux/config并更新如下内容:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#       targeted - Targeted processes are protected,
#       mls - Multi Level Security protection.
SELINUXTYPE=targeted

然后重启虚拟机。这也适用于 vagrant。

相关内容