Рекурсивное изменение прав файлов в Linux
Кратко: Пошаговое руководство по корректному изменению прав доступа в Linux рекурсивно — когда и как использовать chmod, find, chown и ACL, чтобы избежать ошибок и не сломать систему.

Linux — многопользовательская система, поэтому нужно управлять правами доступа к файлам и директориям, чтобы только уполномоченные процессы и пользователи могли читать, изменять или выполнять файлы. При работе с Linux вы наверняка встречали ошибку “Permission denied” — это значит, что у вас нет нужных привилегий. В этой статье разберём, как рекурсивно изменить права так, чтобы настройки применились ко всем вложенным каталогам и файлам, и какие подходы безопаснее в разных сценариях.
Почему рекурсивное изменение прав полезно и когда опасно
Рекурсивное применение прав экономит время: одна команда изменяет все вложенные файлы и каталоги. Но это же делает операцию рискованной — можно нечаянно дать исполнение всем файлам или сделать важные файлы недоступными. Используйте рекурсивные изменения аккуратно и всегда сначала проверяйте, к чему вы применяете команду.
Важно: выполняйте такие изменения от имени root или через sudo только если вы понимаете последствия.
Как проверить текущие права
Чтобы понять, почему операция даёт “Permission denied”, сначала проверьте права и владельца:
ls -l /путь/к/каталогу
ls -la /путь/к/каталогуПример вывода ls -l объясняет структуру:
- Первый символ:
d— каталог,l— символическая ссылка,-— обычный файл. - Следующие девять символов идут группами по три: пользователь (user), группа (group), остальные (other). Каждая группа содержит
r(чтение),w(запись) иx(выполнение). - Столбцы справа показывают владельца, группу, размер и дату модификации.

Пример разбора одной строки:
drwxr-xr-x 2 root root 4096 Jul 15 06:25 backupsd— это директорияrwx(владелец root) — владелец может читать, записывать и заходить в каталогr-x(группа) — группа может читать и заходить, но не писатьr-x(остальные) — остальные пользователи могут читать и заходить
Основы chmod: символический и числовой режимы
chmod изменяет права доступа. Два распространённых способа задать права:
- Символический синтаксис: [u|g|o|a][+|-|=][rwx]
- u — владелец, g — группа, o — остальные, a — все
- Пример:
chmod g+w fileдобавит запись для группы
- Числовой (октальный) синтаксис: три цифры 0–7 (например, 755)
- Первая цифра — права владельца, вторая — группы, третья — остальных
- 7 = r(4)+w(2)+x(1) = 4+2+1 = 7
- Пример:
chmod 644 file— владелец rw-, группа r–, остальные r–
Общие команды и их расшифровка:
chmod u+x script.sh # добавить исполнение владельцу
chmod a-w /var/backups # убрать запись у всех
chmod 755 /srv/myapp # установить rwx r-x r-xРекурсивное изменение: как делать правильно
Для рекурсивного применения используется опция -R (регистр важен):
sudo chmod -R a-w /var/backups # убрать запись у всех рекурсивно
sudo chmod -R a+rX /var/backups # добавить чтение и условное выполнениеПояснение: a+rX — добавляет чтение для всех и добавляет x только каталогам и файлам, которые уже имеют хотя бы один бит выполнения; это безопаснее, чем давать x всем файлам.
Пример: чтобы убрать права чтения у всех рекурсивно:
sudo chmod -R a-r /var/backupsНо чаще нужно разделять правила для файлов и каталогов: каталоги обычно требуют права x, а файлы — нет.
Безопасный подход: find + chmod
Команда find позволяет выбирать только файлы или только каталоги и применять разные права:
- Для файлов (например, чтение/запись для владельца, чтение для группы и остальных):
sudo find /var/log -type f -exec chmod 644 {} \;- Для каталогов (обычно нужен бит исполнения, чтобы можно было заходить):
sudo find /var/log -type d -exec chmod 755 {} \;Альтернатива с производительностью (использует +, пакует несколько аргументов):
sudo find /var/log -type f -print0 | xargs -0 sudo chmod 644Или с безопасной обработкой имён файлов, содержащих пробелы:
sudo find /path -type f -exec chmod 644 {} +
Примеры полезных практик
- Логи: файлы в /var/log —
644, каталоги —755. - Веб-контент: статику обычно
644, каталоги755; каталоги, куда веб-сервер пишет (загрузки), —775с правильным владельцем (например, www-data). - Скрипты:
750или755в зависимости от того, нужен ли доступ внешним пользователям.
Управление владением: chown и setgid
Права часто идут вместе с владельцем и группой. Чтобы сменить владельца:
sudo chown user:group /path/to/file
sudo chown -R user:group /path/to/dir # рекурсивноДля команд, где несколько пользователей в одной группе должны изменять содержимое, полезно установить setgid на каталог:
sudo chmod g+s /srv/shared # новые файлы наследуют группу каталогаACL для тонкого контроля доступа
Стандартных прав иногда недостаточно. Для более детального контроля используйте ACL (setfacl/getfacl):
sudo setfacl -m u:alice:rwx /srv/project/file
sudo getfacl /srv/project/fileACL позволяют давать права отдельным пользователям без изменения базовой маски прав.
Когда рекурсивный chmod не помогает (контрпримеры)
- Файловая система монтирована только для чтения — изменение прав невозможно.
- Право блокируется SELinux или AppArmor — стандартные Unix-права могут быть корректными, но доступ запрещён политикой безопасности.
- Файлы в сетевых шаре (NFS, SMB) могут иметь права, определяемые сервером; локальный chmod может быть проигнорирован.
Мини-методология: как безопасно изменить права рекурсивно
- Проверьте текущие права и владельцев:
ls -la /путь - Определите правило для файлов и для каталогов отдельно.
- Пробный запуск
findс-maxdepth 1или на тестовой копии. - Выполните команду для каталогов:
find /path -type d -exec chmod 755 {} + - Выполните команду для файлов:
find /path -type f -exec chmod 644 {} + - Проверьте результат
ls -laи сервисы, которые используют эти файлы. - При необходимости настройте ACL или смените владельца
chown.
Чеклист для админа перед применением рекурсивных изменений
- Есть ли резервная копия критичных данных?
- Запущены ли службы, которые могут зависеть от прав (перезапускать по необходимости)?
- Проверили ли вы права на тестовой директории?
- Правильно ли выбраны владельцы и группы?
- Установлены ли ограничения SELinux/AppArmor?
Быстрый набор команд (шпаргалка)
ls -l /path # просмотреть права
sudo chmod -R a+rX /path # безопасно добавить чтение и x где уместно
sudo find /path -type d -exec chmod 755 {} +
sudo find /path -type f -exec chmod 644 {} +
sudo chown -R user:group /path
sudo setfacl -m u:alice:rwx /path/fileКритерии приёмки
- Все каталоги имеют бит
x, позволяющий заходить внутрь (rwxилиr-xдля групп/остальных по политике). - Файлы не имеют исполнение, если это не скрипты или исполняемые бинарники.
- Владельцы и группы соответствуют назначению сервисов (например, веб-сервер).
- ACL применены там, где нужны исключения.
Риски и смягчение
- Риск: случайно дать 777 — смягчение: не применять 777 без необходимости, использовать
a+rXи выбирать файлы/каталоги отдельно. - Риск: сломать сервисы — смягчение: тест в staging и перезапуск сервисов с контролем логов.
- Риск: проблемы с SELinux/AppArmor — смягчение: проверить статус
sestatusи политики, не полагаться только на chmod.
Короткий глоссарий (1 строка на термин)
- chmod — изменяет права доступа к файлам.
- chown — меняет владельца и группу файла/каталога.
- find — ищет файлы/каталоги по критериям и выполняет команды над найденными объектами.
- ACL — списки контроля доступа для более тонкой настройки прав.
- setgid — бит, заставляющий новые файлы наследовать группу каталога.
В заключение
Рекурсивное изменение прав — мощный инструмент, который экономит время, но требует аккуратности. Лучшие практики: разделяйте правила для файлов и каталогов, используйте find для таргетинга, применяйте a+rX вместо «брутального» 777, и при необходимости используйте ACL для исключений. Всегда проверяйте права и владельцев и проводите тестовые прогонные изменения на копиях или в staging-среде.

Важно: если у вас особая инфраструктура (NFS, SELinux, контейнеры), сначала проверьте поведение прав в этой среде, прежде чем применять рекурсивные изменения.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента