Wie lege ich den Apache2 DocumentRoot auf einen freigegebenen Ordner "vboxsf" für VirtualBox fest? (Berechtigungsfrage?)


17

Ich richte den Ubuntu 11.04-Desktop 32-Bit auf einer VirtualBox-VM mit einem freigegebenen Ordner auf dem Host ein. Der freigegebene Ordner ist

/media/sf_Dev/

Ich möchte Apache2 so ändern DocumentRoot, dass es auf diesen Ordner verweist. Daher habe ich /etc/apache2/sites-available/defaultdie vorhandenen zwei Pfade in dieser Datei zu / media / sf_Dev / anstelle von / var / www geändert und es wird nicht index.html angezeigt.

Wenn ich mich /varmit ls -lich sehe ,

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

und wenn ich ls -l /media/ich sehe

drwxrwx---  1 root vboxsf ... sf_Dev

und Apache scheint die index.html nicht zu sehen, die ich in dieses Verzeichnis gestellt habe ( cp /var/www/index.html /media/sf_Dev/iirc)

Ich habe auch versucht, envvars so zu bearbeiten, dass die Gruppe vboxsf wird, aber ich glaube, ich habe diesen Teil falsch gemacht.

export APACHE_RUN_GROUP=www-data

zu

export APACHE_RUN_GROUP=vboxsf

Was mache ich falsch, was muss ich tun, damit Apache2 Dateien aus diesem Verzeichnis bereitstellt? (Technisch möchte ich Dateien für Apache bereitstellen, /media/sf_Dev/apache/wwwaber ich stelle es mir Schritt für Schritt vor. Wenn Ihnen das hilft, Dinge kurzzuschließen, ist es das auch.)

Antworten:


22

Es ist wahrscheinlich am einfachsten, die vboxsf-Gruppe als zusätzliche Gruppe für Apache hinzuzufügen.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Fedora:

sudo usermod -a -G vboxsf apache

Dies geschieht für mich, wenn ich auf automatisch bereitgestellte freigegebene Ordner zugreifen möchte. Möglicherweise möchten Sie der vboxsf-Gruppe auch Ihren eigenen Benutzernamen hinzufügen, um auf die Dateien zuzugreifen.


Aber läuft die Apache-App unter dem Benutzernamen Apache? Ich dachte, das hat sich geändert.
Jcolebrand

Sie haben Recht, ich habe den Apache-Benutzer für Fedora und Ubuntu gemischt. bearbeitet :)
Fuu

1
Ich konnte mir viel Zeit sparen, als ich mit der manuellen Montage herumgespielt habe. Danke!
Xorinzor

Diese Lösung hat es für mich auf Ubuntu 15 behoben. Vielen Dank!
Ian Lewis

3

Das sieht nach einer Berechtigungsfrage aus. Sie benötigen eine Lese- und Ausführungsberechtigung /media/sf_Dev/für "Sonstige" (die dritte Gruppe von Berechtigungsbits, bei denen es sich derzeit um keine Berechtigungen oder handelt ---).

Sie müssen also diesen Befehl ausführen (da es sich um Ubuntu handelt, beachten Sie das sudo):

sudo chmod 775 /media/sf_Dev/

Das fügt read and execute für "other" hinzu und überlässt dem Eigentümer und der Gruppe die vollständigen Berechtigungen.

Stellen Sie außerdem sicher, dass die Indexdatei tatsächlich in / media / sf_Dev / vorhanden ist. (Ich gehe davon aus, dass Sie das sudo im Befehl cp vergessen haben und nicht als root ausgeführt werden.)


1
Ahhh, aber wenn ich das mache , werden nicht die Änderungen vorgenommen, die ich brauche. Etwas an den vboxfs lässt nicht zu, dass diese Änderungen vorgenommen werden (zB wie NFTS) ... oooh, was das Problem sein kann, die Dateien werden ursprünglich auf NTFS gehostet (da es sich um einen Windows-Host handelt), also glaube ich nicht kann das machen. ~~ Ich hatte vergessen, mir das Fehlerprotokoll anzusehen, bevor ich gefragt habe. Ich werde das heute Abend überprüfen. Angenommen, es handelt sich um einen Berechtigungsfehler.
Jcolebrand

@jcolebrand Regel Nr. 1 der Fehlerbehebung: Ist sie angeschlossen? Vergiss nicht, dass ich über den langfristigen Nutzen der Antwort nachdenke und dich als DB- und .NET-Typ kenne. : P
George Marian

@jcolebrand Also, dumme Frage: Hast du Apache neu gestartet? sudo apache2ctl restart
George Marian

hahahahaha, aus diesem Grund brauche ich Hilfe, ich bin ein db und .net Typ;) ... ja, ich bin tatsächlich reingefallen, sudo suals es anfing, eine Frau zu sein, damit ich in alle Verzeichnisse gehen und sehen konnte, was "kaputt" war ... Ich werde tun, was Josh später mit der PHP-Datei vorgeschlagen hat.
Jcolebrand

1
Es ist möglich, dass vboxsf das Festlegen von Berechtigungen für den Stammordner des Dateisystems nicht unterstützt und möglicherweise die Optionen mode, uid und gid mount bereitstellt, um Dateiberechtigungen global festzulegen.
billc.cn

2

Sie haben nicht gesagt, was der spezifische Fehler war, nur

und Apache scheint die index.html nicht zu sehen, die ich in dieses Verzeichnis gestellt habe

Der spezifische Fehler würde helfen. Sie können dies in Apache's ablegen, was error_lognormalerweise /var/log/apache2/error.logunter Ubunt zu finden ist, aber Sie können es über eine ErrorLogDirektive in Ihrem Apache konfigurieren<VirtualHost>

Ohne den eigentlichen Fehler gehe ich davon aus, dass George Marian korrekt ist und es sich um einen Berechtigungsfehler handelt. Sie können überprüfen, unter welcher Gruppe Apache ausgeführt wird:

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

Versuchen Sie, die Berechtigungen /media/sf_Dev/wie gesagt zu ändern .

Ich denke, Sie sollten dies besser mit einer Alias-Direktive handhaben , da Sie dann nur bestimmte Teile Ihres DocumentRoot auf Orte außerhalb von:

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

BEARBEITEN: Wenn der Apache-Server mod_php(nicht FastCGI PHP) hat und nicht verwendet suexec, können Sie feststellen, ob Apache unter der richtigen GID (Gruppen-ID) mit dem folgenden PHP-Snippit ausgeführt wird:

<?php

var_dump(posix_getegid());

Stellen Sie sicher, dass dieselbe GID wie zurückgegeben wird vboxsf. (Sie finden die GID für vboxsf in /etc/groups)


Ich hatte vergessen, mir das Fehlerprotokoll anzuschauen, bevor ich gefragt habe. Ich werde das heute Abend überprüfen. Angenommen, es handelt sich um einen Berechtigungsfehler. Siehe meine Antwort auf George oben
Jcolebrand

IN ORDNUNG. Dann sollten wir uns darauf konzentrieren, dass Apache als GID ausgeführt wird vboxsf. Können Sie die relevanten Teile bearbeiten und veröffentlichen, in denen Sie die geändert haben Group?
Josh

Ich habe eine Zeile in envvars bearbeitet und dort steht group, aber ich schaue gerade nicht auf die Box.
Jcolebrand

0

Wenn Sie den freigegebenen Ordner so konfiguriert haben, dass er automatisch bereitgestellt wird. Dann müssen Sie zuerst das gleiche deaktivieren und den freigegebenen Ordner manuell bereitstellen. Wenn Sie es bei jedem Start von vm automatisch bereitstellen müssen, müssen Sie den entsprechenden Eintrag in Ihrer / etc / fstab hinzufügen. (Es scheint ein Problem mit dem Mounten des freigegebenen vbox-Ordners über fstab zu geben. Das Hinzufügen des unten genannten Befehls in /etc/rc.local hat sich also als hilfreich erwiesen, um ihn beim Start zu mounten.)

Laden Sie den freigegebenen Ordner mit dem richtigen Benutzer / der richtigen Gruppe

Soweit ich das beurteilen kann, ist dieser Fehler auf den Eigentümer und die Gruppe des freigegebenen Ordners zurückzuführen. Apache erwartet, dass die gerenderten Dateien zur Gruppe www-data gehören. Standardmäßig gehört der freigegebene Ordner in VirtualBox jedoch dem vboxsf-Benutzer. Wir werden diesen Benutzer zur www-Datengruppe hinzufügen. Bearbeiten Sie dazu die Gruppeneigenschaften des Gasts:

sudo usermod -a -G vboxsf www-data

Wir mounten nun den freigegebenen Ordner und weisen ihn dem Benutzer und der Gruppe www-data zu. Sie können die Benutzer- und Gruppen-ID in der Datei / etc / passwd auf dem Gastcomputer überprüfen (cat / etc / passwd | grep 'www-data'). Unter Debian-basierten Betriebssystemen werden normalerweise beide IDs auf den Wert 33 gesetzt. Geben Sie einfach den folgenden Befehl für den Gast ein:

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

Beachten Sie, dass Website der Name des freigegebenen Ordners ist (siehe Abbildung oben) und / media / sf_website der Ort, an dem der Ordner bereitgestellt wird.

Weitere Details finden Sie unter folgendem Link: http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.