#Что означает ошибка
Forbidden You don't have permission to access this resource
Apache отвечает 403, когда не может или не имеет права отдать содержимое: в каталоге нет файла индекса (index.html, index.php), а листинг (Options Indexes) выключен; у пользователя www-data/apache нет прав на каталог; или конфигурация запрещает доступ. В журнале error.log обычно написана точная причина: «Directory index forbidden» или «client denied by server configuration».
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
Нет файла индексаВ каталоге нет index.html/index.php. | В логе «Directory index forbidden by Options directive». | Добавьте индекс-файл. |
| Неверные права или владелецУ веб-пользователя нет доступа к каталогу. | В логе «Permission denied». | Исправьте права. |
Запрет в конфигурацииRequire all denied или нет Require all granted. | В логе «client denied by server configuration». | Исправьте Directory. |
| SELinuxНеверный контекст файлов. | В audit.log есть отказ. | Выставьте контекст. |
#Пошаговое решение
- Посмотрите журналОткройте страницу, на которой возвращается HTTP 403, и запишите точный URL, время и сообщение; 403 может означать намеренно закрытый каталог. На сервере через SSH выполните
sudo tail -n 50 /var/log/apache2/error.logна Debian/Ubuntu или проверьте путь ErrorLog вашего виртуального хоста. Ищитеclient denied by server configuration,AH01630,Permission deniedилиDirectory index forbidden. Не исправляйте права до понимания текста. - Проверьте разрешения доступа в блоке DirectoryПроверьте конфигурацию нужного виртуального хоста: найдите
<Directory ...>для каталога сайта и действующие правилаRequire all granted,Require ip ...илиRequire all denied. На Apache 2.4 это правила управления доступом, поэтому раскрывать каталог с админкой публично нельзя. Сохраните исходный файл и исправляйте только ошибочно закрытый публичный путь. Выполнитеsudo apachectl configtestдо применения изменений. - Проверьте праваЕсли журнал пишет
Permission denied, через SSH выполнитеnamei -l /var/www/site/index.php, подставив реальный путь, и посмотрите владельца и права на каждом каталоге. Права на вход в промежуточные каталоги необходимы тому пользователю, под которым Apache читает файлы; PHP-FPM может работать от другого пользователя. Не делайтеchmod -R 777иchown -R www-dataдля всего сайта. Исправляйте только подтверждённый элемент после резервной копии. - Проверьте индексный файл и директиву DirectoryIndexЕсли 403 виден только для URL каталога, проверьте наличие индексного файла в каталоге и параметр
DirectoryIndexдля виртуального хоста. ВключатьOptions Indexesради диагностики не стоит: это может открыть список файлов. Вместо этого добавьте или восстановите предусмотренный приложениемindex.phpилиindex.htmlи проверьте его существование командойls -l. - Проверьте правила .htaccessПроверьте файл
.htaccessв каталоге сайта и выше: при разрешённомAllowOverrideApache применяет его правила. Сделайте копию файла, найдите директивыRequire,Deny, ограничения доступа и правила модулей безопасности. Не переименовывайте системные.htaccessцеликом на действующем сайте без окна обслуживания: это может снять защиту каталогов. После точечной правки выполните проверку страницы. - Проверьте возможное срабатывание WAFЕсли веб-сайт защищён модулем ModSecurity или WAF, сопоставьте код события с журналом: запишите идентификатор правила, время и URL. В панели защиты найдите журнал срабатываний и разрешите только подтверждённый ложный запрос штатным исключением для конкретного правила/пути. Не выключайте WAF целиком и не удаляйте все правила безопасности ради одной страницы.
- Проверьте SELinuxНа системах с SELinux сначала выполните
getenforceи проверьте журнал отказов черезsudo ausearch -m AVC -ts recentпри наличии auditd. ПриEnforcingи подтверждённом отказе применяйте правильный постоянный контекст к конкретному каталогу по политике дистрибутива, а не отключение SELinux. На Debian/Ubuntu аналогично проверьте AppArmor, если он включён. - Перезапустите ApacheПосле изменения конфигурации администратора выполните
sudo apachectl configtestи дождитесьSyntax OK; затемsudo systemctl reload apache2на Debian/Ubuntu (на RHEL служба обычноhttpd). Откройте конкретный URL в приватном окне и убедитесь, что пришёл ожидаемый ответ, а не 403/500. Если ошибка новая, верните сохранённый файл и проверьте последние строки журнала. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Утилита namei -l показывает права на каждый каталог по пути — часто 403 возникает из-за закрытого родительского каталога (например, /home/user с правами 700). Если вы используете virtual host, проверьте, что DocumentRoot указывает на нужный каталог, а в ServerName правильное имя. Для сетей с ограничением доступа проверьте правила Require ip. Документация — .