Вопрос или проблема
В попытке лучше понять SELinux у меня есть этот двухуровневый вопрос:
- Кто/что назначает контекстную метку SELinux данному процессу и когда/как это делается?
- После этого можно ли изменить ее с помощью команды, понимающей SELinux?
Например, можно взглянуть на контекстную метку SELinux процесса sshd
, выполнив следующее:
ps -efZ | grep sshd | grep -v grep
Результат команды отобразит процессы, включая метки контекста безопасности SELinux каждого процесса. Что-то вроде:
system_u:system_r:sshd_t:s0-s0:c0.c1023
Какой код назначает это процессу sshd, запущенному из ядра Linux? Возможно ли изменить его на что-либо отличное от sshd_t
, например. Я не хочу его менять, я просто хочу понять, как применяются метки.
Процессы изначально запускаются с меткой на основе их контекста файла. Вы можете проверить это с помощью ls -Z
и сравнить с политикой, используя semanage fcontext --list
, например:
ls -Z /usr/sbin/sshd
system_u:object_r:sshd_exec_t:s0 /usr/sbin/sshd
semanage fcontext --list | grep /usr/sbin/sshd
/usr/sbin/sshd regular file system_u:object_r:sshd_exec_t:s0
Но тип sshd_exec_t
не совпадает с типом sshd_t
, с которым служба в данный момент работает. Процесс перешел в другой контекст на основе более сложных правил в текущей политике. Вкратце, есть правила, определяющие, какие типы контекста могут иметь доступ или переходить в другие типы – это можно увидеть с помощью sesearch
, если вы хотите углубиться, например так:
sesearch -T -t sshd_exec_t
type_transition cluster_t sshd_exec_t:process sshd_t;
type_transition condor_startd_t sshd_exec_t:process sshd_t;
type_transition ifconfig_t sshd_exec_t:process sshd_t;
...
Вам обычно не следует вмешиваться в сами правила для встроенных политик и служб. Обычно проблема заключается в метках контекста файлов, когда что-то не работает для изолированного процесса, как sshd
. Полезно убедиться в том, что он и все файлы, к которым он хочет получить доступ, имеют правильные метки.
Эти документы RedHat все еще хорошо описывают, как управлять и устранять неполадки SELinux.
Ответ или решение
Вопросы, заданные в связи с SELinux, касаются основного механизма системы и управления процессами, а также понимания, как именно назначаются и применяются метки контекстов безопасности. Для полного понимания этого вопроса нужно разбираться в теории работы SELinux, исследовать примеры и их приложения.
Теория SELinux
SELinux (Security-Enhanced Linux) — это модуль системы управления доступом, основанный на мандатной модели контроля доступа (MAC). Основная цель SELinux заключается в защите системы путем ограничения программ и демонов, с которыми они могут взаимодействовать. Каждый объект (файл, процесс, порт и др.) и субъект (процесс) в системе имеет связанное с ним описание — метку безопасности. Эта метка состоит из трех основных компонентов: пользователь, роль и тип.
SELinux управляет доступом с помощью политик, которые определяют, какие процессы и в каких контекстах могут взаимодействовать. В политике описываются правила, определяющие, какие типы могут переходить в другие, какие метки устанавливаются для новых процессов или файлов, и какие действия разрешены или запрещены.
Назначение метки контекста процессу
Начальная метка контекста процесса назначается в момент его запуска на основе метки файла, из которого он выполняется. Этот механизм задействует концепцию type_transition (переход типов). Например, если файл имеет тип sshd_exec_t
, правила политики могут указать, что любой процесс, запущенный из него, должен перейти в тип sshd_t
. Этот процесс назначения меток называется транзитивным переходом, который задается в политике SELinux:
type_transition cluster_t sshd_exec_t:process sshd_t;
Это означает, что в определенном контексте (например, cluster_t
) процессы, запущенные из файлов с меткой sshd_exec_t
, будут автоматически назначаться меткой sshd_t
. Поэтому начальная метка файла (например, sshd_exec_t
) не совпадает с меткой запущенного процесса (sshd_t
), поскольку процесс подвергся транзитивному переходу.
Изменение метки во время выполнения
Метки контекста процесса обычно не изменяются после его запуска, поскольку это противоречит основному принципу SELinux — гарантировать безопасность через строгий контроль доступа. Однако, допустимость изменения может быть задана через применение различных политик или использование специализированных утилит.
Для изменения метки объекту (например, файлу) после его создания можно использовать команды chcon
, restorecon
и semanage fcontext
, в то время как для процессов такое изменение не применяется напрямую. Изменения применяются, в первую очередь, через переконфигурирование и пересборку политик.
Примеры взаимодействия с SELinux
-
Просмотр метки контекста процесса:
Командаps -efZ
позволяет просмотреть метку контекста запущенного процесса, тем самым предоставляя информацию о текущем состоянии SELinux для любого процесса в системе. -
Проверка метки файла:
Командаls -Z
отображает метку безопасности файла, которая используется для управления тем, каким образом процесс будет запущен из этого файла. -
Коррекция меток файлов:
Если файл или процесс имеет неправильную метку, это может нарушать работу процесса. В таких случаях командыrestorecon
помогут восстановить корректные метки согласно политике SELinux.
Применение на практике
В административных задачах важно обеспечить правильное назначение и проверку меток конфиденциальности, чтобы системы оставались безопасными. Для этого администраторы должны тестировать и, при необходимости, корректировать метки файлов и процессов.
Прежде чем попытаться изменить сырой код политики, лучше всего оценить существующие конфигурации и убедиться, что все файлы мл. соответствуют правильным меткам. Это сводит к минимуму первоначальную чувствительность к ошибкам и обеспечивает определённую безопасность, предлагая более безопасную среду, где приложения могут функционализировать в рамках управляемых и проверяемых ограничений.
Чтобы глубже понять SELinux, можно исследовать его документацию, обучающие материалы и советы по устранению неполадок, как, например, на сайте Red Hat, что позволит вам более уверенно организовывать и защищать ваши системы.
В заключение, SELinux предоставляет мощные инструменты для управления доступом и повышения безопасности. Благодаря строгой структуре назначаемых и выполняемых политик, SELinux позволяет минимизировать риск несанкционированного доступа, гарантируя, что системы функционируют с необходимой степенью защиты.