Product SiteDocumentation Site

Глава 3. Контексты SELinux

3.1. Доменные Переходы, Транзитивность (Domain Transitions)
3.2. Контексты SELinux для процессов
3.3. Контексты SELinux для пользователей
Процессы и файлы маркируются метками - контекстом SELinux, который содержит информацию: пользователь SELinux, роль, тип и уровень (опционально). Когда SELinux включен, вся эта информация используется для принятия решения о предоставлении доступа. В Fedora, SELinux предоставляет сочетание ролевого управления доступом (Role-Based Access Control (RBAC), Type Enforcement® (TE), и опциаонально многоуровневой модели безопасности, Multi-Level Security (MLS).
В следующем примере показывается контект SELinux. Контекст SELinux используется для процессов, пользователей Linux и файлов в операционной системе Linux, запущенной с SELinux. Используя команду ls -Z можно увидеть контекст SELinux для файлов и директорий:
$ ls -Z file1
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
В контексте SELinux используется следующий синтаксис SELinux user:role:type:level:
пользователь SELinux
Пользователь SELinux - это сущность определённая в политике, которая отвечает за определённый набор ролей и за определённый набор MLS уровней. Каждый пользователь Linux сопоставлен пользователю SELinux посредством политики SELinux. Это позволяет пользователям Linux наследовать ограничения установленные на пользователей SELinux. Сопоставленные сущности пользователей SELinux используются в контексте SELinux для процессов в сессии, в порядке определения для каких ролей и уровней они применимы. Для того, чтобы посмотреть сопоставление между пользователями SELinux и Linux используется команда semanage login -l:
# /usr/sbin/semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               unconfined_u              s0-s0:c0.c1023
root                      unconfined_u              s0-s0:c0.c1023
system_u                  system_u                  s0-s0:c0.c1023
Вывод команды может отличаться между операционными системами. В столбце Login Name перечислены пользователи Linux, а в столбце SELinux User показаны с какими пользователями SELinux они сопоставлены. Для процессов пользователи SELinux ограничивают доступность ролей и уровней. В последнем столбце MLS/MCS Range показан уровень который используется в Multi-Level Security (MLS) and Multi-Category Security (MCS), данные механизмы будут рассмотрены позже.
роль
Роль - это часть модели безопасности Ролевого управления доступом Role-Based Access Control (RBAC). Роль - это атрибут RBAC. Пользователи SELinux, авторитетны для ролей, а роль авторитетна для доменов. Определённая роль определяет какие домены могут быть доступны для пользователей с этой ролью. Роль служит промежуточным звеном между доменами и пользователями SELinux. Роль, которой обладает пользователь, определяет в какие домены может попасть пользователь - фактически, этот механизм управляет доступностью объектов. Таким образом, уменьшается риск, связанный с уязвимостью повышения привелегий в системе.
тип
Тип - это атрибут Type Enforcement. Тип определяет домен для процессов и тип для файлов. Правила политики SELinux определяют как типы взаимодействуют друг с другом, является ли тип доменом, получающим доступ к типу, или доменом, получающим доступ к другому домену. Доступ разрешается, только если существует определенное правило политики SELinux позволяющих данное действие.
уровень
Уровень - это атрибут многоуровневого управления доступом MLS и MCS. Пространство MLS - это пара уровней, записанных в виде lowlevel-highlevel, если уровни в данной паре отличаются или, если не отличаются, то lowlevel. То есть (s0-s0 то же самое, что и s0). Если дополнительно определены категории, то уровень записывается как sensitivity:category-set. Если категории не определены, то запись выглядит как sensitivity.
If the category set is a contiguous series, it can be abbreviated. For example, c0.c3 is the same as c0,c1,c2,c3. The /etc/selinux/targeted/setrans.conf file maps levels (s0:c0) to human-readable form (ie. CompanyConfidential). Do not edit setrans.conf with a text editor: use semanage to make changes. Refer to the semanage(8) manual page for further information. In Fedora, targeted policy enforces MCS, and in MCS, there is just one sensitivity, s0. MCS in Fedora supports 1024 different categories: c0 through to c1023. s0-s0:c0.c1023 is sensitivity s0 and authorized for all categories.
MLS вводит в действие Bell-La Padula Mandatory Access Model, и используется в средах Labeled Security Protection Profile (LSPP). Для использования механизмов MLS, необходимо установить пакет selinux-policy-mls и сконфигурировать MLS в качестве политики SELinux по умолчанию. Политика MLS поставляемая с Fedora не включает домены для программ, которые не являются частью протестированной конфигурации и более того, MLS не применима на десктопе или рабочей станции (так как нет поддержки для X Window System); однако политика MLS от upstream SELinux Reference Policy может быть построена так, чтобы учитывать все программные домены.

3.1. Доменные Переходы, Транзитивность (Domain Transitions)

Процесс из одного домена переходит в другой домен, если первый процесс выполняет приложение, которое запускается из файла с типом entrypoint нового домена. Разрешение перехода entrypoint используется в политике SELinux и контролирует какие приложения используется для входа в домен. В следующем примере показаны доменные переходы (domain transitions)
  1. Пользователь хочет изменить свой пароль. Для того, чтобы это сделать пользователь выполняет команду passwd. Файл /usr/bin/passwd является исполняемым и промаркирован меткой с типом passwd_exec_t:
    $ ls -Z /usr/bin/passwd
    -rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
    
    Приложение passwd получает доступ passwd, которое помечено типом shadow_t:
    $ ls -Z /etc/shadow
    -r--------. root root system_u:object_r:shadow_t:s0    /etc/shadow
    
  2. Правило политики SELinux определяет, что процесам, запущенным в домене passwd_t, разрешено читать и записать в файлы помеченные типом shadow_t. Тип shadow_t применяется только к файлам, которые необходимы для смены пароля. Это файлы /etc/gshadow, /etc/shadow и их резервные копии.
  3. Правило политики SELinux определяет, что домен passwd_t имеет разрешения перехода entrypoint для типа passwd_exec_t.
  4. Когда пользователь выполняет приложение /usr/bin/passwd, оболочка shell пользователя переходит в домен passwd_t. С SELinux, где по умолчанию принимается действие блокирования и существует правило позволяющее приложениям, выполняющимся в домене passwd_t, получать доступ к файлам помеченным типом shadow_t, приложение passwd получает доступ к /etc/shadow, и меняет пароль ползователя.
Данный пример не является исчерпывающим и используется как простейший пример для объяснения переходов (domain transitions). Таким образом определено работающее правило, которое позволяет субъектам выполняться в домене passwd_t для доступа к объектам маркированным с типом файлов shadow_t, другие правила политики SELinux должны быть пройденгны, перед тем как субъект сможет выполнить переход в другой домен. В этом примере Type Enforcement удостоверяет, что:
  • В домен passwd_t можно войти, выполнением приложений, маркированных типом passwd_exec_t; и могут исполнять только авторизованные разделенные библиотеки, такие как тип lib_t; и не могут выполнять любые друие приложения
  • Только авторизованные домены passwd_t, могут записывать в файлы маркированные типом shadow_t. Даже если другие процессы запущены с привелегиями суперпользователя, эти процессы не могут выполнять записть в файлы с типом shadow_t, до тех пор, так как они не запущены в домене passwd_t.
  • Только авторизованные домены могут выпоолнять переход в домен passwd_t. Например, процесс sendmail запускается в домене sendmail_t и не имеет логичных (законных) причин для запуска passwd; таким образом он не может выполнить переход в домен passwd_t.
  • Процессы запущенные в домене passwd_t могут только читать и записывать в авторизованные файлы промаркированные типом etc_t или shadow_t. Это предотвращает приложение passwd от записи или чтения в другие файлы.