Apache Linux (Apache HTTP Server 2.4)

Apache: после смены прав каталога статические файлы получают 403

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

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

После изменения владельца или прав каталога Apache возвращает 403 на изображения, CSS и другие статические файлы, хотя PHP-страница открывается. Причиной могут быть как Unix-разрешения каталогов, так и директивы Require/Options либо SELinux; разрешение 777 не требуется.

В этой статье
  1. Симптом и границы применимости
  2. Возможные причины и как их отличить
  3. Пошаговая диагностика и исправление
  4. Как проверить результат
  5. Если проблема не устранена

#Симптом и границы применимости

После изменения владельца или прав каталога Apache возвращает 403 на изображения, CSS и другие статические файлы, хотя PHP-страница открывается. Причиной могут быть как Unix-разрешения каталогов, так и директивы Require/Options либо SELinux; разрешение 777 не требуется.

#Возможные причины и как их отличить

Возможная причинаКак узнатьЧто делать
Недоступен один из родительских каталоговApache должен проходить по всем родительским каталогам.В error_log Permission denied при правильных правах файлаПроверить x на каждом уровне пути
Правила Apache запрещают чтениеUnix-права могут быть корректными, но сервер блокирует доступ.В error_log client denied by server configurationПроверить <Directory> и Require
Отказ SELinux/AppArmor или неверный aliasКонтекст безопасности и фактический root/alias важны наряду с chmod.403 сохраняется после проверки правПроверить защитные журналы и реальное разрешение пути

#Пошаговая диагностика и исправление

  1. Определите точный файл и код ответаОткройте страницу в браузере, нажмите F12 → «Сеть», обновите её и щёлкните один запрос к CSS или изображению со статусом 403. Запишите его адрес без персональных параметров. Проверьте curl, чтобы исключить кэш и понять, отдаёт ли код Apache или предыдущий прокси.
    Linux · Терминал (Bash)Команда
    curl -sSI https://example.com/assets/site.css
  1. Найдите фактический путь к файлуПо SSH посмотрите DocumentRoot или Alias нужного VirtualHost, затем убедитесь, что запрошенный файл действительно находится там. При Alias путь URL может отличаться от пути на диске; не пытайтесь исправлять его созданием файла в другом каталоге.
  2. Пример для Debian; учитывайте конфигурацию панели и защищайте вывод
    Linux · Терминал (Bash)КомандаНужен sudo
    Пример для Debian; учитывайте конфигурацию панели и защищайте вывод.
    sudo apache2ctl -S; sudo grep -R -nE "DocumentRoot|Alias |<Directory|Require " /etc/apache2/sites-enabled
  1. Проверьте проход по каталогамВыполните namei -l с фактическим абсолютным путём к файлу. Каталогам нужен проход x для пользователя Apache или соответствующей группы; файлу — право чтения. На Debian пользователь часто www-data, но выясните фактический по настройке User/Group.
    Linux · Терминал (Bash)Команда
    Пути примерные; никаких прав команда не меняет.
    namei -l /var/www/example.com/public/assets/site.css; ls -l /var/www/example.com/public/assets/site.css
  1. Проверьте журнал причин запретаВ том же временном интервале откройте ErrorLog сайта. Строка client denied by server configuration указывает скорее на Require или .htaccess, а Permission denied — на систему файлов либо политику безопасности. Для SELinux отдельно смотрите аудит; не отключайте его для диагностики на боевом сервере.
  1. Исправьте только нужное разрешениеСохраните текущие права и владельца перед точечной правкой. Для файла со статикой, доступного только через Apache, назначьте корректного владельца и группу в соответствии с устройством сайта, а не массово меняйте права всего /var/www. Если проблема в Require all denied внутри конкретного Directory — согласуйте политику доступа перед заменой. Закрытые файлы конфигурации должны остаться закрытыми.
  1. Проверяйте изменение безопасноЕсли меняли конфигурацию Apache, проверьте её синтаксис и перечитайте службу. Если меняли только разрешения файла, перезапуск не требуется. Запросите CSS снова и отдельно попробуйте URL приватного каталога: он должен остаться недоступным.
  2. Только для подтверждённой правки конфигурации, с резервной копией
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Только для подтверждённой правки конфигурации, с резервной копией.
    sudo apache2ctl configtest && sudo systemctl reload apache2

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

#Как проверить результат

Проверяемый статический URL возвращает 200 и правильный тип содержимого, браузер перестал сообщать об ошибке загрузки CSS, а закрытые каталоги по-прежнему не открываются.

#Если проблема не устранена

Если файл читается Unix-пользователем сервера, но 403 остаётся, проверьте Directory/Location, Alias, .htaccess и политику SELinux/AppArmor. Не маскируйте проблему рекурсивным chmod 777.

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

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

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