Что такое chmod?

Сокращение от «режим изменения», chmod был разработан в начале 1970-х годов одновременно с первой версией Unix компании AT&T. В многопользовательских операционных системах, подобных Unix, chmod отвечает за назначение и изменение прав доступа в файловых системах, которые поддерживаются системой управления правами Unix. Это также относится ко всем стандартным файловым системам в обычных производных Linux, предназначенных для поддержки работы сервера. Изменение прав доступа с помощью этой команды может быть выполнено только владельцем файла или пользователем root.

Дистрибутивы Linux, такие как Ubuntu, являются одними из самых популярных среди операторов веб-серверов. Одной из общих черт всех производных Unix является то, что файлам и каталогам назначаются определенные права доступа. Но у пользователей есть возможность изменить эти настройки, активировав программу командной строки «chmod».

Как использовать chmod?

В целом, система прав доступа к данным в Unix опирается на классы пользователей и индивидуальные права доступа. Chmod поддерживает две различные системы: символическую нотацию с использованием букв и распределение прав доступа к данным с помощью восьмеричных кодов, основанных на цифрах. Как уже говорилось ранее, изменения в правах доступа может вносить только владелец файла или пользователь root. Выполнение следующих процедур всегда должно соответствовать следующему синтаксису:

$ chmod options mode file

За командой chmod может следовать элемент «options», который позволяет определить дальнейшие опции команды chmod. Элемент «mode» представляет собой так называемую маску, которая применяется к «файлу» (который также может быть каталогом). Эта маска содержит информацию, отвечающую за определение того, должен ли класс пользователей получить новые права доступа или лишиться тех прав, которые они имеют в настоящее время.

Что такое классы chmod?

Согласно файловой системе Unix, каждый файл на данном Linux-сервере имеет индивидуальные права доступа; то же самое относится и к каталогам. Управление такими правами доступа поддерживается с помощью трех классов пользователей:

Пользователь

Как правило, любой пользователь, создающий файл в системе данных Unix, автоматически определяется как «пользователь» этого файла. Право собственности также можно изменить задним числом, введя команду ‘chown’.

Группа

Класс пользователей ‘group’ объединяет различные учетные записи пользователей на сервере. В Unix-подобных системах учетная запись каждого пользователя автоматически назначается группе. Однако назначение пользователей в дополнительные группы остается возможным. Назначение групп может быть настроено как владельцем, так и пользователем root с помощью команды ‘chgrp’.

Другие

Класс пользователей ‘others’ включает в себя всех пользователей, которые не являются ни владельцами файлов, ни членами групп с правами доступа. Класс пользователей ‘others’ обозначается сокращенным символом ‘o’.

Маска может быть создана либо в символьной, либо в восьмеричной нотации. Их основные особенности и преимущества кратко описаны в следующем параграфе.

Символьная нотация

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

Буквы для прав доступа

Значение

r

Права на чтение; также обозначается как R-бит

w

Права на запись; также обозначается как W-бит

x

Права на исполнение; также обозначается как X-бит

Буквы для обозначения классов пользователей

Значение

u

Класс пользователя «пользователь»

g

Класс пользователя «группа»

o

Класс пользователя «другие»

a

«все»; команда, относящаяся ко всем классам пользователей.

Uмаски, созданные в соответствии с символьной нотацией, используют следующие операнды. Они отвечают за связь классов пользователей с правами на файлы:

+

Операнд ‘+’ назначает классам пользователей новые права на файлы. При этом перезаписываются только затронутые права на данные.

Операнд ‘-‘ удаляет права на файл у класса пользователя.

=

Если необходимо сбросить файловые права класса пользователей, то используется операнд ‘=’.

Следующая команда chmod изменяет файл mock, example.txt, таким образом, что владелец (пользователь), а также другие пользователи (группа, other) получают права на запись и чтение:

$ chmod ugo+rw example.txt

Возможной альтернативой является ссылка на все классы пользователей (a):

$ chmod a+rw example.txt

При вызове в терминале файл example.txt будет отображать следующие права вместо своих первоначальных прав:

Права доступа до изменения

команда chmod

Права доступа после изменения

-rw——-

a+rw

-rw-rw-rw-

пользователь: чтение, запись

группа: нет прав

другой: нет прав

 

a = все

+ = добавить права доступа

r = чтение

w = запись

пользователь: чтение, запись

группа: чтение, запись

другой: чтение, запись

 

Восьмеричная нотация

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

Позиция цифры класса пользователя

Значение

1

Соответствует классу пользователя ‘user’.

2

Соответствует классу пользователя ‘группа’.

3

Соответствует классу пользователя «другие».

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

Значение для права доступа

Значение

4

чтение

2

письмо

1

выполнение

0

нет прав

В результате этого распределения также возникают следующие комбинации значений:

Право доступа

Значение

0

Нет

1

только исполнять

2

только запись

3

запись/исполнение

4

только чтение

5

чтение/выполнение

6

чтение/запись

Восьмеричную нотацию лучше всего представить на примере. Предположим, что пользователь файла example.txt хочет предоставить права на чтение группе ‘examplegroup’.

$ chmod 640 example.txt

Со значением ‘6’, помещенным в первую позицию umask, владелец сохраняет основные права доступа: 4 (чтение) + 2 (запись). Второе значение umask указывает на права доступа, предоставленные указанной группе: 4 (чтение). Другим пользователям не предоставляется никаких прав, что соответствует значению ‘0’ на третьем месте.

Параметры команд chmod

Независимо от того, выбирают ли пользователи числовую или символьную нотацию, всегда существует несколько вариантов распределения прав доступа. Эти альтернативы добавляются в командную строку между командой и umask:

Код

Опция

Описание

-R

рекурсивный

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

-v

verbose

После команды shell выдается диагностика всех обработанных файлов.

-c

changes

После команды shell выдается диагностика всех измененных файлов.

-f

silent

Сообщения об ошибках подавляются

Следующий пример команды изменяет права доступа рекурсивно для всех подкаталогов и файлов, а также для самой папки:

$ chmod -R 744 examplefolder

Ко всем файлам и подкаталогам в каталоге ‘examplefolder’ применяется следующее: владелец получает полные права доступа (7); члены группы и другие пользователи имеют доступ только для чтения (4).

Пример использования chmod

Для того чтобы лучше понять права доступа к файлам в Unix, может оказаться полезным получить представление о том, как права доступа к файлам или каталогам отображаются в терминале. Содержимое папки может быть отображено в терминале с помощью команды ‘ls’.  Владельцы или пользователи root могут получить информацию о правах на файлы, используя атрибут ‘-l’.

ls -l

Возможный вывод для этой команды будет выглядеть следующим образом:

total 3
-rwx------  1 det det    0 2020-02-02 10:41 file1.txt
-rw-rw-r--  1 det det    0 2020-02-02 10:41 file2.txt
drwxr-xr-x  2 det det 4096 2020-02-02 10:44 directory

Запрошенный путь содержит два файла («file1.txt» и «file2.txt») и один каталог («directory»). Каждый вход начинается с 10-значного блока, который указывает на права доступа к файлам и каталогу. Цифра на первом месте указывает, о чем идет речь в коде. Для файлов код начинается со знака минус («-«), как в первых двух строках примера. Буква «d» (для «directory») указывает на каталог. Для ссылок «d» заменяется на «l» (для «link»).

Преимущество файловой системы Unix заключается в ее простых структурах. Благодаря использованию многопользовательских операционных систем, сложные проблемы решаются с минимальными усилиями. Кроме того, этот подход интуитивно понятен в использовании и легко обрабатывается компьютерными системами. Те, кто не чувствует себя уверенно в своих возможностях по распределению прав доступа в терминале, могут в качестве альтернативы положиться на файловые менеджеры. Обычные программы FTP, как правило, имеют графический пользовательский интерфейс.

Ниже перечислены три основных права доступа — по три буквы в каждом — которые информируют о текущих правах доступа. Они следуют в восьмеричном порядке: блок 1 обозначает «пользователя» или владельца, блок 2 — «группу», а блок 3 — «других». Внутри каждого блока порядок всегда один и тот же:

  • Первая цифра показывает, разрешен ли доступ на чтение (r).
  • Вторая цифра показывает, предоставлен ли доступ на запись (w)
  • И третья цифра означает, имеют ли определенные группы пользователей права на выполнение (x).

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

file1.txt

 

Пользователь

Группа

Другие

Читать

x

x

Запись

x

x

Выполнить

x

x

файл2.txt

 

Пользователь

Группа

Другие

Читать

Писать

x

Выполнить

x

x

x

каталог

 

Пользователь

Группа

Другие

Читать

Писать

x

x

Выполнить

пример chmod: добавление прав доступа

Чтобы продемонстрировать, как права доступа могут быть изменены для включения дополнительных классов пользователей, рассмотрим пример. Права на чтение и выполнение файла File1.txt в настоящее время принадлежат только владельцу. Для того чтобы разблокировать права доступа для всех остальных классов пользователей, необходимо использовать следующую команду chmod:

chmod a+rx file1.txt

Всем классам пользователей (a) предоставляются новые права (+) на чтение (r) и выполнение (x) файла file1.txt.

Чтобы просмотреть список прав пользователей, запись для файла file1.txt выглядит следующим образом:

-rwxr-xr-x  1 det det    0 2020-02-02 10:41 file1.txt

chmod пример: снятие прав пользователя

Во втором примере мы снимем права на запись в файл file2.txt для всех пользователей (включая владельца) с помощью следующей команды chmod:

chmod a-w file2.txt

Команда обращается ко всем классам пользователей (a) и снимает (-) их права на запись (w) для файла file2.txt. В итоге получается следующее:

-r--r--r--  1 det det    0 2020-02-02 10:41 file2.txt

Оцените статью
cdelat.ru
Добавить комментарий