Permission denied в Linux: как разобраться с chmod и chown

Permission denied в Linux: как разобраться с chmod и chown
Содержание статьи

При ошибке Permission denied сначала выясните, какой пользователь выполняет операцию и к какому объекту ему нужен доступ. Для чтения файла недостаточно проверить только сам файл: нужны права прохода по каталогам в его пути. Команда chmod 777 скрывает часть симптомов, но открывает доступ всем и часто вообще не исправляет настоящую причину.

Разберём обычные права Unix, разницу между файлом и каталогом и порядок диагностики. На Mentoring.digital можно подобрать наставника для практики Linux на учебной среде. Приведённые команды нужно выполнять именно в Linux; в этой редакционной проверке их поведение сверено с документацией, запуск на Linux-машине не выполнялся.

Какие сведения собрать до изменения прав

Запишите точную операцию: чтение, запись, запуск, создание файла или удаление. Затем посмотрите пользователя процесса и права. Следующие команды только показывают сведения:

id
ls -ld /path /path/to /path/to/file
stat /path/to/file

Замените пример пути своим. Если доступна утилита namei из util-linux, команда namei -l /path/to/file помогает увидеть компоненты пути. Для службы важно узнать именно пользователя службы: успешное чтение из вашей консоли ещё не доказывает, что файл доступен приложению.

В строке вида -rw-r----- первая позиция обозначает тип объекта, затем идут тройки прав владельца, группы и остальных. Сведения о владельце и группе показаны рядом. При обычной проверке выбирается соответствующий класс прав, а не сумма всех разрешений в строке.

Почему r, w и x означают разное для файла и папки

ПравоОбычный файлКаталог
rЧитать содержимоеПолучать список имён внутри
wМенять содержимоеСоздавать и удалять записи при необходимых правах прохода
xПробовать выполнить как программуПроходить через каталог и обращаться к известным именам

Для доступа к /srv/app/data/report.csv требуется право поиска x на каталогах пути. Возможность удалить файл обычно определяется правами родительского каталога, а не флагом записи самого файла. Дополнительные ограничения, например sticky bit, тоже могут влиять на удаление.

Поэтому одинаковый режим для всех файлов и папок в дереве часто ошибочен. Текстовому документу обычно не требуется исполняемый бит, а каталогу он нужен для прохода.

Учебный пример без изменения системных каталогов

В обычной пользовательской сессии создайте новую папку в домашнем каталоге. Команды ниже рассчитаны на ещё не существующее имя permissions-lab. Если такое имя уже занято, выберите другое.

mkdir "$HOME/permissions-lab"
cd "$HOME/permissions-lab"
printf 'example data
' > report.txt
chmod 600 report.txt
ls -l report.txt
cat report.txt

У владельца остаются чтение и запись, у группы и остальных прав нет. Теперь временно уберите у владельца право чтения, сохранив запись:

chmod u-r report.txt
ls -l report.txt
cat report.txt
chmod u+r report.txt

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

Как читать 644 и 755

Числа складываются из r=4, w=2, x=1. В режиме 644 владелец имеет чтение и запись, группа и остальные только чтение. В 755 владелец имеет все три права, остальные могут читать и выполнять или проходить.

Это примеры режимов, а не универсальные настройки любого сайта. Для приватного файла может подходить 600, для общего доступа через группу другой режим. Выбирайте его из требования: кому, к чему и какая операция разрешена.

Символьная запись удобна для точечного изменения:

chmod g+r report.txt
chmod o-r report.txt
chmod u+x script.sh

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

Когда нужен chown

chmod меняет режим доступа, а chown владельца и, при указании, группу. Если файлы приложения принадлежат неожиданному пользователю, сначала выясните, как они созданы и кто должен ими управлять. Не передавайте всё дерево веб-серверу только потому, что один запрос получил ошибку.

Общая форма команды выглядит так:

chown owner:group file

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

Если обычные права выглядят правильными

  • Проверьте ACL, если файловая система их использует. В выводе ls знак + может указывать на дополнительные правила; утилита getfacl показывает их, если установлена.
  • Убедитесь, что процесс действительно входит в нужную группу. Изменение членства не обязательно меняет уже запущенный процесс.
  • Для запуска проверьте параметры монтирования, например noexec. Для записи проверьте, не доступна ли файловая система только для чтения.
  • В средах с SELinux или AppArmor изучите журналы и применяемую политику. Не отключайте механизм целиком вместо диагностики.
  • В контейнере сопоставьте идентификаторы пользователей и владельцев тома. Имя пользователя внутри и снаружи не всегда означает одинаковый UID.

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

Чек-лист после исправления

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

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

Похожие статьи по данной теме