3

Перепрыгнув через несколько сотен обручей, мне наконец удалось получить Centos 5.8 для монтирования общей папки VirtualBox (которая не только для чтения), которая теперь появляется по адресу:

/media/sf_sites

Это папка на моем хост-компьютере (Mac OS X 10.8.2), содержащая сайты.

Каталог и его подпапки принадлежат пользователю root и группе vboxsf

Я добавил пользователя apache в группу vboxsf

Однако httpd не позволяет мне использовать мою общую папку в качестве корня документа. Мой vhost настроен как:

DocumentRoot /media/sf_sites/mysite/public

При перезапуске Apache я получаю это:

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

И, что неудивительно, при просмотре сайта в моем браузере я получаю ошибку 403. («У вас нет разрешения на доступ к / на этом сервере.»)

Есть идеи, можно ли сделать эту работу?

Я хочу разрабатывать на своем Mac, но использую Linux в VirtualBox в качестве сервера разработки. Есть ли альтернативный способ сделать это?

4 ответа4

1

Это связано с тем, что контекст безопасности SELinux общей папки не позволяет Apache использовать его. Поскольку контекст безопасности общих папок VBox не может быть изменен, вы можете изменить политику безопасности SELinux, чтобы позволить Apache работать с контекстом. Это похоже на открытие порта в брандмауэре, чтобы открыть определенный порт для приложения. Не рекомендуется отключать SELinux, как предлагали другие, так как это делает ваш сервер более уязвимым.

Во-первых, убедитесь, что ваш пользователь apache является частью группы, которой принадлежит общая папка. Если это не так, вы можете добавить ее с помощью команды, которая будет выглядеть следующим образом (имена пользователей / групп в вашей системе могут отличаться):

usermod -aG vboxsf apache

Затем вы можете использовать aud2allow для генерации новой политики безопасности для решения ваших проблем. Вот хороший учебник.

Если вы ленивы и хотите разрешить только доступ 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
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: /Users /me /webOSX
  • Точка монтирования CentOS: /var /www /webLinux

Команда sshfs будет выглядеть так: sshfs root@192.168.0.10:/Users/me/webOSX /var /www /webLinux

0

Я никогда не решал проблемы с «неожиданным концом файла», но потом появился Vagrant, и он сделал всю тяжелую работу за вас.

-1

Вам необходимо отключить SELinux, если вам нужно установить общую папку в качестве DocumentRoot вашего сервера Apache.

Перейдите в /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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .