Гид по технологиям

Рекурсивное изменение прав файлов в Linux

• 5 min read • Linux • Обновлено 29 Nov 2025
Рекурсивно изменить права файлов в Linux
Рекурсивно изменить права файлов в Linux

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

Изображение: Обзор прав файлов в Linux

Linux — многопользовательская система, поэтому нужно управлять правами доступа к файлам и директориям, чтобы только уполномоченные процессы и пользователи могли читать, изменять или выполнять файлы. При работе с Linux вы наверняка встречали ошибку “Permission denied” — это значит, что у вас нет нужных привилегий. В этой статье разберём, как рекурсивно изменить права так, чтобы настройки применились ко всем вложенным каталогам и файлам, и какие подходы безопаснее в разных сценариях.

Почему рекурсивное изменение прав полезно и когда опасно

Рекурсивное применение прав экономит время: одна команда изменяет все вложенные файлы и каталоги. Но это же делает операцию рискованной — можно нечаянно дать исполнение всем файлам или сделать важные файлы недоступными. Используйте рекурсивные изменения аккуратно и всегда сначала проверяйте, к чему вы применяете команду.

Важно: выполняйте такие изменения от имени root или через sudo только если вы понимаете последствия.

Как проверить текущие права

Чтобы понять, почему операция даёт “Permission denied”, сначала проверьте права и владельца:

ls -l /путь/к/каталогу
ls -la /путь/к/каталогу

Пример вывода ls -l объясняет структуру:

  • Первый символ: d — каталог, l — символическая ссылка, - — обычный файл.
  • Следующие девять символов идут группами по три: пользователь (user), группа (group), остальные (other). Каждая группа содержит r (чтение), w (запись) и x (выполнение).
  • Столбцы справа показывают владельца, группу, размер и дату модификации.

Скриншот: Вывод ls -l с правами и владельцами

Пример разбора одной строки:

drwxr-xr-x 2 root root 4096 Jul 15 06:25 backups
  • d — это директория
  • 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 {} +

Скриншот: Пример проверки прав после применения chmod с find

Примеры полезных практик

  • Логи: файлы в /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/file

ACL позволяют давать права отдельным пользователям без изменения базовой маски прав.

Когда рекурсивный chmod не помогает (контрпримеры)

  • Файловая система монтирована только для чтения — изменение прав невозможно.
  • Право блокируется SELinux или AppArmor — стандартные Unix-права могут быть корректными, но доступ запрещён политикой безопасности.
  • Файлы в сетевых шаре (NFS, SMB) могут иметь права, определяемые сервером; локальный chmod может быть проигнорирован.

Мини-методология: как безопасно изменить права рекурсивно

  1. Проверьте текущие права и владельцев: ls -la /путь
  2. Определите правило для файлов и для каталогов отдельно.
  3. Пробный запуск find с -maxdepth 1 или на тестовой копии.
  4. Выполните команду для каталогов: find /path -type d -exec chmod 755 {} +
  5. Выполните команду для файлов: find /path -type f -exec chmod 644 {} +
  6. Проверьте результат ls -la и сервисы, которые используют эти файлы.
  7. При необходимости настройте 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, контейнеры), сначала проверьте поведение прав в этой среде, прежде чем применять рекурсивные изменения.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро