Jak ustawić Apache2 DocumentRoot na folder współdzielony VirtualBox „vboxsf”? (problem z uprawnieniami?)

17

Instaluję 32-bitowy system Ubuntu 11.04 na maszynie wirtualnej VirtualBox z folderem współdzielonym na hoście. Folder współdzielony to

/media/sf_Dev/

Chcę zmienić Apache2, aby wskazywał na DocumentRootten folder, więc edytowałem, /etc/apache2/sites-available/defaultaby zastąpić istniejące dwie ścieżki w tym pliku na / media / sf_Dev / zamiast / var / www i nie będzie pokazywał index.html.

Kiedy patrzę /varz ls -lwidzę

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

a kiedy ls -l /media/widzę

drwxrwx---  1 root vboxsf ... sf_Dev

i Apache nie widzi cp /var/www/index.html /media/sf_Dev/indeksu.html umieszczam w tym katalogu ( iirc)

Próbowałem także edytować envvary, aby grupa była vboxsf, ale myślę, że źle to zrobiłem.

export APACHE_RUN_GROUP=www-data

do

export APACHE_RUN_GROUP=vboxsf

Co robię źle, co muszę zrobić, aby Apache2 wyświetlał pliki z tego katalogu? (technicznie rzecz biorąc chcę podawać pliki dla apache, /media/sf_Dev/apache/wwwale robię krok po kroku, więc jeśli to pomoże ci zewrzeć rzeczy, niech tak będzie)

jcolebrand
źródło

Odpowiedzi:

22

Prawdopodobnie najłatwiej byłoby dodać grupę vboxsf jako dodatkową grupę dla apache.

Ubuntu:

sudo usermod -a -G vboxsf www-data

Fedora:

sudo usermod -a -G vboxsf apache

Robi to dla mnie, gdy chcę uzyskać dostęp do automatycznie montowanych folderów współdzielonych. Możesz także dodać własną nazwę użytkownika do grupy vboxsf, aby uzyskać dostęp do plików.

Fuu
źródło
Ale czy aplikacja apache działa pod nazwą apache? Myślałem, że to zmieniło>.>
jcolebrand
Masz rację, zmieszałem użytkownika apache dla fedora i ubuntu. edytowane :)
Fuu
1
Zaoszczędziłem sporo czasu na ręcznym montażu. Dzięki!
xorinzor,
To rozwiązanie naprawiło to dla mnie na Ubuntu 15. Wielkie dzięki!
Ian Lewis
3

To wygląda na problem z uprawnieniami. Będziesz musiał odczytać i wykonać zezwolenie na /media/sf_Dev/„inne” (trzecia grupa bitów uprawnień, które obecnie nie mają uprawnień lub ---).

Musisz uruchomić to polecenie (ponieważ jest to Ubuntu, zwróć uwagę na sudo):

sudo chmod 775 /media/sf_Dev/

Spowoduje to dodanie odczytu i wykonanie dla „innych” i pozostawi pełne uprawnienia właścicielowi i grupie.

Upewnij się także, że plik indeksu faktycznie istnieje w / media / sf_Dev /. (Zakładam, że zapomniałeś sudo w poleceniu cp i że nie działasz jako root).

George Marian
źródło
1
Ahhh, ale kiedy to zrobię , nie spowoduje to zmian, których potrzebuję. Coś w vboxfs nie pozwala na dokonanie tych zmian (np .: jak NFTS) ... oooh, co może być problemem, pliki są pierwotnie hostowane na NTFS (ponieważ jest to host Windows), więc nie sądzę mogę to zrobić. ~~ Zapomniałem spojrzeć na dziennik błędów, zanim zapytałem. Sprawdzę to dziś wieczorem. Załóżmy jednak, że jest to błąd uprawnień.
jcolebrand
@ jcolebrand Zasada nr 1 rozwiązywania problemów: czy jest podłączony? Nieważne, że myślę o długoterminowej użyteczności odpowiedzi i że znam cię jako faceta DB i .NET. : P
George Marian
@jcolebrand Głupie pytanie: czy uruchomiłeś ponownie Apache? sudo apache2ctl restart
George Marian
hahahahaha, dlatego potrzebuję pomocy, jestem facetem db i .net;) ... tak, właściwie wpadłem, sudo sukiedy to zaczęło być dziewką, więc mogłem przeglądać wszystkie katalogi i sprawdzać, co zostało „zepsute” ... Zrobię to, co Josh zasugerował później z plikiem PHP.
jcolebrand
1
Możliwe, że vboxsf nie obsługuje uprawnień do ustawiania folderu głównego systemu plików i może udostępniać opcje montowania trybów, identyfikatorów UID i GID w celu globalnego ustawienia uprawnień do plików.
billc.cn
2

Nie powiedziałeś tylko, jaki był konkretny błąd

i Apache wydaje się nie widzieć pliku index.html umieszczonego w tym katalogu

Pomógłby konkretny błąd. Możesz to zgłosić w Apache error_log, który zazwyczaj znajduje się /var/log/apache2/error.logpod Ubunt, ale można go skonfigurować poprzez ErrorLogdyrektywę w twoim<VirtualHost>

Bez faktycznego błędu zakładam, że George Marian ma rację i jest to błąd uprawnień. Możesz sprawdzić, pod jaką grupą działa Apache, używając:

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

Spróbuj się uporać z uprawnieniami, /media/sf_Dev/jak powiedział.

Myślę, że lepiej jest poradzić sobie z tym za pomocą dyrektywy Alias, ponieważ pozwoli to na wskazanie tylko niektórych części twojego DocumentRoot na lokalizacje poza:

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

EDYCJA: Jeśli serwer Apache ma mod_php(nie FastCGI PHP) i nie używa suexec, możesz ustalić, czy Apache działa pod odpowiednim GID (ID grupy) z następującym snippitem PHP:

<?php

var_dump(posix_getegid());

Upewnij się, że zwraca ten sam identyfikator GID co vboxsf. (Możesz znaleźć GID dla vboxsf w /etc/groups)

Josh
źródło
Zanim zapytałem, zapomniałem spojrzeć na dziennik błędów. Sprawdzę to dziś wieczorem. Załóżmy jednak, że jest to błąd uprawnień. Zobacz moją odpowiedź dla George'a powyżej
jcolebrand
DOBRZE. Następnie powinniśmy skupić się na uruchomieniu Apache jako GID vboxsf. Czy możesz edytować i publikować odpowiednie części, w których zmieniłeś Group?
Josh
Zredagowałem jedną linijkę w envvars i napisałem grupę, ale nie patrzę teraz na pudełko.
jcolebrand
0

Jeśli skonfigurowano folder współdzielony do automatycznego montowania. Następnie musisz to samo wyłączyć i ręcznie zamontować folder współdzielony. Jeśli potrzebujesz go automatycznie zamontować za każdym razem, gdy uruchamiasz vm, musisz dodać odpowiedni wpis w pliku / etc / fstab. (Wygląda na to, że wystąpił problem z montowaniem folderu współdzielonego vbox przez fstab. Więc dodanie poniżej wspomnianego polecenia wewnątrz /etc/rc.local działało dla mnie, aby zamontować go na starcie).

Załaduj folder współdzielony z poprawnym użytkownikiem / grupą

O ile mi wiadomo, ten błąd wynika z właściciela i grupy udostępnionego folderu. Apache oczekuje, że pliki będą renderowane w grupie www-data. Domyślnie jednak folder współdzielony w VirtualBox należy do użytkownika vboxsf. Dodamy tego użytkownika do grupy danych www. W tym celu edytuj właściwości grupy gościa:

sudo usermod -a -G vboxsf www-data

Zamontujemy teraz folder współdzielony i przypiszemy go do użytkownika i grupy danych www. Aby sprawdzić identyfikator użytkownika i grupy, możesz zajrzeć do pliku / etc / passwd na maszynie gościa (cat / etc / passwd | grep 'www-data'). W systemie operacyjnym opartym na Debianie oba identyfikatory są zwykle ustawione na wartość 33. Więc po prostu wydaj następującą komendę na gościu:

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

Zauważ, że strona internetowa to nazwa folderu współdzielonego (jak pokazano na zrzucie ekranu powyżej), a / media / sf_website to miejsce, w którym folder zostanie zamontowany.

Aby uzyskać więcej informacji, zapoznaj się z tym linkiem http://jimmybonney.com/articles/configure_virtualbox_shared_folder_apache_virtual_host/

Pandurang Patil
źródło