Три категории пользователей и три действия
У файла есть владелец и группа. Проверка идет по одной категории: owner, group или others. Если процесс запущен от имени владельца, права группы уже не добавляются поверх прав владельца. Поэтому важно знать не только режим файла, но и пользователя процесса.
Буквы r, w и x означают чтение, запись и выполнение. Для каталога смысл отличается: r позволяет получить список имен, w — создавать и удалять элементы, x — проходить внутрь и обращаться к известным именам. Каталог с чтением без x виден, но работать с файлами внутри не получится.
Как читать вывод ls -l
Строка -rwxr-x--- разбивается на тип объекта и три тройки прав. В примере владелец может читать, менять и запускать файл, группа — читать и запускать, остальные не имеют доступа. Команда stat показывает те же данные вместе с числовым режимом и идентификаторами владельца.
Перед изменением прав проверьте путь через realpath и владельца через ls -ld. Ошибка в одном символе или рекурсивный запуск из неверного каталога способны открыть либо закрыть доступ к большому дереву файлов.
Символьный и числовой chmod
Символьная запись описывает изменение: chmod g+w shared добавляет группе запись, chmod o-r secret убирает чтение у остальных. Она удобна, когда нужно сохранить остальные флаги. Числовая запись задает полный режим: r равно 4, w — 2, x — 1; сумма для каждой категории образует цифру.
Режим 640 означает rw- для владельца, r-- для группы и отсутствие прав у остальных. Не используйте 777 как универсальное лечение Permission denied: оно скрывает причину, расширяет доступ и часто создает новую проблему безопасности.
- 600 — приватный файл владельца;
- 640 — файл читает владелец и группа;
- 750 — каталог или команда для владельца и группы;
- 644 и 755 — частые режимы публично читаемых файлов и каталогов.
За что отвечает chown
chmod меняет разрешения, а chown — владельца и группу. Команда chown app:app storage полезна, если сервис должен писать в каталог от пользователя app. Сначала определите пользователя процесса через systemctl, ps или настройки контейнера, затем меняйте владельца только нужного пути.
Рекурсивный chown -R применяйте после проверки списка файлов. Для совместной работы чаще безопаснее назначить рабочую группу и настроить групповые права, чем передавать владение каждому новому пользователю.
Почему новые файлы получают другие права
umask вычитает запрещенные биты из базового режима новых файлов и каталогов. Поэтому chmod существующего файла не объясняет, с какими правами появится следующий. Значение umask зависит от оболочки, службы и контейнера; проверяйте его в том же контексте, где создается объект.
Для диагностики последовательно проверьте пользователя процесса, владельца каждого каталога в пути, режимы каталогов и файла, ACL и ограничения безопасности системы. Такой чек-лист надежнее случайного перебора chmod.
Источники