Comment définir Apache2 DocumentRoot sur un dossier partagé VirtualBox «vboxsf»? (problème d'autorisations?)

17

J'ai configuré le bureau Ubuntu 11.04 32 bits sur une machine virtuelle VirtualBox avec un dossier partagé sur l'hôte. Le dossier partagé est

/media/sf_Dev/

Je veux changer Apache2 pour pointer le DocumentRootvers ce dossier, j'ai donc modifié /etc/apache2/sites-available/defaultpour remplacer les deux chemins existants dans ce fichier vers / media / sf_Dev / au lieu de / var / www et il n'affichera pas index.html.

Quand je regarde /varavec ls -lje vois

drwxr-xr-x  2 root root ... www

et quand ls -l /media/je vois

drwxrwx---  1 root vboxsf ... sf_Dev

et Apache ne semble pas voir l'index.html que je mets dans ce répertoire ( cp /var/www/index.html /media/sf_Dev/iirc)

J'ai également essayé d'éditer des envvars pour que le groupe soit vboxsf mais je pense que j'ai mal fait cette partie.

export APACHE_RUN_GROUP=www-data

à

export APACHE_RUN_GROUP=vboxsf

Que fais-je de mal, que dois-je faire pour qu'Apache2 serve les fichiers de ce répertoire? (techniquement, je veux servir des fichiers pour apache, /media/sf_Dev/apache/wwwmais je figure une étape à la fois, donc si cela vous aide à court-circuiter les choses, qu'il en soit ainsi)

jcolebrand
la source

Réponses:

22

Il serait probablement plus facile d'ajouter le groupe vboxsf en tant que groupe supplémentaire pour apache.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Feutre:

sudo usermod -a -G vboxsf apache

Cela me convient lorsque je souhaite accéder aux dossiers partagés montés automatiquement. Vous pouvez également ajouter votre propre nom d'utilisateur au groupe vboxsf pour accéder aux fichiers.

Fuu
la source
Mais l'application apache fonctionne-t-elle sous le nom d'utilisateur apache? Je pensais que cela avait changé>.>
jcolebrand
Vous avez raison, j'ai mélangé l'utilisateur apache pour fedora et ubuntu. édité :)
Fuu
1
M'a sauvé un tas de temps à tripoter le montage manuel .. merci!
xorinzor
Cette solution l'a corrigé pour moi sur Ubuntu 15. Merci beaucoup!
Ian Lewis
3

Cela ressemble à un problème d'autorisations. Vous aurez besoin d'une autorisation de lecture et d'exécution sur /media/sf_Dev/"autre" (le troisième groupe de bits d'autorisation, qui ne sont actuellement aucune autorisation ou ---).

Donc, vous devrez exécuter cette commande (puisque c'est Ubuntu, notez le sudo):

sudo chmod 775 /media/sf_Dev/

Cela ajoutera lecture et exécution pour "autre" et laissera toutes les autorisations pour le propriétaire et le groupe.

Assurez-vous également que le fichier d'index existe réellement dans / media / sf_Dev /. (Je suppose que vous avez oublié le sudo dans la commande cp et que vous ne vous exécutez pas en tant que root.)

George Marian
la source
1
Ahhh, mais quand je le fais , cela ne fait pas les changements dont j'ai besoin. Quelque chose au sujet des vboxfs ne permet pas ces changements (par exemple: comme NFTS) ... oooh, ce qui peut être le problème, les fichiers sont à l'origine hébergés sur NTFS (car c'est un hôte Windows), donc je ne pense pas que je peut faire ça. ~~ J'avais oublié de regarder le journal des erreurs avant de demander. Je vérifierai cela ce soir. Cependant, supposez qu'il s'agit d'une erreur d'autorisations.
jcolebrand
@jcolebrand Règle n ° 1 de dépannage: est-il branché? Peu importe que je pense à l'utilité à long terme de la réponse et que je vous connais en tant que type DB et .NET. : P
George Marian
@jcolebrand Donc, question idiote: avez-vous redémarré Apache? sudo apache2ctl restart
George Marian
hahahahaha, c'est pourquoi j'ai besoin d'aide, je suis un gars db et .net;) ... ouais, je suis tombé sudo sudedans une fois qu'il a commencé à être une garce pour que je puisse aller dans tous les répertoires et voir ce qui était "cassé" ... Je vais faire ce que Josh a suggéré plus tard avec le fichier PHP.
jcolebrand
1
Il est possible que vboxsf ne prenne pas en charge la définition des autorisations pour le dossier racine du système de fichiers et qu'il puisse fournir des options de montage mode, uid et gid pour définir les autorisations de fichier globalement.
billc.cn
2

Vous n'avez pas dit quelle était l'erreur spécifique, seulement

et Apache ne semble pas voir l'index.html que je mets dans ce répertoire

L'erreur spécifique aiderait. Vous pouvez le déposer dans Apache error_log, qui est généralement /var/log/apache2/error.logsous Ubunt, mais peut être configuré via une ErrorLogdirective dans votre<VirtualHost>

Sans l'erreur réelle, je suppose que George Marian est correct et qu'il s'agit d'une erreur d'autorisation. Vous pouvez vérifier sous quel groupe Apache est exécuté en utilisant:

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

Essayez de modifier les autorisations /media/sf_Dev/comme il l'a dit.

Je pense que vous feriez mieux de gérer cela avec une directive Alias car cela vous permettra de ne faire que certaines parties de votre DocumentRoot pointer vers des emplacements à l'extérieur:

Alias /info /media/sf_Dev
<Directory /media/sf_Dev >
  Order allow,deny
  Allow from all
</Directory>

EDIT: Si le serveur Apache a mod_php(et non FastCGI PHP) et ne l'utilise pas suexec, vous pouvez déterminer si Apache s'exécute sous le GID (ID de groupe) approprié avec l'extrait PHP suivant:

<?php

var_dump(posix_getegid());

Assurez-vous que renvoie le même GID que vboxsf. (Vous pouvez trouver le GID pour vboxsf dans /etc/groups)

Josh
la source
J'avais oublié de regarder le journal des erreurs avant de demander. Je vérifierai cela ce soir. Cependant, supposez qu'il s'agit d'une erreur d'autorisations. Voir ma réponse à George ci
jcolebrand
D'ACCORD. Ensuite, nous devons nous concentrer sur l'exécution d'Apache en tant que GID vboxsf. Pouvez-vous modifier et publier les parties pertinentes où vous avez modifié le Group?
Josh
J'ai édité une ligne dans les envvars, et ça disait groupe, mais je ne regarde pas la boîte en ce moment.
jcolebrand
0

Si vous avez configuré le dossier partagé pour qu'il soit monté automatiquement. Ensuite, vous devez d'abord désactiver le même et monter le dossier partagé manuellement. Si vous avez besoin de le monter automatiquement chaque fois que vous démarrez le vm, vous devez ajouter une entrée respective dans votre / etc / fstab. (Il semble qu'il y ait un problème de montage du dossier partagé vbox via fstab. L'ajout de la commande mentionnée ci-dessous dans /etc/rc.local a donc fonctionné pour moi pour le monter au démarrage).

Charger le dossier partagé avec le bon utilisateur / groupe

Pour autant que je sache, cette erreur est due au propriétaire et au groupe du dossier partagé. Apache s'attend à ce que les fichiers à rendre appartiennent au groupe www-data. Par défaut, cependant, le dossier partagé dans VirtualBox appartient à l'utilisateur vboxsf. Nous ajouterons cet utilisateur au groupe www-data. Pour ce faire, modifiez les propriétés du groupe sur l'invité:

sudo usermod -a -G vboxsf www-data

Nous allons maintenant monter le dossier partagé et l'affecter à l'utilisateur et au groupe www-data. Pour vérifier l'ID utilisateur et de groupe, vous pouvez consulter le fichier / etc / passwd sur la machine invitée (cat / etc / passwd | grep 'www-data'). Sur un système d'exploitation basé sur Debian, les deux identifiants sont généralement définis sur la valeur 33. Donc, lancez simplement la commande suivante sur l'invité:

mount -t vboxsf -o rw,uid=33,gid=33 website /media/sf_website

Notez que le site Web est le nom du dossier partagé (comme illustré dans la capture d'écran ci-dessus) et / media / sf_website est l'endroit où le dossier sera monté.

Pour plus de détails, reportez-vous à ce lien http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/

Pandurang Patil
la source