Linux Permissions

Операционная система Linux — это фундамент, на котором стоит современный IT-мир, от крупнейших облачных серверов до устройств IoT. Ее ключевое преимущество, помимо стабильности и гибкости, — многопользовательская архитектура, основанная на строгой системе прав доступа. Понимание этой системы — не просто «хорошо бы знать», это обязательное условие для любого системного администратора, DevOps-инженера или разработчика.

В этой статье рассмотрим традиционную модель прав доступа, специальные разрешения, современные механизмы безопасности и дадим практические рекомендации.




Фундамент: модель 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.
РазрешениеСимвольная нотацияВосьмеричный код
Чтение, Запись, Выполнениеrwx7 (4+2+1)
Чтение, Записьrw-6 (4+2)
Чтение, Выполнениеr-x5 (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Базовые праваИтоговые права
Файл022666644 (-rw-r--r--)
Каталог022777755 (drwxr-xr-x)
Файл002666664 (-rw-rw-r--)

Актуальные значения umask в современных дистрибутивах:

ДистрибутивПользовательUmask по умолчанию
RHEL 9/CentOS/Fedoraroot0022
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):

Bash
getfacl file.txt

Если у файла есть ACL, ls -l покажет символ + в конце прав.  

Установка/Модификация ACL (setfacl) Используется ключ -m (modify) для добавления или изменения правил.  

  • Добавить пользователю allexserv полные права (rwx):
Bash
setfacl -m u:allexserv:rwx qwert
  • Удалить права для пользователя allexserv:
Bash
setfacl -x u:allexserv qwert

ACL — это мощный инструмент, но он требует тщательного логического контроля, так как его правила могут взаимодействовать с базовыми правами через специальную маску (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) для защиты приложений от самих себя.

Читайте также

Было ли это полезно?

0 / 0

Добавить комментарий 0