Как использовать команду chmod в Linux

Управляйте доступом к файлам, каталогам поиска и запуском сценариев с помощью команды Linux chmod. Эта команда изменяет права доступа к файлам Linux, которые на первый взгляд выглядят сложными, но на самом деле довольно просты, если вы знаете, как они работают.

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

В Linux, кто может делать что-либо с файлом или каталогом, контролируется наборами разрешений. Есть три набора разрешений. Один набор для владельца файла, другой набор для членов группы файла и последний набор для всех остальных.

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

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

Просмотр и понимание прав доступа к файлам

Мы можем использовать параметр -l (длинный формат), чтобы ls отображал права доступа к файлам и каталогам.

ls -l

вывод из ls -l в окне терминала

В каждой строке первый символ определяет тип записи, которая отображается в списке. Если это прочерк (-), это файл. Если это буква d, это каталог.

Следующие девять символов представляют настройки для трех наборов разрешений.

Первые три символа показывают права пользователя, владеющего файлом (права пользователя).
Средние три символа показывают разрешения для членов группы файла (разрешения группы).
Последние три символа показывают разрешения для всех, кто не входит в первые две категории (другие разрешения).

В каждом наборе разрешений есть три символа. Символы являются индикаторами наличия или отсутствия одного из разрешений. Это либо тире (-), либо буква. Если символ — тире, это означает, что разрешение не предоставлено. Если это символ r, w или x, это разрешение предоставлено.

Буквы обозначают:

r: разрешения на чтение. Файл можно открыть и просмотреть его содержимое.
w: права на запись. Файл можно редактировать, изменять и удалять.
x: выполнение разрешений. Если файл представляет собой сценарий или программу, его можно запустить (выполнить).

  Как настроить Seafile в Linux

Например:

— означает, что никаких разрешений не было предоставлено.
rwx означает, что предоставлены полные разрешения. Все индикаторы чтения, записи и выполнения присутствуют.

На нашем скриншоте первая строка начинается с буквы d. Эта строка относится к каталогу под названием «архив». Владелец каталога — «dave», а имя группы, которой принадлежит каталог, также называется «dave».

Следующие три символа — это права пользователя для этого каталога. Они показывают, что у владельца есть все разрешения. Все символы r, w и x присутствуют. Это означает, что у пользователя dave есть разрешения на чтение, запись и выполнение для этого каталога.

Второй набор из трех символов — это разрешения группы, это rx. Они показывают, что члены группы dave имеют разрешения на чтение и выполнение для этого каталога. Это означает, что они могут перечислить файлы и их содержимое в каталоге, и они могут выполнить cd (выполнить) в этот каталог. У них нет прав на запись, поэтому они не могут создавать, редактировать или удалять файлы.

Последний набор из трех символов также является rx. Эти разрешения применяются к людям, на которых не распространяются первые два набора разрешений. Эти люди (называемые «другими») имеют разрешения на чтение и выполнение в этом каталоге.

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

Для всех других файлов (кроме файла сценария mh.sh) Дэйв и члены группы dave имеют свойства чтения и записи для файлов, а остальные имеют только разрешения на чтение.

В особом случае файла сценария mh.sh владелец dave и члены группы имеют разрешения на чтение, запись и выполнение, а остальные имеют разрешения только на чтение и выполнение.

Понимание синтаксиса разрешений

Чтобы использовать chmod для установки разрешений, нам нужно сообщить ему:

Кто: для кого мы устанавливаем разрешения.
Что: Какие изменения мы вносим? Мы добавляем или удаляем разрешение?
Что: какие разрешения мы устанавливаем?

Мы используем индикаторы для представления этих значений и формируем короткие «утверждения о разрешениях», такие как u + x, где «u» означает «пользователь» (кто), «+» означает добавить (что), а «x» означает разрешение на выполнение. (который).

Мы можем использовать следующие значения «кто»:

u: Пользователь, то есть владелец файла.
g: Группа, то есть члены группы, к которой принадлежит файл.
o: Другие, то есть люди, не подпадающие под действие разрешений u и g.
а: Все, имея в виду все вышеперечисленное.

  Как настроить RPMFusion в Fedora Linux

Если ни один из них не используется, chmod ведет себя так, как если бы был использован «a».

Какие значения мы можем использовать:

-: Знак минус. Удаляет разрешение.
+: Знак плюса. Предоставляет разрешение. Разрешение добавляется к существующим разрешениям. Если вы хотите иметь это разрешение и только этот набор разрешений, используйте параметр =, описанный ниже.
=: Знак равенства. Установите разрешение и удалите других.

«Какие» значения мы можем использовать:

r: разрешение на чтение.
w: разрешение на запись.
x: разрешение на выполнение.

Установка и изменение разрешений

Допустим, у нас есть файл, в котором у всех есть полные права.

ls -l new_ file.txt

ls -l new_ file.txt в окне терминала

Мы хотим, чтобы у пользователя dave были разрешения на чтение и запись, а у группы и других пользователей были разрешения только на чтение. Мы можем сделать это с помощью следующей команды:

chmod u=rw,og=r new_file.txt

chmod u = rw, og = r new_file.txt в окне терминала

Использование оператора «=» означает, что мы удаляем все существующие разрешения, а затем устанавливаем указанные.

давайте проверим новое разрешение для этого файла:

ls -l new_file.txt

ls -l new_ file.txt в окне терминала

Существующие разрешения были удалены, а новые разрешения установлены, как мы и ожидали.

Как насчет добавления разрешения без удаления существующих настроек разрешений? Мы тоже легко можем это сделать.

Допустим, у нас есть файл сценария, редактирование которого мы закончили. Нам нужно сделать его исполняемым для всех пользователей. Его текущие разрешения выглядят так:

ls -l new_script.sh

ls -l new_script.sh в окне терминала

Мы можем добавить разрешение на выполнение для всех с помощью следующей команды:

chmod a+x new_script.sh

chmod a + x new_script.sh в окне терминала

Если мы посмотрим на разрешения, мы увидим, что разрешение на выполнение теперь предоставлено всем, а существующие разрешения все еще в силе.

ls -l new_script.sh

ls -l new_script.sh в окне терминала

Мы могли бы достичь того же без «а» в заявлении «а + х». Следующая команда сработала бы точно так же.

chmod +x new_script.sh

Установка разрешений для нескольких файлов

Мы можем применить разрешения сразу к нескольким файлам.

Это файлы в текущем каталоге:

ls -l

ls -l в окне терминала

Допустим, мы хотим удалить разрешения на запись для «других» пользователей из файлов с расширением «.page». Мы можем сделать это с помощью следующей команды:

chmod o-r *.page

chmod или * .page в окне терминала

Давайте проверим, какой эффект это произвело:

ls -l

ls -l в окне терминала

Как мы видим, разрешение на чтение было удалено из файлов «.page» для «другой» категории пользователей. Никакие другие файлы не пострадали.

  4 лучших приложения для чтения RSS-каналов для Linux

Если бы мы хотели включить файлы в подкаталоги, мы могли бы использовать параметр -R (рекурсивный).

chmod -R o-r *.page

Числовая стенография

Другой способ использования chmod — предоставить разрешения, которые вы хотите предоставить владельцу, группе и другим пользователям, в виде трехзначного числа. Крайняя левая цифра представляет разрешения для владельца. Средняя цифра представляет разрешения для членов группы. Крайняя правая цифра представляет разрешения для остальных.

Цифры, которые вы можете использовать, и то, что они представляют, перечислены здесь:

0: (000) Нет разрешения.
1: (001) Разрешение на выполнение.
2: (010) Разрешение на запись.
3: (011) Разрешения на запись и выполнение.
4: (100) Разрешение на чтение.
5: (101) Разрешения на чтение и выполнение.
6: (110) Разрешения на чтение и запись.
7: (111) Разрешения на чтение, запись и выполнение.

Каждое из трех разрешений представлено одним из битов в двоичном эквиваленте десятичного числа. Итак, 5, что в двоичном формате равно 101, означает чтение и выполнение. 2, то есть 010 в двоичном формате, будет означать разрешение на запись.

Используя этот метод, вы устанавливаете разрешения, которые хотите иметь; вы не добавляете эти разрешения к существующим разрешениям. Поэтому, если бы разрешения на чтение и запись уже были, вам нужно было бы использовать 7 (111), чтобы добавить разрешения на выполнение. Использование 1 (001) удалит разрешения на чтение и запись и добавит разрешение на выполнение.

Давайте снова добавим разрешение на чтение в файлы «.page» для других категорий пользователей. Мы также должны установить разрешения для пользователей и групп, поэтому нам нужно установить для них то, что они уже есть. У этих пользователей уже есть разрешения на чтение и запись, то есть 6 (110). Мы хотим, чтобы «другие» имели права на чтение и разрешения, поэтому им нужно установить значение 4 (100).

Следующая команда выполнит это:

chmod 664 *.page

chmod 664 * .page в окне терминала

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

ls -l

ls -l в окне терминала

Расширенные настройки

если ты прочтите страницу руководства для chmod вы увидите, что есть несколько дополнительных параметров, связанных с битами SETUID и SETGID, а также с ограниченным удалением или «липким» битом.

В 99% случаев вам понадобится chmod, описанные здесь параметры помогут вам.