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

Если приложение не может прочитать файл, команда chmod 777 может быстро убрать ошибку — и одновременно дать запись всем пользователям системы. Безопаснее сначала выяснить, кому принадлежит файл и от какой учётной записи работает приложение. Ниже — практические способы проверить и изменить права с учётом типичных ловушек. Примеры рассчитаны на GNU Coreutils 9.5; базовый синтаксис команд сохраняется и в других версиях, но перед запуском проверьте справку своей системы.
Сначала проверьте владельца и права
У файла есть владелец, группа и три набора прав: для владельца, участников группы и остальных пользователей. Буквы r, w и x означают чтение, запись и выполнение. Для каталога смысл отличается: r позволяет получить список имён, w — менять записи каталога, а x — проходить через него и обращаться к известным именам внутри.
Посмотрите права и владельца до изменений:
ls -l -- путь/к/файлу
id
В выводе ls -l строка вроде -rw-r----- означает: владелец читает и меняет файл, группа читает, остальные не имеют доступа. Затем идут число ссылок, имя владельца, группа, размер и время изменения. Команда id покажет, к каким группам принадлежит текущий пользователь.
Термин — umask. Это маска, которая ограничивает права новых файлов и каталогов при создании. Она не меняет права уже существующих объектов, поэтому попытка исправить старый файл изменением umask ничего не даст.
Выберите способ для chmod
chmod меняет права, но не владельца. Для одной и той же задачи есть два удобных способа записи: числовой и символьный. Числа короче и точно задают весь набор прав; символы удобнее, когда нужно добавить или убрать только одно разрешение.
| Способ | Пример | Что задаёт | Когда удобен |
|---|---|---|---|
| Числовой | chmod 640 файл | Владелец читает и пишет; группа читает; остальные без доступа | Когда нужен заранее известный полный набор прав |
| Символьный | chmod g+w файл | Добавляет группе право записи, не меняя остальные биты | Когда нужно точечно изменить существующие права |
В числовой записи значения складываются: чтение — 4, запись — 2, выполнение — 1. Поэтому 7 — это rwx, 5 — r-x, а 0 — отсутствие прав. Три цифры идут в порядке «владелец — группа — остальные»: например, 640 означает rw-r-----.
Задайте типичные права так:
chmod 640 -- "отчёт.txt"
chmod 750 -- "скрипт.sh"
chmod u+x -- "скрипт.sh"
chmod o-rwx -- "секретный-файл.txt"
Первый вызов оставляет чтение и запись владельцу, чтение группе и закрывает файл для остальных. Во втором владелец получает полный доступ, группа — чтение и выполнение. Символьная запись u+x добавляет выполнение владельцу, а o-rwx убирает у остальных все три права. Кавычки защищают путь, если в нём есть пробелы; -- отделяет параметры команды от имени файла, в том числе если имя начинается с дефиса.
Не выдавайте права всем только потому, что приложение не открывает файл. Исправьте именно ту часть цепочки, которой не хватает доступа: владельца, группу или конкретное разрешение.
Когда менять владельца через chown
Если нужный процесс запускается от пользователя app, а файл принадлежит другому пользователю, изменение прав может быть не тем решением. chown меняет владельца и, при необходимости, группу. Обычно для этого нужны права администратора; используйте sudo только для тех путей, которые проверили.
sudo chown app файл.txt
sudo chown app:site файл.txt
В первой команде меняется владелец, во второй — владелец и группа. Имена app и site здесь примеры: укажите существующие учётную запись и группу из вашей системы. Проверить результат можно снова через ls -l. Если после смены владельца нужный пользователь всё ещё не получает доступ, проверьте права каталогов выше по пути: для прохода к файлу процессу нужны права x на каждом родительском каталоге.
Когда что выбирать
- Файл конфигурации или документ. Начните с проверки владельца. Для файла, который должен менять только владелец, часто подходит схема наподобие
640, но конкретные права зависят от программы и группы. - Скрипт, который нужно запускать. Добавьте
xтолько тем пользователям, которым действительно нужен запуск. Для личного скрипта можно использоватьchmod u+x, не открывая его для остальных. - Совместная работа группы. Проверьте членство пользователей в группе и назначьте группе нужные права. Не заменяйте настройку группы на доступ «для всех».
- Файл или каталог приложения. Сначала выясните, от какого пользователя работает служба и какие пути ей нужны для чтения или записи. Передавайте владение только необходимым каталогам, а не всей системе.
Что чаще всего ломается
Рекурсивное изменение затрагивает лишнее
Флаги -R у chmod и chown применяют изменения ко всему дереву. В каталоге приложения могут быть исполняемые файлы, конфигурация и пользовательские данные, которым нужны разные права. Не запускайте рекурсивную команду на /, домашнем каталоге или корне сайта «на всякий случай»: ошибка охватит больше файлов, чем вы планировали.
Если менять нужно целое дерево, сначала укажите точный каталог и проверьте его содержимое, например командой find путь/к/каталогу -maxdepth 2 -print. Для файлов и каталогов часто требуются разные права, поэтому не применяйте один числовой режим ко всему дереву без проверки. Меняйте небольшую область, затем проверяйте работу приложения и владельцев.
Права файла не компенсируют закрытый каталог
Файл может иметь разрешение на чтение, но оставаться недоступным, если процесс не может пройти через один из родительских каталогов. Проверяйте не только сам файл и не раздавайте x на каталоги всем подряд: доступ к путям тоже может раскрыть структуру данных.
chmod не меняет владельца, а umask — права старого файла
Это разные задачи. Если файл создан другим пользователем, chmod изменит разрешения, но не назначит владельца; для этого нужен chown. Если проблема касается только новых файлов, изучайте umask и настройки приложения, которое их создаёт.
777 маскирует причину
Режим 777 даёт всем чтение, запись и выполнение. Для обычного файла это позволяет любому пользователю его менять, а для каталога — создавать и удалять записи. Если после такой команды ошибка исчезла, верните избыточный доступ и настройте владельца или группу с минимально необходимыми правами.
Что делать дальше
Перед изменением запишите исходные права и владельца, затем меняйте только один фактор за раз: сначала владельца или группу, потом конкретные разрешения. После этого проверьте доступ от имени пользователя приложения и повторите проверку после перезапуска службы. Если права выглядят правильными, а отказ сохраняется, проверьте ACL, настройки самой программы и системные механизмы безопасности вроде SELinux или AppArmor — это отдельные уровни контроля доступа.
Защитник прав потребителей: Досудебные претензии на возврат товара со ссылками на ЗоЗПП.
Спросить за 15 ₽Источники: GNU Coreutils: chmod invocation, GNU Coreutils: chown invocation
Частые вопросы
В чём разница между chmod и chown?
Что означает chmod 755?
Почему приложение не читает файл, хотя у него есть право r?
Можно ли использовать chmod 777, чтобы быстро исправить ошибку?
Будут ли команды работать в другой версии Linux?
Что делать, если после chmod или chown доступ всё равно не появился?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.