403 Forbidden Error na Mac OS X Localhost

22

Skonfigurowałem Udostępnianie Internetu w Preferencjach systemowych w Mac OS X 10.6 i kliknąłem link, który mi tam podał. Niestety Apache podał mi błąd 403:

Zakazany

Nie masz uprawnień dostępu do /~myusername/index.html na tym serwerze.

Dziennik dostępu wyświetla: 10.0.1.2 - - [30/Jun/2010:16:25:15 -0700] "GET /~myusername/ HTTP/1.1" 403 210

Dziennik błędów wyświetla: [Wed Jun 30 16:26:09 2010] [error] [client 10.0.1.2] client denied by server configuration: /Users/myusername/Sites/

Co ciekawe, dostęp do http: // localhost działa dobrze. Po prostu z dwoma folderami użytkownika, z którymi mam problem, drugi folder użytkownika, nowszy niż aktualizacja mojego systemu, działa dobrze.

Pracowałem już wcześniej na moim komputerze w Leopardzie, więc przeskoczyłem wszystko ~/Sitesdo 755, co nie przyniosło nic dobrego. Jakieś sugestie? Przypuszczam, że zrobiłem coś na mojej maszynie, co to spowodowało, ponieważ nie wyobrażam sobie, żeby Apple coś takiego popsuło.

Założyłem PEAR z tymi instrukcjami , ale nie mam pojęcia, czy to może być tego przyczyną.

waiwai933
źródło
Przepraszam, jeśli to głupie pytanie, ale dokładnie jaki adres URL wybierasz? Pytam, ponieważ URL „ / ~ moja nazwa_użytkownika/index.html ” jest dziwny - powinien to być albo „~ moja nazwa_użytkownika / index.html”, albo „ localhost / ~ moja nazwa_użytkownika / index.html ”, czy coś podobny. Po prostu zaczynając od / a następnie dodając ~ moja nazwa użytkownika pachnie zabawnie. Oprócz (lub zamiast) odpowiedzi można przejść do Console.app (/Applications/Utilities/Console.app) i znaleźć dziennik dostępu apache2 i dziennik błędów. Wyciągnij to, być może wyczyść ekran, a następnie ponownie spróbuj użyć adresu URL, aby zobaczyć, co mówi dziennik błędów.
Michael H.
@khedron: URL to localhost / ~ moja nazwa_użytkownika / index.html , ale błąd wyświetla część
/~myusername/index.html
OK, tylko sprawdzam. Co mówi dziennik Apache w konsoli (console.app)?
Michael H.
@khedron: W pytaniu opublikowałem dziennik dostępu i rejestrację błędów. Czy jest jeszcze jeden?
waiwai933
1
Mam ten sam problem co ty i po prostu to robię: chmod 777 / Applications / XAMPP / htdocs / myusername, to działa dla mnie
Wassim Sboui

Odpowiedzi:

22

Apple ma dokument pomocy technicznej dla tego problemu . Ustalające problem polega na utworzeniu pliku /etc/apache2/users/yourusername.conf( Twoja nazwa użytkownika jest konto krótka nazwa , np danielbeck- to zazwyczaj nazwa katalogu domowego w /Users) o następującej treści:

<Directory "/Users/yourusername/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

Następnie uruchom sudo chown root:wheel /etc/apache2/users/yourusername.confi uruchom ponownie Apache.

Daniel Beck
źródło
i ponownie uruchom apache, po prostu uruchom go sudo apachectl restartw swoim terminalu.
zero
15

Aby Apache mógł zobaczyć plik, użytkownik uruchamiany przez Apache jako (prawdopodobnie wwwlub _www) musi mieć dostęp do katalogów Witryn tych użytkowników. Posiadanie odczytu / wykonania dostępu do treści ~/Sitesnie jest wystarczające, ponieważ należy zezwolić na przejście od /ścieżki do ~/Sites. Więc upewnij się /, /Users, /Users/myusername, i /Users/myusername/Siteswszyscy mają co najmniej a+xzgody (bit uruchamianych na katalogach pozwala że klasa użytkownik przemierzać katalogu, nawet jeśli dostęp do odczytu nie jest to dozwolone).

ls -lde / /Users/ /Users/myusername/ /Users/myusername/Sites

Jeśli którykolwiek z tych katalogów nie wyświetla ostatniego xzestawu (ten dla „innych”), użyj czegoś takiego, chmod a+x ...aby ustawić go dla tego katalogu.

Jeśli lista ACL dla dowolnego z tych katalogów wskazuje, że użytkownikowi wwwodmówiono dostępu, użyj odpowiednich argumentów, chmodaby naprawić listy ACL.

Spiff
źródło
Bit wykonania jest ustawiony dla wszystkich tych katalogów, ale nie wiem, jak sprawdzić, czy określonego użytkownika odmówiono dostępu.
waiwai933
Do tego służy „e” w „ls -lde”. Zawiera listę ACL (jeśli istnieją) dla każdego z plików.
Spiff
2
Zmiana uprawnień dla / Users / myusername na chmod 755 naprawiła dla mnie problem.
Mark
Czy to polecenie nie daje użytkownikowi _www uprawnień dostępu do katalogu głównego, a także katalogu / Users itp.? To nie może być prawda, prawda? Wszystkie dziury w zabezpieczeniach umożliwiające udostępnienie strony w jednym folderze? Czy to zachowanie jest gdzieś udokumentowane?
Tom Lianza,
W odpowiedzi na mój komentarz znalazłem tę odpowiedź ( serverfault.com/a/293063/14970 ), która zawiera link do wiarygodnej dokumentacji na temat tego zachowania: wiki.apache.org/httpd/13PermissionDenied
Tom Lianza
5

Dla porównania poradziłem sobie z tym i żadna z odpowiedzi tutaj nie zadziałała w moim konkretnym przypadku. Konfigurowałem wirtualne hosty, ale co ważniejsze, potrzebowałem moich plików htaccess, aby faktycznie działały.

Zmieniłem opcję „AllowOverride None” na „AllowOverride All” w moim pliku /etc/apache2/users/USERNAME.conf i wszystkie moje strony zaczęły być zabronione.

Zmieniłem go z powrotem, a następnie zmieniłem tylko dla jednej strony w moim pliku httpd-vhosts.conf i tylko ta strona była zabroniona.

Po przejrzeniu dzienników i stwierdzeniu, że problem polegał na przepisywaniu adresów URL i braku FollowSymLinks, wróciłem do pliku USERNAME.conf. Przełączam „AllowOverride None” na „AllowOverride All” i dodałem „Options + FollowSymLinks” w następnym wierszu.

Wszystko zaczęło działać. Pochodzę z używania Xamppa na Windowsie i wiele z tych ustawień było już ustawionych na serwerze dla manekinów takich jak ja.

Jake
źródło
1
dzięki bardzo, spędziłem trochę czasu zastanawiając się, co się dzieje, nie
musiałem
1
Tak, Options +FollowSymLinksdziałało jak urok.
agarie
2

Miałem ten sam problem: moje (stare) konto nie było dostępne, ale konto innego użytkownika, które zostało utworzone po aktualizacji do Lion, działało dobrze.

Po upewnieniu się, że Twój plik /etc/apache2/users/USERNAME.conf wygląda następująco:

<Directory "/Users/USERNAME/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

zrób rootowany sudo: wheel /etc/apache2/users/USERNAME.conf

wygląda na to, że to ustawienie uprawnień nie jest ustawione podczas aktualizacji systemu operacyjnego, a użytkownik Apache nie może odczytać pliku konfiguracyjnego i zgłasza błąd.

Przynajmniej to dla mnie rozwiązało.

Arve Nygård
źródło
1
A może sudo apachectl restartpo tym ucieknie .
Arjan
Działa to dla mnie w wersji 10.7.5. Ścieżka do katalogu nie wskazywała na mój lokalny katalog główny, po zaktualizowaniu i ponownym uruchomieniu apache wszystko działało. Dziwne jest to, że ścieżka była niepoprawna od ponad roku i działała przez cały czas. Właśnie wyskoczyłem z błędu dzisiaj.
supajb
2

aktualizacja dla Lion w 10/2011 Musiałem również dodać

UserDir włączony, więc mój /etc/apache2/extra/httpd-userdir.conf wygląda następująco:

UserDir enabled 
UserDir Sites

#
# Users might not be in /Users/*/Sites, so use user-specific config files.
#
Include /private/etc/apache2/users/*.conf

<IfModule bonjour_module>
   RegisterUserSite customized-users
</IfModule>
Nunya
źródło
1

Kontynuacja rozmowy od początkowych komentarzy do pytania - sprawdź swój /etc/apache2/httpd.confplik. Na moim komputerze mam to:

# User home directories
Include /private/etc/apache2/extra/httpd-userdir.conf

Podejrzewam, że twój został skomentowany. Niejasno pamiętam zmienianie tego ręcznie podczas przejścia z 10,5 do 10,6 i zmiana domyślnego.

Jest to prawdopodobnie oczywiste, ale będziesz musiał użyć sudodo edycji pliku, ponieważ będzie on własnością root.

Michael H.
źródło
1
Nie, moje wygląda dokładnie tak jak twoje.
waiwai933
1

Moja sprawa to katalog XAMPP + Mac OS X 10.7 + w folderze Dropbox (odsyłacz do mojego innego pytania w przepełnieniu stosu)

403 Dostęp zabroniony jest zgłaszany przez Apache, dlatego śledziłem powyższy komentarz, aby zmienić użytkownika w /XAMPP/xamppfiles/etc/httpd.conf, z User nobodyna User my_user_name. Uruchom ponownie Apache i działa dobrze.

Raptor
źródło
0

Prawdopodobnie nie masz włączonych indeksów . Jeśli nie, musisz utworzyć plik indeksu ( index.htmllub index.php) lub podać plik jawnie, tj http://localhost/~me/mypage.html.

Josh K.
źródło
Przepraszam, aby dokładnie sprawdzić, powinienem odwiedzić localhost / ~ moja nazwa użytkownika / index.html i mieć plik o nazwie index.html w moim folderze Witryny, prawda? Jeśli tak, to 403 nadal się dzieje.
waiwai933
~myusernameWierzę, że nie powinieneś w ogóle odwiedzać . http://localhost/powinien wskazywać na /Users/youruser/Sites/.
Josh K