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

Права доступа в Linux — chmod, chattr и практические примеры

8 min read Linux Обновлено 26 Apr 2026
Права доступа в Linux — chmod, chattr, примеры
Права доступа в Linux — chmod, chattr, примеры

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

Из-за архитектуры систем Linux контроль доступа к файлам и каталогам реализован через набор разрешений и дополнительных механизмов. Только пользователь root по умолчанию обладает полными правами. Поэтому, работая как root, предупреждения системы часто игнорируются, а случайные изменения могут привести к серьёзным проблемам. Понимание прав доступа необходимо каждому пользователю и администратору Linux.

Какие действия доступны пользователям в отношении файлов и каталогов

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

  • Чтение (read, r): просмотр списка каталога и содержимого файлов.
  • Запись (write, w): изменение содержимого файла или модификация каталога (создание/удаление файлов в каталоге).
  • Выполнение (execute, x): запуск исполняемого файла или возможность войти в каталог и выполнять поиск по нему.

Если вы знакомы с chmod и системой прав Linux, эти понятия вам уже знакомы.

Чтобы посмотреть текущие права, используйте команду ls -l.

вывод ls -l с правами файлов

В выводе вы увидите строки вида drwxr-xr-x или -rw-r–r–. Буква d в начале означает каталог, дефис — обычный файл. Остальная часть разделяется на тройки символов:

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

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

Первая тройка — права владельца файла, вторая — права группы, третья — права остальных пользователей (others).

иллюстрация группировки прав в тройки

Обозначения:

  • r — право на чтение
  • w — право на запись
  • x — право на выполнение или вход в каталог
  • rwx — владелец может читать, писать и выполнять
  • r-x — другие пользователи могут читать и выполнять, но не писать

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

Только владелец файла (в некоторых случаях root) может менять права. Основная команда для этого — chmod.

Короткие символы и их значения:

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

Рассмотрим практический пример. Создайте папку с несколькими файлами и используйте ls -l для просмотра. Предположим, что вывод выглядит так (сохранён оригинальный формат вывода):

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  

Чтобы добавить право записи (w) для всех файлов в текущей директории, используем подстановочный символ * и команду:

chmod +w *

После выполнения ls -l вы увидите, что к соответствующим местам добавилось право записи:

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 принимает числовые режимы. Каждое право имеет числовой вес:

ВладелецГруппаОстальные
r444
w222
x111

Суммируйте значения для каждой из тройек. Например, полный набор прав rwx = 4+2+1 = 7. Если нужно дать владельцу все права, а группе и остальным — ничего, используйте 700:

chmod 700 file

Примеры часто используемых режимов:

  • 755 — владелец rwx, группа r-x, остальные r-x (обычно для исполняемых директорий и программ)
  • 644 — владелец rw-, группа r–, остальные r– (часто для текстовых файлов)
  • 600 — владелец rw-, никто другой не имеет прав (файлы с конфигурацией)

пример использования chmod 700

Пример: владелец — все права, группа — только запись (2), остальные — только чтение (4). Это код 724.

пример использования chmod 724

Рекурсивное применение прав

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

Например, если каталог ex_Folder изначально не имеет прав, войдите в родительский каталог и выполните:

chmod -R 422 ex_Folder

Это применит режим 422 ко всем элементам внутри ex_Folder (включая подпапки и файлы).

пример использования chmod -R

Лучшая защита от случайного удаления: chattr

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

пример вывода lsattr

Чтобы сделать файл неизменяемым:

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

Важно: chattr работает только на файловых системах, которые поддерживают атрибуты (ext4, ext3 и т.п.). На некоторых сетевых и неUNIX-подобных системах эти атрибуты недоступны.

Контекст безопасности: SELinux и ACL

Стандартные rwx-права покрывают базовые сценарии, но существуют дополнительные механизмы:

  • ACL (Access Control Lists) позволяют задать более гибкие, отдельные права для пользователей и групп (getfacl / setfacl).
  • SELinux / AppArmor управляют политиками доступа на более высоком уровне, добавляют контексты и ограничения, которые не видны в выводе ls -l.

Если вы работаете в окружении с SELinux, изменения chmod могут не дать ожидаемого результата без коррекции контекстов (chcon) или политики.

Когда описанные методы не сработают

  • Файловая система не поддерживает UNIX-права (например, FAT32, exFAT) — rwx не применимы.
  • На NFS-серверах может быть включён root_squash, и права root локально не соответствуют реальным правам на сервере.
  • SELinux/AppArmor или PAM-ограничения могут блокировать доступ независимо от rwx.
  • ACL уже настроены и имеют приоритет для отдельных пользователей — простое chmod не заменит ACL.

Альтернативные подходы

  • Используйте setfacl/getfacl для точных правил доступа к отдельным пользователям.
  • Настройте SELinux/ AppArmor профили для строгой изоляции сервисов.
  • Для временной защиты от удаления используйте резервное копирование и snapshotы (LVM, btrfs, ZFS).
  • Используйте механизмы управления учётными записьми и sudo вместо работы под root.

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

  • Думайте в терминах минимальных прав — давайте только то, что нужно «по делу».
  • Владелец = person/process, группа = команда/служба, остальные = общественный доступ.
  • Для исполняемых каталогов чаще 755, для конфигурации — 600 или 640, для документов — 644.

Фактбокс: ключевые числа

  • r = 4, w = 2, x = 1
  • rwx = 7, rw- = 6, r-x = 5, r– = 4, -wx = 3
  • Частые режимы: 700, 755, 644, 600, 422

Чеклист по ролям

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

  • Проверить, какие файлы принадлежат root и почему.
  • Убедиться, что системные каталоги имеют корректные права (например, /etc 755, /root 700).
  • Настроить резервное копирование перед массовыми chmod -R.

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

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

Аудитор по безопасности:

  • Ищите world-writable файлы: find / -type f -perm -o+w
  • Проверяйте наличие immutable-файлов chattr +i и документируйте их необходимость.

Шпаргалка команд

  • Просмотр прав: ls -l
  • Символьное изменение: chmod g+rwx,u+w,o+x file
  • Числовое изменение: chmod 755 file
  • Рекурсивно: chmod -R 644 dir/
  • Просмотр ACL: getfacl file
  • Установка ACL: setfacl -m u:alice:rwx file
  • Просмотр атрибутов: lsattr file
  • Установка immutable: chattr +i file

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

  • Права файлов соответствуют назначению: системные файлы защищены, исполняемые файлы имеют x там, где нужно.
  • Для конфиденциальных данных права ограничены (например, 600 или ACL).
  • После внесения изменений проверен доступ с учётными записями пользователей и из сервисов.

Тесты и соглашения проверки

  • Выполнить ls -l и убедиться в ожидаемом режиме.
  • Для имитации доступа: sudo -u cat file или попытка rm файла для проверки защиты chattr.
  • Проверить ACL: getfacl file должно показывать ожидаемые записи.

Безопасность и рекомендации

  • Не работайте под root без необходимости. Используйте sudo для администрирования.
  • Избегайте world-writable файлов в публичных местах.
  • Перед использованием chattr +i документируйте и резервируйте файлы; immutable делает обновления неудобными.
  • Сочетайте права UNIX с политиками SELinux и ACL для многослойной защиты.
  • Логи изменений прав и аудита помогут восстановить причины инцидентов.

Важно: chattr и chmod изменяют локальные атрибуты файловой системы — используйте с осторожностью на production-системах.

Краткий глоссарий

  • chmod — утилита для изменения прав доступа к файлам.
  • chattr — утилита для изменения расширенных атрибутов файла (например, immutable).
  • lsattr — показывает расширенные атрибуты файлов.
  • ACL — расширенные списки контроля доступа для тонких настроек прав.
  • SELinux — подсистема контроля доступа на основе политик и контекстов.

Кому и когда следует использовать описанные инструменты

  • Малые проекты и 개인ные файлы: chmod + правильные режимы (600/644) обычно достаточно.
  • Сервера и продакшн: комбинируйте chmod, ACL и SELinux; автоматизируйте проверку прав.
  • Сетевые хранилища: убедитесь в поддержке UNIX-прав и особенностях NFS.

Заключение

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

Дополнительные материалы: используйте man chmod, man chattr, man getfacl и документацию по SELinux для более глубокой настройки.

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

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

Как разделить меш в Blender
3D моделирование

Как разделить меш в Blender

Как увеличить изображение без потери качества
Фото

Как увеличить изображение без потери качества

Как создать влог на iPhone — полное руководство
Видео

Как создать влог на iPhone — полное руководство

Как отразить экран на телевизор — все способы
Руководство

Как отразить экран на телевизор — все способы

Бесконечная прокрутка в Vue 3 — useInfiniteScroll
Vue

Бесконечная прокрутка в Vue 3 — useInfiniteScroll

Чёрный экран iPhone: как восстановить устройство
iPhone

Чёрный экран iPhone: как восстановить устройство