Почему 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
Иногда файл имеет правильные права, пользователь состоит в нужной группе, но 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