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

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

Мария Богомаз
Мария Богомаз
Технический писатель
09 февраля 2024 г.
75
13 минут чтения
Средний рейтинг статьи: 5

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

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

Работа с командой: основы

Команда chmod в Linux расшифровывается как «change mode», что в переводе с английского означает «изменить режим». Эта команда предоставляет пользователям возможность тонко настроить систему разрешений для файлов и папок, определяя, какие именно операции, будь то чтение, запись или исполнение, будут доступны для отдельных категорий пользователей. Кроме того, команда chmod обладает функционалом для управления специальными битами, такими как setuid, setgid и sticky bit, что позволяет еще больше детализировать систему безопасности.

Независимо от того, какой дистрибутив Linux вы предпочитаете использовать, будь то Ubuntu, Debian, CentOS, Fedora, Arch Linux, отечественные Astra Linux, Alt Linux или любой другой из многочисленных вариантов, команда chmod будет следовать универсальным принципам работы, характерным для всех UNIX-подобных систем. 

Синтаксис команды представляет собой следующую структуру: 

chmod [опции] режим файл
  • опции — представляют собой вспомогательные параметры, которые позволяют расширять функциональность базовой команды. Они предоставляют пользователю возможность настроить выполнение команды, руководствуясь конкретными требованиями.

  • режим — представляет собой код, который определяет новый набор разрешений для выбранного файла или папки.

  • файл — это конкретное имя файла или папки, к которым будут применены изменения разрешений.

Опции

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

Опция

Описание

-c, --changes

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

-R, --recursive

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

-f, --silent, --quiet

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

-v, --verbose

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

--reference=RFILE

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

--preserve-root

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

--help

Выводит справочные сведения, включая список доступных опций и их описания. 

--version

Отображает сведения о версии команды chmod.

Пример применения рекурсивной команды chmod

chmod -R ugo+rX docs

После вызова этой команды все файлы и поддиректории внутри заданной директории (docs) будут обладать указанными правами доступа в Linux. Рекурсивность здесь означает, что эти изменения распространяются на все уровни вложенности. 

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

Режим

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

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

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

При использовании данной нотации, режим описывается при помощи следующих элементов:

  1. Тип пользователя: 

    • u (user) — владелец файла.

    • g (group) — группа владельца файла.

    • o (others) — остальные пользователи, не являющиеся владельцем и не входящие в группу владельца.

    • a (all) — удобное сокращение для одновременного обозначения всех трех предыдущих категорий; установка прав таким способом применяется к каждой категории пользователей. Таким образом, a+r эквивалентно ugo+r

  1. Оператор: 

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

    • - — применяется для удаления определенных битов из текущих прав доступа, ограничивая тем самым возможности пользователей.

    • = — добавляет указанные биты в качестве новых прав доступа к файлу и одновременно удаляет все биты, которые не были явно указаны в команде. 

  1. Права доступа могут быть интерпретированы следующим образом:

    • r (read) — обеспечивает возможность чтения содержимого файла, позволяя пользователю просматривать его содержимое.

    • w (write) — предоставляет разрешение на запись в файл, что позволяет пользователю вносить изменения в его содержимое. 

    • x (execute) — дает разрешение на исполнение файла, пользователь может запускать его в качестве программы или скрипта. 

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

    • s — устанавливает бит setuid (если применяется к файлу) или setgid (если применяется к директории). Если у файла установить такой бит, то при его выполнении пользователь, запустивший файл, получает временные привилегии владельца файла. Установка бита для директории не является стандартной практикой и в большинстве случаев не используется. 

    • t — устанавливает бит sticky для директории (наиболее часто используется для /tmp). Служит защитой от удаления или переименования файлов непривилегированными пользователями, которые не являются владельцами. 

Режимы могут комбинироваться для одновременного изменения нескольких прав доступа. Например, комбинация u=rwx,g=x,o=x устанавливает полный набор прав для владельца файла, в то время как группа владельца и прочие пользователи получают исключительно право на исполнение файла. 

Числовая нотация

Числовая нотация используется для установки прав доступа к файлам и директориям с использованием числовых значений вместо буквенных обозначений. Этот метод предоставляет более компактный и однозначный способ определения разрешений.

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

Цифры и их соответствие битам прав доступа: 

  • 4 (r) — право чтения.

  • 2 (w) — право записи.

  • 1 (x) — право выполнения.

Комбинируя эти значения, можно представить числа от 0 до 7, где каждая цифра представляет собой сумму соответствующих битов прав доступа. Каждый из этих битов может быть установлен в состояние «включено» (1) или «выключено» (0):

Число

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

0

отсутствие прав (---)

1

разрешено только исполнение (--x)

2

разрешена только запись (-w-)

3

разрешены запись и исполнение (-wx).

4

разрешено только чтение (r--)

5

разрешены чтение исполнение (r-x)

6

разрешены чтение и запись (rw-)

7

полные права (rwx)

При использовании команды chmod с числовым подходом, вы указываете три значения (XYZ), относящиеся к владельцу, группе владельца и остальным пользователям соответственно. 

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

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

Файл

В команде chmod, файл представляет собой указание имени файла или директории, к которым применяются изменения в разрешениях. Это может быть как отдельный файл, так и маска файлов (например, *txt для всех файлов с расширением .txt), а также несколько имен файлов, перечисленных через пробел. Действия команды chmod применяются именно к указанным файлам или директориям. 

Пример применения к файлу: 

chmod u+w file.txt

Пример применения прав доступа на папку (рекурсивно):

chmod -R ugo+rX directory

Пример применения для нескольких файлов: 

chmod 644 file1.txt file2.txt

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

Права в Linux

Прежде чем внести изменения в права доступа в Linux с chmod, полезно ознакомиться с существующими настройками разрешений, которые уже установлены для файлов и папок. Для этого в Linux можно использовать команду ls с опцией -l, которая предоставляет детальный список файлов, включая информацию о правах доступа. Это может быть полезно для выполнения различных операций с файлами и директориями. Пример использования команды:

ls -l

Этот пример выведет подобные строки:

-rw--w---- 1 user user 5678 Feb 15 14:45 document.docx
dr-x---r-- 3 user staff 8192 Feb 20 08:30 shared_folder

В этом выводе: 

  • Первая колонка (-rw--w---- или dr-x---r--) представляет собой строку, отражающую разрешения к файлу или директории. 

  • Префикс d в начале строки указывает на то, что это директория. 

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

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

Однако, при использовании такой команды, вы не увидите информацию о скрытых файлах, которые в Linux начинаются с точки. В таком случае вы можете использовать команду ls с опцией -a, которая выводит список файлов и директорий, включая скрытые:

ls -a

Если вам нужно просмотреть права для конкретного файла или директории, вы также можете использовать команду ls с указанием пути:

ls -l /path/to/file_or_directory

Например:

ls -l /home/user/documents

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

Мы уже знаем, что в Linux права доступа могут быть представлены не только в виде символов, но и в виде числовых значений. Для просмотра разрешений в числовом формате мы можем использовать команду stat с опцией --format '%a, за которой следует имя файла или директории. Например, если у нас есть файл secret_document.docx, мы можем использовать следующую команду: 

stat --format '%a' secret_document.docx

Результат будет числовым значением, которое представляет собой права доступа к файлу secret_document.docx

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

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

Как мы уже знаем, сделать это можно при помощи символьной и буквенной нотаций. Перейдем к примерам команды chmod в Linux.

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

Возможность владельца файла читать и записывать в него:

chmod u+rw confidential_diary.txt

Отмена права записи для группы:

chmod g-w shared_project_folder

Добавление права исполнения для всех остальных пользователей:

chmod o+x public_script.sh

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

chmod u=rw shared_notes.txt
  1. Числовая нотация

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

chmod 651 multimedia_folder

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

chmod 740 confidential_report.doc

Всем разрешено чтение и исполнение:

chmod 555 public_photos

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

chmod 376 important_script.sh
  1. Бит setuid

Назначить бит setuid для владельца файла:

chmod u+s binary_executable

Противоположность предыдущей команде, сбросить бит setuid:

chmod u-s comphope.txt
  1. Бит setgid

Назначить бит setgid для директории: 

chmod g+s project_folder
  1. Бит sticky

Назначить бит sticky для директории (часто используется для /tmp):

chmod +t /temporary_space
  1. Рекурсивное применение изменений

Назначить разрешения для всех файлов внутри директории confidential_data и ее поддиректорий:

chmod -R u=rw,g=r,o=r confidential_data
  1. Применение разрешений, скопированных из другого файла

Копировать разрешения из master_permissions.txt ко всем файлам и директориям внутри project_directory:

chmod --reference=master_permissions.txt -R project_directory
  1. Использование опций

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

chmod -v a=rX data_file.txt

Обеспечить тихий режим выполнения и изменить разрешения:

chmod -f u+rw sensitive_file.txt

Все эти примеры chmod в Linux демонстрируют различные сценарии использования команды. 

Заключение

В данной статье мы подробно рассмотрели команду chmod, которая является неотъемлемой частью управления правами доступа к файлам и директориям. 

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

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону