Гид по технологиям

Права доступа в Linux: чтение, запись, выполнение, chmod и chattr

7 min read Linux Обновлено 23 Dec 2025
Права доступа в Linux: chmod и chattr
Права доступа в Linux: chmod и chattr

Заблокированный ноутбук с кодом

Доступ к файлам и каталогам — основа безопасности любой Linux-системы. Понимание того, кто и что может сделать с файлами (читать, править, запускать), позволяет избежать случайных удалений, утечек данных и проблем с целостностью системы. В этой статье мы подробно разберём стандартные права (r, w, x), команды chmod и chattr, числовые представления прав, рекурсивное применение, а также практические рекомендации, альтернативы и чек-листы для разных ролей.

Действия пользователей относительно файлов и директорий

В Linux разрешения разделены на три базовых действия:

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

Краткое определение терминов:

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

Вы можете увидеть права на файл через команду ls -l.

Вывод команды ls -l с примерами прав

Пример строк прав:

  • drwxr-xr-x — «d» означает директорию; далее идут три триады прав;
  • -rw-r–r– — обычный файл с правами чтения и записи для владельца и чтением для группы и остальных.

Разделим буквы на группы по три, исключив префикс (например, d):

rwxr-xr-x = rwx r-x r-x

rw-r–r– = rw- r– r–

Первая триада — права владельца, вторая — права группы, третья — права остальных.

Схема группировки прав rwx для владельца, группы и остальных

Важно:

  • r — право чтения;
  • w — право записи (изменения и удаления);
  • x — право выполнения или доступа в каталог.

Изменение прав с помощью chmod

Только владелец файла или root могут изменять его права (за исключением специальных ситуаций). Команда chmod управляет правами в двух основных формах: символьной и числовой. Символьные параметры:

  • u — владелец (user);
  • g — группа (group);
  • o — остальные (others);
  • a — все (all);
  • = — установить права точно;
    • — добавить право;
    • — убрать право.

Примеры (символьный синтаксис):

  • chmod u+w file — добавить право записи владельцу;
  • chmod g+r file — добавить право чтения группе;
  • chmod o-x file — убрать право выполнения у остальных;
  • chmod a-rwx file — удалить все права у всех пользователей.

Практический пример. Предположим, текущее содержимое каталога и права выглядят так:

ls -l
total 4
---------- 1 root root    0 Apr 25 16:20 example.txt
---------- 1 root root    0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root    0 Apr 25 16:20 ex_Text

Добавим право записи всем объектам в текущей директории:

chmod +w *

После этого вывод может выглядеть так:

ls -l
total 4
--w-r-x--- 1 root root    0 Apr 25 16:20 example.txt
--w-r-x--- 1 root root    0 Apr 25 16:21 ex_File
d-w-r-x--- 2 root root 4096 Apr 25 16:21 ex_Folder
--w-r-x--- 1 root root    0 Apr 25 16:20 ex_Text

Далее назначим группе rwx, владельцу w и остальным только x:

chmod g+rwx,u+w,o+x *

Результат:

ls -l
total 4
--w-rwx--x 1 root root    0 Apr 25 16:20 example.txt
--w-rwx--x 1 root root    0 Apr 25 16:21 ex_File
d-w-rwx--x 2 root root 4096 Apr 25 16:21 ex_Folder
--w-rwx--x 1 root root    0 Apr 25 16:20 ex_Text

Полное снятие прав у всех:

chmod a-rwx *

После чего файлы снова будут без прав:

ls -l
total 4
---------- 1 root root    0 Apr 25 16:20 example.txt
---------- 1 root root    0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root    0 Apr 25 16:20 ex_Text

Важно: будьте осторожны при применении chmod к множеству файлов (особенно с root) — неправильные права могут сделать систему или сервисы недоступными.

Числовые права (octal)

Три вида разрешений можно представить числами: r=4, w=2, x=1. Сумма соответствующих чисел даёт число для каждой триады (владелец/группа/остальные).

Правоrwx
Число421

Примеры:

  • chmod 700 file — владелец: 4+2+1=7 (rwx), группа: 0, остальные: 0;
  • chmod 724 file — владелец: 7 (rwx), группа: 2 (w), остальные: 4 (r).

Иллюстрация использования chmod 700 для установки rwx только владельцу

Пример вывода прав после назначения 724 владельцу/группе/остальным

Применение прав рекурсивно с -R

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

chmod -R 422 ex_Folder

Перед этим можно посмотреть содержимое каталога:

ls -l
total 4
---------- 1 root root    0 Apr 25 16:20 example.txt
-rwx-w-r-- 1 root root    0 Apr 25 16:21 ex_File
d--------- 2 root root 4096 Apr 25 16:21 ex_Folder
---------- 1 root root    0 Apr 25 16:20 ex_Text

Зайдём в каталог ex_Folder и затем применим chmod -R, чтобы права вступили в силу для всех вложенных объектов.

Содержимое ex_Folder перед рекурсивным применением прав

Применение chmod -R и результат изменения прав

Защита от случайного удаления: chattr и immutable

Если файл критически важен и вы хотите защитить его от изменений и удаления, используйте chattr. Флаг +i (immutable) запрещает изменение или удаление файла, даже если у пользователя есть права записи.

Список атрибутов можно увидеть через lsattr:

Вывод lsattr с примерами атрибутов файлов

Сделаем файл main.cpp неизменяемым:

chattr +i main.cpp

После этого в выводе lsattr для этого файла появится символ i — он защищён от изменений. Попытка удалить его приведёт к ошибке:

rm -rf main.cpp
rm: cannot remove 'main.cpp': Operation not permitted

Чтобы снять защиту и вернуть возможность редактирования:

chattr -i main.cpp

Пример применения chattr +i к main.cpp с выводом lsattr

Совет: chattr эффективен на файловых системах ext2/3/4 и некоторых других; не все файловые системы поддерживают все атрибуты.

Когда стандартных прав недостаточно и альтернативы

  1. ACL (Access Control Lists)

    • для тонкой настройки прав используйте setfacl/getfacl. ACL позволяют задавать права для конкретных пользователей и групп, а не только для владельца/группы/остальных.
    • пример: setfacl -m u:alice:rw file — дать пользователю alice права чтения и записи.
  2. Возможные ограничения и ситуации, когда chmod не решает задачу:

    • когда нужно дать доступ конкретному пользователю, не входящему в группу владельца — используйте ACL;
    • когда файловая система не поддерживает атрибут immutable — chattr не сработает;
    • когда доступ регулируется на уровне приложения/контейнера (например, SELinux, AppArmor, контейнерные политики), права POSIX могут быть недостаточны.
  3. SELinux/AppArmor

    • для жесткой изоляции используйте профили SELinux или AppArmor в дополнение к правам файловой системы.

Ментальные модели и эвристики

  • Представляйте права как три бита (4/2/1) для каждой роли — это упрощает преобразование в числа.
  • Думайте о правах на каталоги: x без r даёт возможность войти в каталог, но не перечислить его содержимое; r без x позволяет видеть список, но не заходить в подпапки.
  • Принцип наименьших привилегий: давайте минимально необходимые права пользователю/процессу.

Чек-листы для ролей

Администратор:

  • проверить umask сервера для новых файлов;
  • установить минимально необходимые права для сервисных файлов;
  • защищать конфигурационные файлы chattr +i, где это обосновано;
  • использовать ACL для сложных сценариев доступа;
  • audit: логировать изменения прав для критичных директорий.

Разработчик:

  • не давать 777 для промежуточных директорий в проде;
  • локально тестировать изменение прав и их влияние на исполнение скриптов;
  • избегать запуска приложений от root без необходимости.

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

  • храните личные данные с корректными правами (700 или 600);
  • если нужно расшарить файл — используйте группы или ACL вместо 777.

Безопасное применение изменений — практический SOP

  1. Оцените текущие права: ls -l, getfacl для проверки ACL.
  2. Выпишите желаемый результат: кто должен иметь доступ и какие права.
  3. Примените изменения сначала к тестовой копии или в staging.
  4. Используйте chmod/ setfacl с минимальными изменениями (не применяйте chmod -R / на корень без проверки).
  5. После применения проверьте работоспособность сервисов и доступность файлов.
  6. При необходимости зафиксируйте ключевые файлы chattr +i и документируйте причину.

Частые ошибки и как их избегать

  • Ошибка: chmod -R 777 /some/dir — риск безопасности. Решение: задайте конкретные права и проверьте, какие сервисы требуют каких прав.
  • Ошибка: ожидать, что chattr защитит файл от root — root может снять атрибут (chattr -i), поэтому chattr полезен против невнимательных пользователей, но не против привилегированных администраторов.
  • Ошибка: путаница между правами на файл и правами на каталог. Помните: для доступа к файлу нужны права x на все родительские каталоги.

Факты — быстрые числа

  • Типов базовых разрешений: 3 (r, w, x).
  • Числовые значения: r=4, w=2, x=1 — суммируются до числа 0–7 для каждой триады.
  • Формат chmod: chmod [recurse -R]

Краткая шпаргалка команд

  • Просмотр прав: ls -l
  • Просмотр атрибутов: lsattr
  • Установить права символьно: chmod u+r,g-w file
  • Установить права числами: chmod 644 file
  • Рекурсивно: chmod -R 750 dir
  • Установить immutable: chattr +i file
  • Снять immutable: chattr -i file
  • ACL: setfacl -m u:username:rw file; getfacl file

Критерии приёмки

  • Доступы соответствуют политике безопасности (принцип наименьших привилегий).
  • В сервисах нет ошибок запуска после изменения прав.
  • Критичные файлы защищены и документированы.
  • Логи подтверждают ожидаемое изменение прав.

Конец: почему это важно

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

Важно: перед массовым изменением прав всегда делайте резервные копии и тестируйте изменения в безопасной среде.

Краткое резюме в двух строках: chmod управляет видимостью и действиями над файлами через символьные и числовые режимы; chattr делает файл неизменяемым. Для сложных правил используйте ACL и дополнительные механизмы (SELinux/AppArmor).

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Показать активность диска в Dock — Activity Monitor
macOS

Показать активность диска в Dock — Activity Monitor

Как настроить Single Sign‑On на Apple TV
Руководство

Как настроить Single Sign‑On на Apple TV

Форматирование диска в Ubuntu — пошагово
Linux

Форматирование диска в Ubuntu — пошагово

Агрегационный pipeline в MongoDB — руководство
Базы данных

Агрегационный pipeline в MongoDB — руководство

Горячие клавиши Zoom — руководство и шпаргалка
Продуктивность

Горячие клавиши Zoom — руководство и шпаргалка

Регистрация пользователей на Python с SQLite
Python

Регистрация пользователей на Python с SQLite