Полное руководство по команде chmod в Linux

Введение

Безопасность файловой системы в дистрибутивах Linux держится на строгой системе разграничения доступа, ключевым инструментом которой выступает утилита chmod. В этой статье мы детально разберем внутреннюю логику прав пользователей, сопоставим цифровой формат (маски вроде 755 и 644) с символьной нотацией (rwx), а также закрепим теорию наглядными примерами выполнения команд в терминале.

1. Модель доступа к файлам и чтение атрибутов с помощью ls -l

Для безопасных экспериментов с атрибутами доступа подготовим изолированную рабочую директорию и перейдем в нее:

mkdir -p ~/chmod_demo && cd ~/chmod_demo

Создание тестовой папки и переход в нее

Сгенерируем пустой тестовый документ командой touch sample.txt, над которым будем проводить последующие манипуляции:

Создание пустого файла sample.txt

Чтобы изучить текущие параметры доступа и метаданные созданного объекта, вызовем детальный просмотр через ls -l sample.txt.
Строка атрибутов в начале вывода (-rw-r--r--) состоит из 10 позиций: начальный дефис указывает на стандартный файл, а последующие блоки по три символа регламентируют права для владельца (чтение и запись), группы-владельца (только чтение) и всех остальных пользователей системы (только чтение).
⚙️ [Полезные ключи утилиты ls]

-l : формирует расширенный листинг с подробной информацией (права доступа, владелец, группа, размер, временная метка модификации).
-a : отображает полный список элементов, не скрывая конфигурационные файлы с точкой в начале имени.
-h : форматирует размер файлов в удобный для восприятия вид (КБ, МБ, ГБ) при совместном использовании с -l.
-d : выводит свойства самого каталога, предотвращая разворачивание его содержимого.
-R : производит рекурсивный обход структуры каталогов, включая все вложенные ветки и файлы.

Детальный просмотр атрибутов через ls -l

2. Управление правами через восьмеричную систему счисления (chmod 644, 755)

Убедимся, что текущая сессия терминала открыта в нашей тренировочной директории ~/chmod_demo:

cd ~/chmod_demo

Переход в каталог chmod_demo

Назначим владельцу максимальные привилегии (чтение 4 + запись 2 + выполнение 1 = 7), а для группы и сторонних пользователей ограничимся запуском и просмотром (чтение 4 + выполнение 1 = 5), выполнив команду chmod 755 sample.txt:

Применение маски прав 755 к файлу

Проверим результат трансформации прав утилитой ls -l sample.txt.
Атрибуты приняли вид -rwxr-xr-x: сегмент владельца трансформировался в rwx, а позиции группы и остальных учетных записей теперь содержат флаг r-x, подтверждая добавление бита исполнения (x).

Контроль обновленных атрибутов файла

Вернем файл к типовой конфигурации для обычных текстовых документов, предоставив владельцу чтение и запись (6), а остальным участникам системы — исключительно просмотр (4 для группы, 4 для остальных):

chmod 644 sample.txt

Возврат прав к базовой маске 644

Выполним повторный опрос статуса файла через ls -l sample.txt.
Строка прав вернулась к значению -rw-r--r--: бит запуска снят со всех категорий пользователей, сохранены лишь операции чтения и модификации.

Проверка возврата прав 644 в терминале

3. Точечная корректировка прав с применением символьного синтаксиса

Для отработки модификаций без пересчета числовых масок снова вернемся в рабочий каталог ~/chmod_demo:

cd ~/chmod_demo

Переход в рабочее пространство

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

echo '#!/bin/bash\necho "Hello Linux"' > test.sh

Создание скрипта test.sh

Чтобы разрешить запуск сценария абсолютно всем (владельцу, участникам группы и прочим пользователям), добавим бит исполнения лаконичной инструкцией chmod +x test.sh:

Добавление флага исполнения через chmod +x

Проинспектируем новое состояние файла посредством ls -l test.sh.
Формат -rwxr-xr-x в консоли свидетельствует о том, что исполняемый статус (x) успешно внедрен для всех уровней доступа.

Подтверждение наличия флага исполнения

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

chmod g-w,o-r test.sh

Комбинированное удаление прав через запятую

Оценим изменения при помощи ls -l test.sh.
Маска приняла вид -rwxr-x--x: группа потеряла возможность записи, а у категории others отобрали право на чтение (r), оставив только прямой запуск.

Итоговая проверка прав после символьной настройки

4. Групповое рекурсивное изменение прав каталогов и файлов (флаг -R)

Смоделируем типовую рабочую среду с вложенными подкаталогами проекта и системных журналов:

mkdir -p ~/chmod_demo/project/logs

Развертывание вложенных каталогов проекта

Наполним созданную структуру тестовым скриптом Python и журнальным файлом:

touch ~/chmod_demo/project/app.py ~/chmod_demo/project/logs/app.log

Генерация тестовых файлов внутри проекта

Применим опцию рекурсивной обработки -R, чтобы каскадно распространить профиль безопасности 750 на каталог project, его поддиректории и все вложенные файлы:

chmod -R 750 ~/chmod_demo/project

Эта команда выдает полный контроль (7) автору, оставляет права на чтение и навигацию (5) группе и наглухо блокирует любой доступ (0) для всех посторонних пользователей.

Каскадное применение прав через ключ -R

Убедимся в корректности прав самого корневого каталога с помощью ls -ld ~/chmod_demo/project:

Анализ прав каталога project через ls -ld

Индикация drwxr-x--- подтверждает успешную изоляцию: владельцу назначено rwx, группе — r-x, а внешним учетным записям доступ закрыт (---).

Наконец, проверим глубину распространения правил внутри структуры командой ls -l ~/chmod_demo/project:

Проверка прав вложенных объектов проекта

Скрипт app.py и папка logs получили соответствующие уровни доступа (-rwxr-x--- и drwxr-x---), что доказывает надежность каскадного переопределения через ключ -R.


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