TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.52K subscribers
Post #655 524
Почему Permission denied: как найти каталог, на котором ломаются права

Иногда файл имеет правильные права, пользователь состоит в нужной группе, но Permission denied всё равно появляется.

Причина может быть выше по пути: чтобы открыть /var/www/site/config.php, процесс должен иметь право x на каждый каталог в этом пути.

Разберем, как быстро найти место, где ломается доступ.

1️⃣namei показывает права на весь путь

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


В выводе будут отдельно показаны:

drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-x--- root www-data www
drwx------ root root site
-rw-r----- root www-data config.php


Сразу видно, на каком уровне пользователь может упереться в права.

2️⃣Почему важен x у каталога

Для каталога x означает не «запуск», а возможность проходить через него и обращаться к объектам внутри.
Например:

chmod 644 /var/www/site


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

sudo -u www-data cat /var/www/site/config.php


3️⃣Проверяем конкретного пользователя
Если доступ должен быть у www-data:

sudo -u www-data namei -l /var/www/site/config.php


А группы:

id www-data


Это помогает понять, действительно ли процесс запускается с теми группами, которые вы ожидаете.

4️⃣ACL тоже могут менять картину

Обычных ls -l иногда недостаточно. Проверить ACL:

getfacl /var/www/site/config.php


Там могут быть дополнительные разрешения для конкретного пользователя или группы.

5️⃣Почему ls -l файл не всегда помогает
Команда:

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


показывает права самого файла.

Но если проблема находится в /var/www/site, информация о файле сама по себе этого не объяснит.

Именно поэтому namei -l удобен при странных Permission denied: он показывает всю цепочку каталогов, через которую процесс должен пройти до нужного файла.

BashTex 📱 #bash #systemd
  • 👍 10
More from @bash_tex
  1. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  2. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  3. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  4. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  5. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
  6. Sep 29, 2026tee + process substitution: один поток и несколько получателей Иногда нужно одновременно:…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →