Работа с правами доступа в Linux: chmod, chown, umask

Обзор системы прав доступа в Linux

Система управления правами доступа в Linux — это фундаментальный механизм обеспечения безопасности, разделения ресурсов и контроля над файлами и процессами. В основе лежат три ключевых компонента: команды `chmod`, `chown` и переменная `umask`. В 2025 году, несмотря на появление дополнительных моделей безопасности (например, SELinux, AppArmor), базовые механизмы POSIX-прав остаются актуальными, особенно в контейнеризированных и виртуализированных средах.

Каждый файл в Linux ассоциирован с владельцем (user), группой (group) и набором прав (permissions), которые определяют, кто может читать, записывать или выполнять файл. Эти права задаются для трёх категорий: владельца, группы и остальных пользователей. Основная модель доступа — это система rwx-флагов, где `r` — чтение, `w` — запись, `x` — выполнение.

Команда chmod: управление правами доступа

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

Пример восьмеричного способа:
«`bash
chmod 755 script.sh
«`
Означает:
— Владельцу — чтение, запись, выполнение (`7 = 4+2+1`)
— Группе — чтение, выполнение (`5 = 4+0+1`)
— Остальным — чтение, выполнение (`5`)

Пример символьного способа:
«`bash
chmod u+x file.txt
«`
Добавляет владельцу (`u`) право на выполнение (`+x`).

Текстовая диаграмма прав:

«`
-rwxr-xr— 1 user group filename
│ │ │ │ │ │ │
│ │ │ │ │ │ └── группа, владеющая файлом
│ │ │ │ │ └──────── владелец
│ │ │ │ └─────────── количество жёстких ссылок
│ │ │ └──────────────── права «остальных»: r—
│ │ └────────────────── права группы: r-x
│ └───────────────────── права владельца: rwx
└─────────────────────── тип объекта: — (файл), d (каталог)
«`

Современные тенденции — автоматизация изменения прав через инструменты CI/CD (например, Ansible, Terraform), а также контроль прав на уровне образов Docker и Kubernetes-манифестов.

Команда chown: изменение владельца и группы

Команда `chown` (change owner) используется для смены владельца и/или группы файла. Это критичный инструмент для управления доступом в много-пользовательских системах и при работе с файловыми системами, монтируемыми с других устройств или контейнеров.

Примеры:
«`bash
chown root:admin config.yml
«`
Меняет владельца на `root`, группу на `admin`.

«`bash
chown —recursive user1:usergroup /home/user1/projects
«`
Рекурсивно меняет владельца и группу для всех файлов и папок в указанном каталоге.

Применение `chown` в 2025 году особенно важно в контексте отказа от root-доступа в контейнерах и использования непривилегированных пользователей. Многие образы Docker по умолчанию используют не-root пользователей, что требует настройки прав доступа вручную или через Dockerfile.

umask: управление правами по умолчанию

`umask` (user file creation mask) определяет маску прав, которые будут запрещены для новых файлов и каталогов. Изначально новые файлы создаются с правами `666` (rw-rw-rw-), а каталоги — `777` (rwxrwxrwx). Значение `umask` вычитается из этих значений.

Пример:
«`bash
umask 022
«`
Означает:
— Новые файлы: 644 (rw-r—r—)
— Новые каталоги: 755 (rwxr-xr-x)

Проверка текущего значения:
«`bash
umask
«`

Современные практики включают установку `umask` на уровне системных профилей (`/etc/profile`, `/etc/login.defs`) и в контейнерах, чтобы обеспечить безопасность по умолчанию. Также всё чаще применяются динамически изменяемые маски в скриптах CI/CD, в зависимости от окружения.

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

Современные дистрибутивы Linux всё чаще используют расширенные механизмы контроля доступа:

ACL (Access Control Lists): позволяют задавать права не только для владельца, группы и остальных, но и для произвольных пользователей и групп.
SELinux/AppArmor: реализуют модели мандатного контроля доступа (MAC), обеспечивая более тонкую настройку политики безопасности.
Capabilities: позволяют разделить привилегии root-пользователя на более мелкие части и назначать только необходимые.

Сравнение:

| Механизм | Гибкость | Применяемость | Поддержка по умолчанию |
|—————-|———-|—————-|—————————|
| chmod/chown | Средняя | Все Linux-системы | Да |
| ACL | Высокая | Файловые системы с поддержкой POSIX ACL | Опционально |
| SELinux | Очень высокая | RHEL, CentOS, Fedora | Да (включено в ядро) |
| AppArmor | Очень высокая | Ubuntu, openSUSE | Да |

Рекомендации по безопасности в 2025 году

— Использовать строгие `umask` (например, 027) для системных пользователей
— Избегать предоставления `777` прав, особенно в общих директориях (`/tmp`, `/var/tmp`)
— Применять `chown` и `chmod` в Dockerfile для минимизации прав доступа
— Анализировать права с помощью `find` и `stat` перед деплоем в production

Маркированный список команд для аудита:

— `find / -perm -4000` — поиск файлов с setuid
— `getfacl` — просмотр ACL-прав
— `namei -l /path/to/file` — пошаговая проверка прав на путь

Заключение

Несмотря на развитие технологий безопасности, базовые инструменты управления правами — `chmod`, `chown`, `umask` — остаются краеугольным камнем в обеспечении защиты данных в Linux. Современные тенденции подчёркивают необходимость их автоматизированного и осознанного использования в CI/CD, DevSecOps и контейнерных средах. Глубокое понимание этих инструментов позволяет не только настраивать доступ, но и минимизировать потенциальные векторы атак.

Прокрутить вверх