Операционная система Linux — это фундамент, на котором стоит современный IT-мир, от крупнейших облачных серверов до устройств IoT. Ее ключевое преимущество, помимо стабильности и гибкости, — многопользовательская архитектура, основанная на строгой системе прав доступа. Понимание этой системы — не просто «хорошо бы знать», это обязательное условие для любого системного администратора, DevOps-инженера или разработчика.
В этой статье рассмотрим традиционную модель прав доступа, специальные разрешения, современные механизмы безопасности и дадим практические рекомендации.
- Фундамент: модель UGO и права R, W, X
- Управление правами: chmod и chown
- Наследование и права по умолчанию: umask
- Расширенные права: SUID, SGID и Sticky Bit
- Списки контроля доступа (ACL): гранулярность Beyond UGO
- Обязательный контроль доступа (MAC): SELinux и AppArmor
- Заключение: принцип минимальных привилегий
- Читайте также
Фундамент: модель UGO и права R, W, X
Система прав доступа в Linux строится на трех объектах (владельцах) и трех типах разрешений.
Объекты доступа (UGO)
Каждый файл и каталог в системе имеет двух основных владельцев:
- User (u): Пользователь-владелец файла.
- Group (g): Группа-владелец файла.
- Others (o): Все остальные пользователи, которые не являются ни владельцем, ни членами группы-владельца.
Типы разрешений (RWX)
Для каждого из этих объектов можно установить три базовых типа разрешений :
- r (Read, чтение):
- Для файла: возможность прочитать его содержимое.
- Для каталога: возможность просмотреть список файлов внутри.
- w (Write, запись):
- Для файла: возможность изменить или удалить его содержимое.
- Для каталога: возможность создавать, удалять и переименовывать файлы внутри каталога.
- x (Execute, выполнение):
- Для файла: возможность запустить его как программу или скрипт.
- Для каталога: возможность войти в него (
cd) и получить доступ к его содержимому (также известно как право «descend»).

rwx) определяют права для Владельца, Группы и Остальных пользователей. Символ + в конце (например, -rw-r--r--+) означает наличие списков контроля доступа (ACL).Управление правами: chmod и chown
Для изменения прав и владельцев используются команды chmod (change mode) и chown (change owner).
chmod: Изменение разрешений
Команда chmod позволяет устанавливать права доступа с помощью двух основных нотаций:
- Символьная нотация (Symbolic Mode): Позволяет добавлять (
+), удалять (-) или устанавливать (=) разрешения для конкретных объектов (u, g, o, a — all).chmod u+x script.sh— добавить право выполнения (x) владельцу (u).chmod go-rw file.txt— удалить право чтения (r) и записи (w) у группы (g) и остальных (o).chmod a=rwx directory/— установить полные права (rwx) для всех (a).
- Восьмеричная (числовая) нотация (Octal Mode): Использует числа от 0 до 7 для каждой из трех категорий (u, g, o). Каждое разрешение соответствует степени двойки: r=4, w=2, x=1.
| Разрешение | Символьная нотация | Восьмеричный код |
|---|---|---|
| Чтение, Запись, Выполнение | rwx | 7 (4+2+1) |
| Чтение, Запись | rw- | 6 (4+2) |
| Чтение, Выполнение | r-x | 5 (4+1) |
| Только Чтение | r-- | 4 (4) |
| Нет прав | --- | 0 |
Примеры:
chmod 644 myfile→-rw-r--r--. Владелец: 6 (RW), Группа: 4 (R), Остальные: 4 (R).chmod 755 script.sh→-rwxr-xr-x. Стандартные права для исполняемых файлов/каталогов.
⚠️ Избегайте
chmod 777! Использованиеchmod 777(полные права для всех) равносильно тому, чтобы оставить все двери вашего сервера открытыми. Это критическая уязвимость, которая позволяет любому пользователю или скомпрометированному процессу читать, изменять и выполнять файл, что часто приводит к созданию бэкдоров. Всегда используйте принцип минимальных привилегий.
chown и chgrp: изменение владельцев
chown user:group file— изменяет и пользователя-владельца, и группу-владельца.chown -R user:group dir— рекурсивно меняет владельцев для каталога и его содержимого.chgrp group file— изменяет только группу-владельца.
Наследование и права по умолчанию: umask
Umask (User File-Creation Mode Mask) — это не просто права, а маска, которая отключает определенные разрешения при создании новых файлов и каталогов.
Linux имеет «базовые» разрешения для новых объектов:
- Для файлов: 666 (RW для всех).
- Для каталогов: 777 (RWX для всех).
Umask вычитается из базового значения: Финальные права = Базовые права - Umask.
| Объект | Umask | Базовые права | Итоговые права |
|---|---|---|---|
| Файл | 022 | 666 | 644 (-rw-r--r--) |
| Каталог | 022 | 777 | 755 (drwxr-xr-x) |
| Файл | 002 | 666 | 664 (-rw-rw-r--) |
Актуальные значения umask в современных дистрибутивах:
| Дистрибутив | Пользователь | Umask по умолчанию |
|---|---|---|
| RHEL 9/CentOS/Fedora | root | 0022 |
| RHEL 9 | Стандартный пользователь | 0022 (Изменение с RHEL 8, ранее было 0002 для повышения безопасности) |
| Ubuntu/Debian (с 11.10) | Стандартный пользователь | 0002 (Расширяет права записи для основной группы) |
Чтобы проверить текущий umask, используйте команду umask. Изменить его для текущей сессии можно командой umask 077 (что устанавливает очень строгие права: 600/700).
Расширенные права: SUID, SGID и Sticky Bit
Помимо стандартных rwx, Linux использует специальные биты, которые значительно влияют на безопасность и работу системы.
| Бит | Назначение | Символ ls -l | Восьмеричный код |
|---|---|---|---|
| SUID (Set User ID) | Запуск исполняемого файла с правами владельца файла. | s вместо x в поле владельца. | 4xxx |
| SGID (Set Group ID) | Запуск исполняемого файла с правами группы файла. | s вместо x в поле группы. | 2xxx |
| Sticky Bit | Только владелец файла (или root) может удалять/переименовывать файлы в каталоге, даже если у других есть право записи. | t вместо x в поле others. | 1xxx |
Пример SUID: Команда passwd (смена пароля) имеет SUID-бит, чтобы обычный пользователь мог временно получить права root (владельца файла /usr/bin/passwd) для записи в /etc/shadow.
⚠️ Безопасность SUID/SGID: SUID и SGID являются частыми целями для атак на повышение привилегий. Лучшая практика — регулярно проводить аудит и удалять SUID-права у файлов, которым они не нужны, с помощью
chmod u-s /path/to/file.
Списки контроля доступа (ACL): гранулярность Beyond UGO
Если стандартной модели UGO не хватает (например, нужно дать право записи трем конкретным пользователям, но не всей группе), в игру вступают Списки контроля доступа (Access Control Lists, ACL).
ACL позволяют назначать отдельные разрешения для любого пользователя или группы, независимо от того, кто является владельцем файла.

getfacl для просмотра ACL. Наличие отдельной записи для пользователя allexserv показывает, как ACL расширяет стандартную модель UGO.Команды для управления ACL
Просмотр ACL (getfacl):
getfacl file.txtЕсли у файла есть ACL, ls -l покажет символ + в конце прав.
Установка/Модификация ACL (setfacl) Используется ключ -m (modify) для добавления или изменения правил.
- Добавить пользователю
allexservполные права (rwx):
setfacl -m u:allexserv:rwx qwert- Удалить права для пользователя
allexserv:
setfacl -x u:allexserv qwertACL — это мощный инструмент, но он требует тщательного логического контроля, так как его правила могут взаимодействовать с базовыми правами через специальную маску (mask), которая ограничивает максимальные эффективные права для всех ACL-записей.
Обязательный контроль доступа (MAC): SELinux и AppArmor
В современных средах, особенно в высоконагруженных и критически важных системах, традиционные права доступа (Discretionary Access Control, DAC) считаются недостаточными. Для обеспечения максимальной безопасности используются системы Обязательного Контроля Доступа (Mandatory Access Control, MAC).
Две наиболее распространенные реализации.
SELinux (Security-Enhanced Linux):
- Модель: Основана на метках безопасности (security contexts) и контекстах. Каждому процессу и объекту (файлу, порту) присваивается метка (например, веб-файлы получают метку
httpd_sys_content_t). Доступ разрешен только в том случае, если политика SELinux явно это позволяет. - Сложность: Более детальный и гибкий, но сложнее в администрировании и отладке.
- Дистрибутивы: По умолчанию используется в Red Hat Enterprise Linux (RHEL), CentOS и Fedora.
AppArmor (Application Armor):
- Модель: Основана на путях к файлам. Он использует профили, которые определяют, к каким файлам и ресурсам может обращаться конкретное приложение.
- Сложность: Считается проще в использовании, с более простыми для написания и отладки профилями.
- Дистрибутивы: По умолчанию используется в Ubuntu, SUSE и Debian.
Резюме для Администратора: Использование MAC (будь то SELinux или AppArmor) является современной лучшей практикой для «закаливания» (hardening) сервера. Они обеспечивают защиту выше уровня прав UGO, предотвращая, например, скомпрометированному веб-серверу доступ к файлам, которые он не должен трогать, даже если его процесс теоретически имеет права на чтение.
Заключение: принцип минимальных привилегий
Система прав доступа Linux — это первая и самая важная линия обороны. Успех в эксплуатации и обеспечении безопасности системы напрямую зависит от правильного применения этих правил.
Главный принцип: принцип минимальных привилегий (Least Privilege). Предоставляйте пользователям, группам и процессам только те минимальные права, которые необходимы для выполнения их функций.
- Всегда используйте
chmod 644для текстовых файлов иchmod 755для каталогов и исполняемых скриптов. - Избегайте
chmod 777(если только вы точно не понимаете риски, и это не временная мера на тестовом стенде). - Для сложного общего доступа используйте ACL, а не ослабление базовых прав.
- Внедрите и поддерживайте MAC-систему (SELinux или AppArmor) для защиты приложений от самих себя.
Читайте также
- Атрибуты файлов в Linux
- Управление процессами в Linux
- Погружение в сетевой трафик: анализ и расшифровка
- OpenSSH: руководство по установке, настройке и обеспечении безопасности
- Мониторинг изменений файлов в Linux.
Было ли это полезно?
0 / 0