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


3

经历了几百圈之后,我终于设法让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作为开发服务器。有替代方法吗?

Answers:


1

在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 root@192.168.0.10:/ Users / me / webOSX / var / www / webLinux


这成功安装,但是存在相同的问题:DocumentRoot [/var/www/sites/mysite/public] does not exist
Adrian

更新:得到它一起工作user_allow_other的集/etc/fuse.confsshfs -o allow_other me@192.168.1.103:/Users/me/Sites /var/www/sites。但是Apache将“意外的文件结尾”错误抛出到error_log中。
阿德里安

@Abe,您sudo su - apache在执行sshfs挂载之前是否进行过操作?

是的,我做到了。它似乎基本上可以正常工作,但是PHP的文件长度有问题(意外的文件错误结尾)。得出的结论是,后端代码最好在服务器上本地使用!
阿德里安

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

0

我从未解决过“文件结尾意外”的问题,但是随后Vagrant出现了,这为您完成了所有艰苦的工作。


-1

如果需要将共享文件夹设置为DocumentRootApache服务器的文件夹,则需要禁用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

然后重新启动您的虚拟机。这也适用于无业游民。

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.