Обзор системы прав доступа в 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 и контейнерных средах. Глубокое понимание этих инструментов позволяет не только настраивать доступ, но и минимизировать потенциальные векторы атак.