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

Доступ к файлам и каталогам — основа безопасности любой Linux-системы. Понимание того, кто и что может сделать с файлами (читать, править, запускать), позволяет избежать случайных удалений, утечек данных и проблем с целостностью системы. В этой статье мы подробно разберём стандартные права (r, w, x), команды chmod и chattr, числовые представления прав, рекурсивное применение, а также практические рекомендации, альтернативы и чек-листы для разных ролей.
Действия пользователей относительно файлов и директорий
В Linux разрешения разделены на три базовых действия:
- read (r) — просмотр списка каталога и чтение содержимого файла.
- write (w) — создание, изменение и удаление файлов или содержимого каталога.
- execute (x) — выполнение файла как программы или переход в каталог.
Краткое определение терминов:
- владелец — пользователь, которому принадлежит файл;
- группа — набор пользователей, ассоциированный с файлом;
- остальные — все прочие пользователи системы.
Вы можете увидеть права на файл через команду ls -l.
Пример строк прав:
- drwxr-xr-x — «d» означает директорию; далее идут три триады прав;
- -rw-r–r– — обычный файл с правами чтения и записи для владельца и чтением для группы и остальных.
Разделим буквы на группы по три, исключив префикс (например, d):
rwxr-xr-x = rwx r-x r-x
rw-r–r– = rw- r– r–
Первая триада — права владельца, вторая — права группы, третья — права остальных.
Важно:
- 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. Сумма соответствующих чисел даёт число для каждой триады (владелец/группа/остальные).
| Право | r | w | x |
|---|---|---|---|
| Число | 4 | 2 | 1 |
Примеры:
- chmod 700 file — владелец: 4+2+1=7 (rwx), группа: 0, остальные: 0;
- chmod 724 file — владелец: 7 (rwx), группа: 2 (w), остальные: 4 (r).
Применение прав рекурсивно с -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, чтобы права вступили в силу для всех вложенных объектов.
Защита от случайного удаления: chattr и immutable
Если файл критически важен и вы хотите защитить его от изменений и удаления, используйте chattr. Флаг +i (immutable) запрещает изменение или удаление файла, даже если у пользователя есть права записи.
Список атрибутов можно увидеть через 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 эффективен на файловых системах ext2/3/4 и некоторых других; не все файловые системы поддерживают все атрибуты.
Когда стандартных прав недостаточно и альтернативы
ACL (Access Control Lists)
- для тонкой настройки прав используйте setfacl/getfacl. ACL позволяют задавать права для конкретных пользователей и групп, а не только для владельца/группы/остальных.
- пример: setfacl -m u:alice:rw file — дать пользователю alice права чтения и записи.
Возможные ограничения и ситуации, когда chmod не решает задачу:
- когда нужно дать доступ конкретному пользователю, не входящему в группу владельца — используйте ACL;
- когда файловая система не поддерживает атрибут immutable — chattr не сработает;
- когда доступ регулируется на уровне приложения/контейнера (например, SELinux, AppArmor, контейнерные политики), права POSIX могут быть недостаточны.
SELinux/AppArmor
- для жесткой изоляции используйте профили SELinux или AppArmor в дополнение к правам файловой системы.
Ментальные модели и эвристики
- Представляйте права как три бита (4/2/1) для каждой роли — это упрощает преобразование в числа.
- Думайте о правах на каталоги: x без r даёт возможность войти в каталог, но не перечислить его содержимое; r без x позволяет видеть список, но не заходить в подпапки.
- Принцип наименьших привилегий: давайте минимально необходимые права пользователю/процессу.
Чек-листы для ролей
Администратор:
- проверить umask сервера для новых файлов;
- установить минимально необходимые права для сервисных файлов;
- защищать конфигурационные файлы chattr +i, где это обосновано;
- использовать ACL для сложных сценариев доступа;
- audit: логировать изменения прав для критичных директорий.
Разработчик:
- не давать 777 для промежуточных директорий в проде;
- локально тестировать изменение прав и их влияние на исполнение скриптов;
- избегать запуска приложений от root без необходимости.
Пользователь:
- храните личные данные с корректными правами (700 или 600);
- если нужно расшарить файл — используйте группы или ACL вместо 777.
Безопасное применение изменений — практический SOP
- Оцените текущие права: ls -l, getfacl для проверки ACL.
- Выпишите желаемый результат: кто должен иметь доступ и какие права.
- Примените изменения сначала к тестовой копии или в staging.
- Используйте chmod/ setfacl с минимальными изменениями (не применяйте chmod -R / на корень без проверки).
- После применения проверьте работоспособность сервисов и доступность файлов.
- При необходимости зафиксируйте ключевые файлы 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).
Похожие материалы
Показать активность диска в Dock — Activity Monitor
Как настроить Single Sign‑On на Apple TV
Форматирование диска в Ubuntu — пошагово
Агрегационный pipeline в MongoDB — руководство
Горячие клавиши Zoom — руководство и шпаргалка