403 Запрещенная ошибка в Mac OS X Localhost

22

Я настроил Общий веб-доступ в Системных настройках на Mac OS X 10.6 и щелкнул ссылку, которую он мне дал. К сожалению, Apache дал мне эту ошибку 403:

запрещено

У вас нет прав доступа к /~myusername/index.html на этом сервере.

Журнал доступа отображает: 10.0.1.2 - - [30/Jun/2010:16:25:15 -0700] "GET /~myusername/ HTTP/1.1" 403 210

Журнал ошибок отображает: [Wed Jun 30 16:26:09 2010] [error] [client 10.0.1.2] client denied by server configuration: /Users/myusername/Sites/

Как ни странно, доступ к http: // localhost работает нормально. Просто с двумя пользовательскими папками у меня возникли проблемы, другая пользовательская папка, которая новее моего обновления системы, работает нормально.

Раньше это работало на моей машине в Leopard, поэтому я все изменил ~/Sitesна 755, что не принесло пользы. Какие-либо предложения? Я полагаю, что я сделал что-то с моей машиной, что вызвало это, так как я не могу себе представить, что Apple что-то напутает.

Я настроил PEAR с этими инструкциями , но я понятия не имею, может ли это быть причиной этого.

waiwai933
источник
Извините, если это глупый вопрос, но какой именно URL вы собираетесь? Я спрашиваю, потому что URL "/~myusername/index.html" является нечетным - это должно быть либо "~ myusername / index.html", либо это должно быть " localhost / ~ myusername / index.html ", или что-то еще аналогичный. Просто начинать с /, а затем добавлять ~ myusername пахнет смешно. Помимо (или вместо) ответа на этот вопрос, вы можете зайти в Console.app (/Applications/Utilities/Console.app) и найти apache2 access_log и error_log. Потяните это вверх, возможно, очистите дисплей, а затем снова попробуйте свой URL, чтобы увидеть, что говорит вам журнал ошибок.
Майкл Х.
@khedron: URL-адрес localhost / ~ myusername / index.html , но ошибка отображает часть
/~myusername/index.html
ОК, просто проверяю Что говорит журнал apache в консоли (console.app)?
Майкл Х.
@khedron: я разместил доступ и журнал ошибок в вопросе. Есть еще один?
waiwai933
1
У меня та же проблема, что и у вас, и я просто решаю: chmod 777 / Applications / XAMPP / htdocs / myusername, это работает для меня
Wassim Sboui

Ответы:

22

У Apple есть документ поддержки для этой проблемы . Исправление проблемы предполагает создание файла /etc/apache2/users/yourusername.conf( имя_пользователь является счет короткого именем , например , danielbeck- это, как правило , имя вашей домашней папки в /Users) со следующим содержанием:

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

После этого запустите sudo chown root:wheel /etc/apache2/users/yourusername.confи перезапустите Apache.

Даниэль Бек
источник
и тоже перезапустите свой apache, просто выполните sudo apachectl restartв своем терминале.
ноль
15

Чтобы Apache увидел файл, пользователь, с которым работает Apache (вероятно, wwwили _www), должен иметь доступ к каталогам сайтов этих пользователей. ~/SitesНедостаточно иметь доступ для чтения / выполнения к содержимому , потому что ему нужно разрешить переход /по пути вниз ~/Sites. Поэтому убедитесь , что /, /Users, /Users/myusername, и /Users/myusername/Sitesвсе они имеют по крайней мере , a+xразрешение (бит Execute в каталогах позволяет , что пользовательский класс для обхода каталога, даже если доступ на чтение не допускается).

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

Если в каком-либо из этих каталогов не отображается последний xнабор (для «других»), используйте что-то вроде chmod a+x ...этого для этого каталога.

Если ACL для любого из этих каталогов показывает, что пользователю wwwбыло специально отказано в доступе, используйте соответствующие аргументы chmodдля исправления ACL.

Spiff
источник
Бит выполнения установлен для всех этих каталогов, но я не знаю, как проверить, отказано ли конкретному пользователю в доступе.
waiwai933
Вот для чего "e" в "ls -lde". В нем перечислены ACL (если есть) для каждого из файлов.
Spiff
2
Изменение разрешений для / Users / myusername на chmod 755 устранило проблему для меня.
Mark
Разве эта команда не дает пользователю _www права доступа к вашему корневому каталогу, а также к каталогу / Users и т. Д.? Это не может быть правдой, не так ли? Все эти дыры в безопасности, чтобы поделиться страницей в одной папке? Это поведение где-то задокументировано?
Том Лианза
Отвечая на мой собственный комментарий, я нашел этот ответ ( serverfault.com/a/293063/14970 ), в котором содержится ссылка на надежную документацию по этому поведению: wiki.apache.org/httpd/13PermissionDenied
Том Лианза,
5

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

Я изменил «AllowOverride None» на «AllowOverride All» в моем файле /etc/apache2/users/USERNAME.conf, и все мои сайты начали запрещаться.

Я изменил его обратно, а затем изменил его только для одного сайта в моем файле httpd-vhosts.conf, и только этот сайт был запрещен.

Посмотрев журналы и увидев, что проблема заключалась в переписывании URL и отсутствии FollowSymLinks, я вернулся к файлу USERNAME.conf. Я переключаю «AllowOverride None» на «AllowOverride All» и добавляю «Options + FollowSymLinks» на следующей строке.

Вещи начали работать. Я пришел с использованием xampp на Windows, и многие из этих настроек уже были установлены для всего сервера, как я.

Джейк
источник
1
Огромное спасибо, потратил довольно много времени на выяснение того, что происходит, уже некоторое время не приходилось возиться с Apache / PHP
Миша Рейзлин,
1
Да, Options +FollowSymLinksработал как шарм.
агари
2

У меня была та же проблема: моя (старая) учетная запись была недоступна, но учетная запись другого пользователя, созданная после обновления до Lion, работала очень хорошо.

Убедившись, что ваш /etc/apache2/users/USERNAME.conf выглядит следующим образом:

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

сделать sudo chown root: wheel /etc/apache2/users/USERNAME.conf

похоже, что этот параметр разрешения не установлен во время обновления ОС, и пользователь Apache не может прочитать файл конфигурации и выдает ошибку.

По крайней мере, это решило это для меня.

Арве Нюгорд
источник
1
И, возможно, бежать sudo apachectl restartпосле этого.
Арджан
Это работает для меня работает 10.7.5. Путь к каталогу не указывал на мой локальный веб-корень, как только я обновил и перезапустил apache, все заработало. Что странно, так это то, что путь был неправильным больше года и работал все время. Я только что получил ошибку сегодня на ровном месте.
supajb
2

Обновление для Lion в 10/2011 я должен был также добавить

UserDir включен, поэтому мой /etc/apache2/extra/httpd-userdir.conf выглядит так:

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
источник
1

Продолжение разговора с комментариями к первому вопросу. Проверьте свой /etc/apache2/httpd.confфайл. На моей машине у меня есть это:

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

Я подозреваю, что ваше закомментировано. Я смутно припоминаю, как менял это вручную при переходе с 10,5 на 10,6, и значение по умолчанию изменилось.

Это, вероятно, очевидно, но вам придется использовать sudoдля редактирования файла, потому что он будет принадлежать пользователю root.

Майкл Х.
источник
1
Нет, моя выглядит точно так же, как ваша.
waiwai933
1

В моем случае это каталог XAMPP + Mac OS X 10.7 + в папке Dropbox (перекрестная ссылка на мой другой вопрос в переполнении стека)

403 Access Forbidden сообщает Apache, поэтому я следовал приведенному выше комментарию, чтобы изменить пользователя в /XAMPP/xamppfiles/etc/httpd.conf, с User nobodyна User my_user_name. Перезапустите Apache и все работает нормально.

Raptor
источник
0

Вероятно, у вас не включены индексы . Если вы не нужно будет либо создать индексный файл ( index.htmlили index.php) или указать файл в явном виде, то есть http://localhost/~me/mypage.html.

Джош К
источник
Извините, просто чтобы перепроверить, я должен посетить localhost / ~ myusername / index.html и иметь файл index.html в моей папке Sites, верно? Если так, то 403 все еще происходит.
waiwai933
Вы не должны посещать ~myusernameвообще, я верю. http://localhost/следует указать на /Users/youruser/Sites/.
Джош К