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

Из-за архитектуры систем Linux контроль доступа к файлам и каталогам реализован через набор разрешений и дополнительных механизмов. Только пользователь root по умолчанию обладает полными правами. Поэтому, работая как root, предупреждения системы часто игнорируются, а случайные изменения могут привести к серьёзным проблемам. Понимание прав доступа необходимо каждому пользователю и администратору Linux.
Какие действия доступны пользователям в отношении файлов и каталогов
Пользователь может действовать в рамках присвоенных ему прав. Для файлов и каталогов существуют три базовых типа прав:
- Чтение (read, r): просмотр списка каталога и содержимого файлов.
- Запись (write, w): изменение содержимого файла или модификация каталога (создание/удаление файлов в каталоге).
- Выполнение (execute, x): запуск исполняемого файла или возможность войти в каталог и выполнять поиск по нему.
Если вы знакомы с chmod и системой прав Linux, эти понятия вам уже знакомы.
Чтобы посмотреть текущие права, используйте команду 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 принимает числовые режимы. Каждое право имеет числовой вес:
| Владелец | Группа | Остальные | |
|---|---|---|---|
| r | 4 | 4 | 4 |
| w | 2 | 2 | 2 |
| x | 1 | 1 | 1 |
Суммируйте значения для каждой из тройек. Например, полный набор прав rwx = 4+2+1 = 7. Если нужно дать владельцу все права, а группе и остальным — ничего, используйте 700:
chmod 700 fileПримеры часто используемых режимов:
- 755 — владелец rwx, группа r-x, остальные r-x (обычно для исполняемых директорий и программ)
- 644 — владелец rw-, группа r–, остальные r– (часто для текстовых файлов)
- 600 — владелец rw-, никто другой не имеет прав (файлы с конфигурацией)

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

Рекурсивное применение прав
Чтобы изменить права в каталоге и во всех его подкаталогах и файлах, используйте флаг -R.
Например, если каталог ex_Folder изначально не имеет прав, войдите в родительский каталог и выполните:
chmod -R 422 ex_FolderЭто применит режим 422 ко всем элементам внутри ex_Folder (включая подпапки и файлы).

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

Чтобы сделать файл неизменяемым:
chattr +i main.cppВ выводе lsattr появится буква i, означающая, что файл защищён от изменений. Попытка удалить файл вернёт ошибку:
rm -rf main.cpp
rm: cannot remove 'main.cpp': Operation not permittedЧтобы снять атрибут:
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 для более глубокой настройки.
Похожие материалы
Как разделить меш в Blender
Как увеличить изображение без потери качества
Как создать влог на iPhone — полное руководство
Как отразить экран на телевизор — все способы
Бесконечная прокрутка в Vue 3 — useInfiniteScroll