Управление правами каталога и файла с помощью chmod Recursive

Вы устали менять разрешения на файлы и каталоги вручную? Ищете более быстрый и эффективный способ изменить разрешения на файлы и каталоги? Если да, то вы попали по адресу, потому что в этой статье вы узнаете, как изменить разрешения на файлы и каталоги рекурсивно с помощью команды chmod!

Читайте дальше, чтобы узнать больше!

Предварительные требования

Для выполнения инструкций вам понадобится устройство с Linux и каталог, файлы и подкаталоги в котором доступны для практики.

Изучение пользователей и групп в Linux

Владельцы и группы имеют важное значение в Linux для безопасного управления файлами и каталогами. Владелец – это тот, кому принадлежит файл или каталог, по умолчанию это создатель. В Linux файлы и каталоги также принадлежат группам. Пользователи и группы устанавливаются с помощью команды chown.

На скриншоте ниже содержимое, выделенное зеленым цветом, показывает пользователя, которому принадлежит файл или каталог, в этом примере – mihail. Содержимое, выделенное синим цветом, показывает, к какой группе принадлежит файл или каталог, в этом примере – группа staff.

Listing the owner and group of a set of files and directories

Понимание разрешений на файлы и каталоги в Linux

Разрешения устанавливают, какие действия пользователь или группа могут выполнять с данным файлом или каталогом. Они указываются с помощью символьного представления и также назначаются числовое значение.

  • Чтение (r или 4): Указывает, может ли пользователь или группа читать содержимое файла или каталога. Право на чтение по умолчанию предоставляется всем новым создаваемым файлам и каталогам для всех сторон.
  • Запись (w или 2): Указывает, может ли пользователь или группа редактировать содержимое объекта. Это разрешение по умолчанию предоставляется только владельцу файла или каталога.
  • Выполнение (x или 1): Указывает, может ли пользователь или группа выполнять файл или выполнять команды внутри каталога. Право на выполнение по умолчанию предоставляется только каталогам, но не файлам.

Если вы не предоставите пользователю (u) права на выполнение каталога, он не сможет просматривать содержимое, так как пользователь не сможет выполнять команды внутри каталога!

Приведен пример ниже, вывод команды ls -l демонстрирует различные типы разрешений. Те разрешения, перед которыми стоит значение d, указывают на каталог.

Listing file and directory permissions

Почему же кажется, что для каждого объекта есть три набора разрешений? Гранулярное управление разрешениями достигается путем разделения разрешений на перечисленные ниже разделы (в данном учебном пособии они обозначены как стороны).

  • Пользователь (u): Владелец файла или каталога, выделенный синим цветом.
  • Группа (g): Члены группы, к которой принадлежит файл или каталог, выделенные зеленым цветом.
  • Другие (o): Все дополнительные пользователи и группы, неявно назначенные, выделенные красным цветом.
Demonstrating the combined permissions for a file or directory

Изменение прав доступа к файлу с использованием рекурсивной команды chmod

При правильном понимании разрешений Linux читайте далее, чтобы узнать, как изменить права доступа к файлу. Права изменяются с использованием рекурсивной команды chmod, как показано в приведенных ниже примерах.

1. Сначала проверьте текущие права доступа с помощью команды ls -l. Здесь показан файл my_dir/index.js.

Checking the current permission of index.js.

2. Выполните команду chmod, указав группу a (все) и разрешения rwx или чтение/запись/выполнение. Полная команда следующая: chmod a=rwx index.js.

Changing index.js’ permissions.

3. Как видите, выполнение рекурсивной команды chmod не возвращает никакого вывода. Чтобы проверить, изменились ли права доступа, выполните команду ls -l снова.

Verifying index.js permissions

Установка прав доступа к файлу с использованием числовых значений

Помните числа, связанные с разрешениями, такими как чтение или запись? Вместо указания символьных значений вы можете указать конкретные разрешения с использованием числа. Добавив значения, вы создаете конкретное разрешение, такое как 6, которое представляет собой комбинацию разрешений на запись (2) и чтение (4).

В приведенном ниже примере установите разрешения для файла main.py с помощью команды chmod 664 main.py. Числовые значения разбиваются следующим образом.

  • Пользователь: Чтение и запись (6).
  • Группа: Чтение и запись (6).
  • Другие: Чтение (4).
Changing permissions for main.py.

После изменения разрешений проверьте новые разрешения для файла main.py с помощью команды ls -l.

Verifying permissions for main.py

Удаление и добавление разрешений для файла

До сих пор вы использовали нечисловые команды с параметром присваивания (=) с рекурсивным chmod, чтобы установить явные разрешения. Вместо этого вы можете удалить (-) или добавить (+) разрешения к существующим наборам разрешений.

1. Сначала перечислите существующие разрешения для файла README.md с помощью команды ls -l README.md.

Checking README.md current permissions

2. Затем добавьте (+) разрешение на выполнение (x) для пользовательской группы (u), удалив (-) разрешение на чтение (r) для другой группы (o) для README.md, с помощью следующей команды chmod u+x,o-r README.md. Разрешения разных групп отделяются запятыми (,).

Changing README.md permissions

3. Запустите команду ls -l README.md, чтобы убедиться, что разрешения были изменены.

Checking README.md new permissions

Рекурсивное изменение разрешений файлов и каталогов

Хотя вы делаете прогресс, вы работаете только с одним файлом за раз. Что если у вас есть большое количество файлов, для которых нужно изменить разрешения? Пора повысить свою эффективность и научиться изменять разрешения для нескольких файлов.

Один из вариантов изменения разрешений для нескольких файлов – это запустить chmod рекурсивно с опцией -R (рекурсивно, без заглавной буквы). Опция рекурсии изменит разрешения для всех файлов, включая те, которые находятся в подкаталогах, в указанном пути.

1. Рассмотрим следующую команду: chmod -R a=r,u=rwx my_dir. Большинство опций вы уже видели раньше.

Эта команда изменит разрешения для всех файлов в каталоге my_dir и подкаталогах с использованием опции рекурсии (-R). Файлы будут доступны для чтения (r) всем (a), с различными разрешениями для текущего пользователя (u), установленными на полные (чтение, запись, выполнение).

На скриншоте ниже вы видите результирующие разрешения после выполнения команды, которая не выводит никакого результата.

Checking my_dir files new permissions

2. Предположим, вы выполняете команду chmod -R a=rwx my_dir в том же каталоге, что и раньше, my_dir. Опять же, вы изменяете все файлы в my_dir и его подкаталогах, чтобы установить всем (a) полные разрешения (чтение, запись, выполнение). Вот результат выполнения команды, так как рекурсивный chmod не отображает вывод.

Checking my_dir files new permissions to confirm every part now has every permission

3. Как насчет числового метода? Как показано ниже, рекурсивный метод также работает с числовыми разрешениями, chmod -R 770 my_dir. Здесь вы предоставляете полные разрешения пользователю и группе, но не предоставляете разрешений другой стороне.

Recursively changing permissions with the numeric method

4. Запустите ls -l, чтобы проверить, установлены ли разрешения для файлов и подкаталогов my_dir числовым методом.

Checking the permissions set once again, this time with the numeric method

Определение Поведения Файлов и Папок с помощью Специальных Разрешений

Специальные разрешения позволяют использовать несколько дополнительных привилегий, уникальных для стандартных наборов разрешений. Существует три специальных разрешения. Вот как эти специальные разрешения работают и как их можно добавить к файлу или каталогу.

Установка Разрешений SUID (Пользователь + S)

Обычно обозначается как SUID, это специальное разрешение для пользователя. У SUID есть одна функция: файл с SUID всегда выполняется от имени пользователя, который владеет файлом, независимо от того, кто выполняет файл.

Например, рассмотрим index.js. Чтобы дать дополнительное разрешение SUID, выполните chmod u+s index.js.

Теперь, если вы запустите ls -l index.js, вы увидите, что у пользователя есть s в его разрешениях вместо x.

Checking index.js new permissions

Установка Разрешений SGID (Группа + S)

Обычно обозначается как SGID, это специальное разрешение имеет две функции:

  • Если установлено для файла, это позволяет выполнять файл от имени группы, которой принадлежит файл, независимо от того, кто выполняет файл.
  • Если установлено для каталога, то любые файлы, созданные в каталоге, будут иметь владельца группы, установленного владельцем каталога.

Практика на файле index.php. Чтобы добавить разрешение SGID к этому файлу, выполните следующую команду: chmod g+s index.php.

Теперь, если вы выполните ls -l index.php, вы увидите, что у группы есть s в их разрешениях.

Checking index.php new permissions

Переходите к каталогу: my_dir. Вы можете добавить разрешение SGID к этому каталогу, используя следующую команду: chmod g+s my_dir. Теперь любые файлы, созданные в этом каталоге, будут иметь владельца группы, установленного владельцем каталога. Вы можете проверить новые разрешения каталога, используя ls -ld my_dir (параметр d ограничивает вывод только для каталогов).

Checking my_dir new permissions

Изменение разрешения Sticky Bit

Последнее специальное разрешение также известно как “sticky bit”. Это разрешение не влияет на отдельные файлы. Однако на уровне каталога оно ограничивает удаление файлов. Только владелец файла может удалить файл в этом каталоге.

Добавьте sticky bit к уже знакомому каталогу my_dir. Для этого выполните команду следующим образом: chmod +t my_dir.

Обратите внимание, что для добавления sticky bit вы не указываете группу other (o) перед +t.

Когда вы проверяете новые разрешения my_dir, вы увидите заглавную букву T в разрешениях other, как показано на скриншоте ниже.

Checking my_dir new and special permissions

Заключение

Поздравляем! Вы охватили много тем по рекурсивному chmod. Теперь вы готовы решать любые неприятности с разрешениями, которые могут возникнуть с всемогущим инструментом chmod. Вы даже научились использовать силу рекурсивного (-R) параметра.

Как вы собираетесь использовать разносторонние возможности команды chmod в своих интересах, когда в следующий раз вам придется управлять разрешениями файлов или каталогов?

Source:
https://adamtheautomator.com/chmod-recursive/