Apache Linux 403

Apache: 403 Forbidden — You don't have permission to access

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

Ошибка Apache 403 Forbidden появляется при отсутствии index-файла и запрещённом листинге каталога, неверных правах или Require. Проверьте DirectoryIndex, права и владельца, Require all granted и SELinux.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

403
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 есть отказ.Выставьте контекст.

#Пошаговое решение

  1. Посмотрите журналОткройте страницу, на которой возвращается 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. Не исправляйте права до понимания текста.
  2. Проверьте разрешения доступа в блоке DirectoryПроверьте конфигурацию нужного виртуального хоста: найдите <Directory ...> для каталога сайта и действующие правила Require all granted, Require ip ... или Require all denied. На Apache 2.4 это правила управления доступом, поэтому раскрывать каталог с админкой публично нельзя. Сохраните исходный файл и исправляйте только ошибочно закрытый публичный путь. Выполните sudo apachectl configtest до применения изменений.
  3. Проверьте праваЕсли журнал пишет Permission denied, через SSH выполните namei -l /var/www/site/index.php, подставив реальный путь, и посмотрите владельца и права на каждом каталоге. Права на вход в промежуточные каталоги необходимы тому пользователю, под которым Apache читает файлы; PHP-FPM может работать от другого пользователя. Не делайте chmod -R 777 и chown -R www-data для всего сайта. Исправляйте только подтверждённый элемент после резервной копии.
  4. Проверьте индексный файл и директиву DirectoryIndexЕсли 403 виден только для URL каталога, проверьте наличие индексного файла в каталоге и параметр DirectoryIndex для виртуального хоста. Включать Options Indexes ради диагностики не стоит: это может открыть список файлов. Вместо этого добавьте или восстановите предусмотренный приложением index.php или index.html и проверьте его существование командой ls -l.
  5. Проверьте правила .htaccessПроверьте файл .htaccess в каталоге сайта и выше: при разрешённом AllowOverride Apache применяет его правила. Сделайте копию файла, найдите директивы Require, Deny, ограничения доступа и правила модулей безопасности. Не переименовывайте системные .htaccess целиком на действующем сайте без окна обслуживания: это может снять защиту каталогов. После точечной правки выполните проверку страницы.
  6. Проверьте возможное срабатывание WAFЕсли веб-сайт защищён модулем ModSecurity или WAF, сопоставьте код события с журналом: запишите идентификатор правила, время и URL. В панели защиты найдите журнал срабатываний и разрешите только подтверждённый ложный запрос штатным исключением для конкретного правила/пути. Не выключайте WAF целиком и не удаляйте все правила безопасности ради одной страницы.
  7. Проверьте SELinuxНа системах с SELinux сначала выполните getenforce и проверьте журнал отказов через sudo ausearch -m AVC -ts recent при наличии auditd. При Enforcing и подтверждённом отказе применяйте правильный постоянный контекст к конкретному каталогу по политике дистрибутива, а не отключение SELinux. На Debian/Ubuntu аналогично проверьте AppArmor, если он включён.
  8. Перезапустите ApacheПосле изменения конфигурации администратора выполните sudo apachectl configtest и дождитесь Syntax OK; затем sudo systemctl reload apache2 на Debian/Ubuntu (на RHEL служба обычно httpd). Откройте конкретный URL в приватном окне и убедитесь, что пришёл ожидаемый ответ, а не 403/500. Если ошибка новая, верните сохранённый файл и проверьте последние строки журнала.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Диагностика отказа и проверка синтаксиса Apache.
    Linux · Терминал (Bash)КомандаНужен sudo
    Диагностика отказа и проверка синтаксиса Apache. Не выполняйте массовый chmod 755/644: он может раскрыть закрытые файлы.
    sudo tail -n 50 /var/log/apache2/error.log
    namei -l /var/www/site/index.html
    sudo apachectl configtest
    # Укажите фактический путь вместо /var/www/site/index.html.
    # В примере нет команд массового изменения владельца или прав файлов.
    Вариант 2Правильный блок каталога (Apache 2.4).
    Текст
    Правильный блок каталога (Apache 2.4).
    <Directory /var/www/site>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
        DirectoryIndex index.php index.html
    </Directory>

Утилита namei -l показывает права на каждый каталог по пути — часто 403 возникает из-за закрытого родительского каталога (например, /home/user с правами 700). Если вы используете virtual host, проверьте, что DocumentRoot указывает на нужный каталог, а в ServerName правильное имя. Для сетей с ограничением доступа проверьте правила Require ip. Документация — Apache HTTP Server.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.