Из-за временных ограничений на территории РФ наблюдаются проблемы с оплатой. Если платёж не проходит, оставьте запрос в службу поддержки.Служба поддержки работает 24/7 — мы всегда на связи по вопросам хостинга и серверов.Открыт прием заявок на аренду выделенных серверов и размещение оборудования в дата-центре.Напоминаем: рекомендуем включить резервное копирование для дополнительной защиты данных.Доступна новая линейка VPS/VDS с NVMe-дисками и увеличенной производительностью.Технические работы на части серверов завершены. Все сервисы работают в штатном режиме.
Статья3 мин чтенияПросмотры0

Permission denied: как найти проблему в пути и правах доступа

Используем namei и stat, чтобы проверить весь путь к файлу, владельца и режим доступа, прежде чем менять права каталога сайта.

Проверка доступа по карте у двери серверной
В этой статье

Файл существует, но приложение получает отказ в доступе. Частая ошибка — сразу разрешить всё всем. Это может скрыть исходную причину и открыть данные посторонним. Сначала нужно установить, какой пользователь обращается к файлу и на каком участке пути доступ прекращается.

Проверьте каждый каталог в пути

Примеры подходят для Linux с util-linux и GNU Coreutils. Путь /var/www/site/config.php условный: замените его на реально проблемный файл, не выводя его содержимое.

namei -l /var/www/site/config.php

Команда показывает компоненты пути, их типы, владельцев и права. Для прохода к файлу нужны подходящие разрешения на родительские каталоги. Поэтому исправные права самого файла не помогают, если один из каталогов выше недоступен пользователю процесса.

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

Прочитайте метаданные объекта

Для отдельного файла:

stat /var/www/site/config.php

По умолчанию GNU stat описывает саму символическую ссылку, если указанная запись является ссылкой. Для следования к её цели используется -L. Не смешивайте эти два результата при сравнении владельца и режима.

Посмотрите владельца, группу и права, затем сопоставьте их с пользователем рабочего процесса. Пользователь вашего терминала может иметь доступ, которого нет у PHP или фонового задания. Успешное чтение из личного сеанса не подтверждает доступ приложения.

Обычных прав бывает недостаточно

Если режим выглядит подходящим, проверьте ACL и политики безопасности, применяемые в вашей системе. Доступ также может ограничиваться контейнером, пространством монтирования или настройками службы. Не отключайте такие механизмы ради проверки без понимания конкретного отказа.

Пример: после переноса проекта файл принадлежит пользователю, которого нет в рабочей схеме нового сервера. Исправление должно вернуть ожидаемую модель владения. Массовое назначение одинаковых прав всем файлам не учитывает различие между каталогами, публичными ресурсами и конфигурацией с секретами.

Уточните тип операции

Чтение существующего файла, создание нового файла и замена через временный файл требуют разных разрешений. Приложение может успешно читать конфигурацию, но не иметь права создать временную запись в каталоге. Поэтому в отчёте важно указать не только путь, но и выполняемую операцию.

Не помещайте пароль или содержимое ключа в диагностический вывод. Для первого этапа обычно достаточно имени процесса, обезличенного пути, владельца, группы и режима. Если проблема касается конфигурации с секретами, само содержимое файла читать не требуется.

Проверьте точечное исправление

После согласованного изменения повторите исходную операцию от имени приложения и заново посмотрите метаданные. Убедитесь, что заработал нужный сценарий, а доступ не расширился лишним пользователям. Хорошее исправление объясняет, почему конкретный процесс получил необходимое разрешение. Оно не сводится к исчезновению ошибки после рекурсивного открытия всего каталога.

Обсуждение 0

Делись опытом и задавай вопросы. Комментарии без ссылок появляются после проверки редактором.

Пока никто не написал. Начни обсуждение.