


При ошибке 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 | Пробовать выполнить как программу | Проходить через каталог и обращаться к известным именам |
Для доступа к /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 или с дополнительными полномочиями, результат может отличаться. Используйте непривилегированную учебную учётную запись.
Числа складываются из 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 само по себе не исправляет неверный интерпретатор, повреждённый файл или файловую систему, смонтированную с ограничениями.
chmod меняет режим доступа, а chown владельца и, при указании, группу. Если файлы приложения принадлежат неожиданному пользователю, сначала выясните, как они созданы и кто должен ими управлять. Не передавайте всё дерево веб-серверу только потому, что один запрос получил ошибку.
Общая форма команды выглядит так:
chown owner:group file
Имена здесь являются заполнителями. Изменение владельца обычно требует соответствующих привилегий. После согласованного изменения проверьте доступ от имени целевого процесса. Не применяйте рекурсивные chown -R и chmod -R к незнакомому пути: можно изменить служебные файлы и права глубже, чем предполагалось.
ls знак + может указывать на дополнительные правила; утилита getfacl показывает их, если установлена.noexec. Для записи проверьте, не доступна ли файловая система только для чтения.Разные ограничения могут давать разные сообщения об ошибке. Сохраняйте точный текст и контекст, не сводите любую проблему доступа к одной команде.
Повторите нужную операцию от правильного пользователя. Убедитесь, что лишняя операция осталась запрещённой: например, приложение читает конфигурацию, но не может её переписать. Сравните владельца, группу и режим с исходными значениями и запишите причину изменения.
Для системной практики можно выбрать курс Linux с разбором прав и процессов. Если задача связана с конкретной службой или контейнером, наставник по Linux поможет связать пользователя процесса, путь к файлу и действующие ограничения в одну проверяемую картину.