Как установить Apache2 DocumentRoot в общую папку VirtualBox «vboxsf»? (проблема с разрешениями?)

17

Я установил Ubuntu 11.04 desktop 32 bit на виртуальную машину VirtualBox с общей папкой на хосте. Общая папка

/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/iirc)

Я также попытался отредактировать envvars, чтобы сделать группу vboxsf, но я думаю, что сделал эту часть неправильно.

export APACHE_RUN_GROUP=www-data

в

export APACHE_RUN_GROUP=vboxsf

Что я делаю не так, что мне нужно сделать, чтобы Apache2 обслуживал файлы из этого каталога? (Технически я хочу обслуживать файлы для Apache, /media/sf_Dev/apache/wwwно я рассчитываю один шаг за раз, так что, если это поможет вам замкнуть накоротко, пусть будет так)

jcolebrand
источник

Ответы:

22

Вероятно, было бы проще добавить группу vboxsf в качестве дополнительной группы для apache.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Fedora:

sudo usermod -a -G vboxsf apache

Это делает это для меня, когда я хочу получить доступ к автоматически смонтированным общим папкам. Вы также можете добавить свое собственное имя пользователя в группу vboxsf для доступа к файлам.

Fuu
источник
Но работает ли приложение apache под именем apache? Я думал, что изменилось>.>
Jcolebrand
Вы правы, я смешал пользователя apache для fedora и ubuntu. отредактировано :)
Fuu
1
Сэкономил мне кучу времени возиться с ручным монтажом .. спасибо!
Ксоринзор,
Это решение исправило это для меня на Ubuntu 15. Большое спасибо!
Ян Льюис
3

Это похоже на проблему с разрешениями. Вам понадобится разрешение на чтение и выполнение /media/sf_Dev/для «другого» (третья группа битов разрешений, для которых на данный момент нет разрешений или ---).

Итак, вам нужно выполнить эту команду (так как это Ubuntu, обратите внимание на sudo):

sudo chmod 775 /media/sf_Dev/

Это добавит чтение и выполнение для «других» и оставит полные права для владельца и группы.

Также убедитесь, что индексный файл действительно существует в / media / sf_Dev /. (Я предполагаю, что вы забыли sudo в команде cp и что вы не работаете от имени пользователя root.)

Джордж Мариан
источник
1
Аааа, но когда я делаю это, он не вносит необходимые мне изменения. Что-то в vboxfs не позволяет вносить эти изменения (например, как в NFTS) ... ооо, что может быть проблемой, файлы изначально размещены на NTFS (так как это хост Windows), поэтому я не думаю, что могу сделать это. ~~ Я забыл посмотреть журнал ошибок, прежде чем спрашивать. Я проверю это сегодня вечером. Однако предположим, что это ошибка прав доступа.
Jcolebrand
@jcolebrand Правило № 1 устранения неполадок: подключено ли оно? Не берите в голову, что я думаю о долгосрочной полезности ответа и знаю вас как парня из БД и .NET. : P
Джордж Мариан
@jcolebrand Итак, глупый вопрос: ты перезапустил apache? sudo apache2ctl restart
Джордж Мариан
хахахахаха, вот почему мне нужна помощь, я парень из db and .net;) ... да, я действительно зашел, sudo suкогда он стал девкой, поэтому я мог зайти во все каталоги и посмотреть, что "сломалось" ... Я сделаю то, что предложил Джош позже с файлом PHP.
Jcolebrand
1
Вполне возможно, что vboxsf не поддерживает установку разрешений для корневой папки файловой системы и может предоставить параметры монтирования mode, uid и gid для глобальных настроек разрешений для файлов.
billc.cn
2

Вы не сказали, в чем была конкретная ошибка, только

и Apache, похоже, не видит index.html, который я помещаю в этот каталог

Конкретная ошибка поможет. Вы можете подать это в Apache error_log, который обычно находится /var/log/apache2/error.logпод Ubunt, но может быть настроен через ErrorLogдирективу вашего<VirtualHost>

Без фактической ошибки я предполагаю, что Джордж Мариан прав, и это ошибка прав доступа. Вы можете проверить, в какой группе работает Apache, используя:

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

Попробуй разрешения на chainging, /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, вы можете определить, работает ли Apache под правильным GID (идентификатор группы) с помощью следующего фрагмента PHP:

<?php

var_dump(posix_getegid());

Убедитесь, что возвращает тот же GID, что и vboxsf. (Вы можете найти GID для vboxsf в /etc/groups)

мистифицировать
источник
Я забыл посмотреть журнал ошибок, прежде чем спрашивать. Я проверю это сегодня вечером. Однако предположим, что это ошибка прав доступа. Смотрите мой ответ Джорджу выше
jcolebrand
OK. Тогда мы должны сосредоточиться на том, чтобы заставить Apache работать как GID vboxsf. Можете ли вы отредактировать и опубликовать соответствующие части, где вы изменили Group?
Джош
Я отредактировал одну строку в envvars, и там говорилось о группе, но я сейчас не смотрю на коробку.
Jcolebrand
0

Если вы настроили общую папку для автоматического монтирования. Затем вам нужно сначала отключить то же самое и смонтировать общую папку вручную. Если вам нужно автоматически монтировать его при каждом запуске vm, вам нужно добавить соответствующую запись в ваш / etc / fstab. (Кажется, есть некоторая проблема при монтировании общей папки vbox через fstab. Поэтому добавление нижеупомянутой команды в /etc/rc.local помогло мне смонтировать ее при запуске).

Загрузите общую папку с правильным пользователем / группой

Насколько я могу судить, эта ошибка связана с владельцем и группой общей папки. Apache ожидает, что файлы для рендеринга принадлежат группе www-data. Однако по умолчанию общая папка в VirtualBox принадлежит пользователю vboxsf. Мы добавим этого пользователя в группу www-data. Для этого отредактируйте свойства группы в гостевой системе:

sudo usermod -a -G vboxsf www-data

Теперь мы смонтируем общую папку и назначим ее пользователю и группе www-data. Чтобы проверить идентификатор пользователя и группы, вы можете посмотреть файл / etc / passwd на гостевой машине (cat / etc / passwd | grep 'www-data'). В ОС на основе Debian оба идентификатора обычно устанавливаются на значение 33. Поэтому просто введите следующую команду в гостевой системе:

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/

Пандуранг Патил
источник