uz
KA
июня 23, 2025
Обновлено июня 23, 2025

Chmod, что это такое и как использовать?

Linux

Семейство дистрибутивов Linux в основном являются многозадачными и многопользовательскими операционными системами, что изначально подразумевает требование к разграничению прав пользователей. Для этого в ОС существует ряд утилит, которые в соответствии со стандартом POSIX позволяют разграничить права, используя дискреционную модель доступа. Одной из таких является chmod, рассмотрим принцип работы модели доступа и роль утилиты в ней.

Что такое chmod и дискреционная модель Linux?

Chmod – это стандартная утилита OC Linux, которая устанавливает права доступа для файлов и папок, позволяя определить порядок доступа к ресурсу от различных пользователей. Как упоминалось ранее в основе многих дистрибутивов Linux лежит дискреционная модель разграничения доступа. Это значит, что каждый файл и директория имеет свой список атрибутов: владелец, группа и список прав для трех категорий пользователей ОС. Рассмотрим на примере, создадим «секретную директорию» и файлы к ней командами:

mkdir -p /tmp/Secret-folder
touch /tmp/Secret-folder/gg
touch /tmp/Secret-folder/gt

И сразу просмотрим стандартные атрибуты, которые выдаст ОС:

ls -la /tmp/Secret-folder
Права доступа по умолчанию
Скриншот №1 — Права доступа по умолчанию

Слева от отобразившихся файлов и директорий, можно видеть совокупность их атрибутов, где на примере файла gg:

  • -rw-r–r– права доступа к файлу;
  • root root запись указывает на владельца и группу;
  • jul 9 06:10 отображает время последнего открытия/модификации файла.

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

Права владельца
Скриншот №2 — Тип объекта

Так же на месте данного бита могут находиться SUID и GUID значения, которые позволяют запускать файл от лица его владельца/группы владельца, а не те которые предоставит пользователь. Данное решение позволяет временно выдать права, однако, категорически не рекомендуется к использованию! Так как отсутствует система разграничения привилегий,  лучше использовать sudo для этих целей.

Права группы владельца
Скриншот №3 — Права владельца

Затем идут права владельца файла, которые разрешают использовать файл на чтение и запись, однако, владелец или root в праве всегда изменить свой уровень доступа до файла или/и директории.

Права группы владельца
Скриншот №4 — Права группы владельца

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

Права остальных пользователей
Скриншот №5 — Права остальных пользователей

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

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

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

Схема директории и файлов
Скриншот №6 — Схема директории и файлов

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

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

chmod 664 /Minfin2/gg
Результат изменений
Скриншот №7 — Результат изменений

Что значат цифры 664? Было решено, что каждое право в триплете будет иметь численное обозначение:

  • 4 – это read или же чтение;
  • 2 – это write или же запись, удаление, создание объектов;
  • 1 – это execute или же исполнение, скриптов, бинарных файлов.

Каждая цифра это сумма прав для одной группы триплета, первая 6 это rw для владельца, вторая 6 для группы и последняя 4 read для остальных. Таким образом, 664 эквивалентно rw-rw-r– атрибутам файла. Попробуем от другого пользователя группы владельца удалить файл gg, параметр w доступа на файле разрешает это сделать. Но мы ловим ошибку error permission denied:

Отказ доступа
Скриншот №8 — Отказ доступа

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

chmod 775 /Minfin2 && rm /Minfin2/gg
Удаление файла
Скриншот №9 — Удаление файла

И успех! Файл был удален, благодаря, тому что были верно предоставлены права до самого файла и директории, в которой он хранится. Если цифры не совсем подходящий форма для управления, то можно использовать символы. К примеру, для владельца предоставим полный набор, группе и остальным триплет r-x:

chmod ugo-rwx /Minfin2/gg && chmod u+rwx /Minfin2/gg && chmod /Minfin2/gg go+rx

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

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

Создание сервераСкриншот №10 — Создание сервера

Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...