Что вы знаете о SELinux, кроме того, что его надо отключить?

SELinux – система принудительного контроля доступа, реализованная на уровне ядра. Первое знакомство с ней начинается после того, как на экране появляется надпись Permission denied. Заканчивается все тоже довольно быстро – на строке SELINUX=disabled в /etc/selinux/config.

О том, как работать с этой программой, знают далеко не все админы. Еще бы, ведь в каждом втором руководстве по настройке какого-нибудь сетевого сервиса указано, что первым делом нужно отключить SELinux. Но не так страшен черт, как его малюют. Поэтому попытаемся разобраться, что такое SELinux и почему стоит трижды подумать, прежде чем отказываться от использования этой утилиты.

Что это такое и с чем его едят

Security Enhanced Linux – система безопасности, основанная на моделях мандатного и ролевого доступа. Цель разработки этой программы – исправление недостатков существующей на тот момент (2000-е гг.) системы безопасности DAC. Реализована на уровне ядра, начиная с версии 2.6. Сегодня утилиту можно установить фактически на любом дистрибутиве.

SELinux становится незаменимым помощником в том случае, если стандартной системы контроля доступа, где имеет место манипуляция с правами на запись, чтение и исполнение на уровне пользователей и групп, недостаточно.

Ниже несколько примеров использования.

Администратор не может контролировать в полной мере действия пользователей. Обычный юзер имеет право дать доступ на чтение секретных файлов, например, ключи SSH.

Изменения настроек безопасности процессом. Файлы, содержащие почту пользователя, доступны только одному пользователю, однако почтовый клиент может предоставить право на чтение остальным юзерам.

Процессы наследуют права пользователя, от имени которого были запущены. Типовая ситуация, когда зараженная трояном версия браузера Firefox может читать SSH-ключи пользователя, не имея на это права.

В некоторых дистрибутивах SELinux имеется по умолчанию: CentOS, Fedora и Red Hat. В Debian и Ubuntu SeLinux включен в репозиторий. Установить его можно командой

sudo apt-get install selinux

затем перезапустить систему.

Чтобы включить SELinux, необходимо ввести команду

selinuxenabled 1

Для выключения используется команда

selinuxenabled 0

Режимы работы

SELinux работает в двух режимах.

Permissive – допускается нарушение политики безопасности. Факты нарушения только регистрируются в системном журнале. В этом случае утилита используется в роли фиксатора нарушений.

Enforced – режим, при котором нарушения политики безопасности блокируются – SELinux работает в полной мере.

Чтобы переключиться с одного режима на другой, нужно ввести команду satenforce 1 (для запуска enforced режима) либо 0 (для включения permissive). Для того, чтобы режим работы устанавливался автоматически после запуска системы, необходимо отредактировать файл /etc/selinux/config, которому могут присваиваться такие значения: permissive, enforced и disabled (отключение утилиты).

Журналирование SELinux (аудит)

  • настройка auditallow – журналировать события;
  • настройка dontaudit – не журналировать события;

Логика работы:

  • если операция allow, то она журналируется лишь в случае auditallow;
  • если операция disallow, то она НЕ журналируется лишь в случае dontaudit.

Контекст безопасности

Это совокупность данных, состоящая из атрибутов SELinux:

— роли;

— типа пользователя/данных;

— домена процесса;

— категорий и уровней (применяется только в специальных политиках MLS/MCS).

Контекст безопасности записывается в файловой системе – в атрибуты файла, создается при установке утилиты.

Некоторые файловые системы (например, NFS) не поддерживают запись меток SELinux. В этом случае метки записываются отдельно от файлов, но связь между файлами и метками происходит по путям файлов. Это может спровоцировать «разрыв» между файлами и метками, если переместить файл по другому пути.

Метка файла может быть неверной даже тогда, когда файловая система поддерживает запись таких меток, однако файл неправильно переместили или скопировали внутри файловой системы. К примеру, при копировании файла в другую папку метка может измениться на ту, которая установлена для этой папки. Поэтому при использовании SELinux важно правильно копировать и перемещать файлы.

Чтобы узнать контексты, нужно использовать команды с ключом -Z.

  • ps –eZ [| gerp имя_программы] – контекст SELinux для работающих программ/для конкретной программы;
  • ls –Z – контекст SELinux для файлов;
  • id –Z – контекст SELinux для текущего пользователя.

Метки (labels)

Всем субъектам и объектам в SELinux предоставлены метки безопасности, которые обеспечивают первым доступ ко вторым. Метка субъекта указывает на его надежность, метка объекта – на степень конфиденциальности информации, содержащейся в нем.

Тип и домен

Домен – список действий, выполняемых процессом (субъектом) над объектами. Тип – присваивается объекту, определяет, кто может получить доступ к нему. В SELinux используется Type Enforcement – механизм принудительного присвоения типов. Каждому субъекту/объекту присваивается определенный домен (тип).

Роли

Роль — совокупность доменов, которые может запускать пользователь. Взаимодействия ролей и доменов регулируется политикой безопасности.

Согласно с правилами политики безопасности, допускается переход из одной роли в другую для изменения полномочий. Роли не могут совмещаться, а только заменять одна другую. Однако пользователь не имеет права поменять одну роль на другую в произвольном порядке. Из-за того, что роли связаны с доменами, процесс смены ролей часто называется сменой домена — Domain Transition.

Пользователь

Абстрактное понятие, а не конкретный пользователь c логином и паролем. Это тоже самое, что и группа пользователей в DAC — системе безопасности, которая активно применялась до SELinux. При добавлении нового пользователя в систему он сопоставляется с определенным типом пользователя SELinux. Ему присваиваются те права (разрешения и запреты), которые принадлежат его типу пользователя.

Cубъект

Пользователи или процессы, которые выполняют определенные действия над чем-либо.

Объект

Файлы, сокеты, порты, fifo (файл канала “first in — first out”) и прочие элементы архитектуры SELinux – то, над чем выполняются действия субъектов.

Политика MLS/MCS

Политика MLS (Multi-level-security) базируется на двух принципах.

  1. no write down, no read up

Субъект под грифом «секретно» имеет доступ к объекту либо с таким же уровнем секретности, либо ниже. Если субъект запрашивает доступ к файлу с меткой «совершенно секретно», то попытка будет отвергнута системой.

  1. no write down

Субъект не имеет права создавать/изменять объект с уровнем допуска ниже своего, чтобы избежать утечки информации. Это может произойти, например, в том случае, если субъект, содержащий секретную информацию, не записал ее в объект со статусом, к примеру, «для служебного использования». Эти принципы характеризуют вертикальный уровень контроля.

Каждый уровень секретности разбит на категории. То есть, если один субъект имеет допуск к одной категории на уровне «cекретно», это не значит, что он получает доступ к остальным. Это горизонтальный уровень контроля.

Если в системе существует только вертикальный уровень контроля, речь идет о мультикатегорийной безопасности (MCS).

Как работает SELinux

Что происходит, когда пользователь обращается к файлу

selinux1

Сначала проверяются DAC-права, затем хуки LSM. Перехватчик LSM (linux security module) отлавливает все обращения субъектов (пользователей или приложений) к системным файлам и передает их SELinux вместе с контекстом безопасности.

Предоставить или лишить доступа – это решает сервер реализации политики безопасности (Policy Enforcement Server). Для этого он сначала посылает запрос к подсистеме AVC – Access Vector Cache, в которой находятся кэшированные данные о правах доступа к объекту.  В том случае, если решение о контроле доступа отсутствует в кэше, то запрос перенаправляется в базу данных политики безопасности. Затем данные кэшируются в AVC и снова перенаправляется в Policy Enforcement Server. Если запрашиваемое действие соответствует требованиям найденной политики, то доступ разрешается, если нет – сервер реализации политики блокирует доступ. Данные при этом записываются в log-файл SELinux.

Кроме принятия решений о предоставлении/разрешении доступа, Policy Enforcement Server отвечает за управление метками безопасности (удаление или назначение).

При грамотной настройке эта утилита позволяет:

— ограничить права пользователей и процессов на уровне ядра системы;

— минимизировать риски, которые возникают из-за ошибок, допущенных в коде/конфигурации;

— заблокировать несанкционированный доступ, защитить систему от эксплойтов.

Для полного понимания, что такое SELinux, лучше изучить руководство. Вариант для самых настойчивых и целеустремленных – прохождение нашего авторского курса «L2-Sec. Безопасность в Linux», где изучаются различные способы обеспечения безопасности на всех уровнях.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *