Назад | Перейти на главную страницу

CentOS7 SELinux, похоже, не соответствует категориям MCS

Проблема

Файл, назначенный определенной категории SELinux MCS (Multi Category Security), может быть прочитан пользователем, который не относится к этой категории, что указывает на то, что MCS каким-то образом не работает в моей системе (работает CentOS7, с минимальной установкой, SELinux обеспечение соблюдения целевой политика).

Задний план

Недавно я приобрел для себя небольшой vServer, который побудил меня погрузиться в безопасную настройку системы и впервые заняться SELinux. Я собираюсь разделить приложения, которые буду запускать на сервере, запустив их в контейнерах докеров (при этом сам хост работает на CentOS7). Я был рад узнать, что каждому докер-контейнеру (по умолчанию) назначаются случайные категории SELinux MCS при запуске, чтобы обеспечить дополнительный уровень безопасности для разделения. Чтобы познакомиться с принципами работы SELinux в целом и MCS в частности, я установил виртуальную машину на одной из моих домашних машин и немного поигрался. При этом я заметил, что MCS работает не так, как я ожидал, поэтому либо я упускаю что-то важное, либо где-то есть проблема с конфигурацией.

Что я сделал

Для тестирования MCS я следовал инструкциям в [0] и [1]. Во-первых, я убедился, что SELinux действительно работает в принуждение режим и с целевой политика с использованием sestatus. Придерживаясь [0], я создал mcsuser_u Пользователь SELinux и пользователи CentOS Джон, Джейн, Джонджейн, который я затем сопоставил с mcsuser_u с помощью semanage login. Я также назначил категории пользователям, как указано в [0], и в итоге получил:

Login Name | SELinux User | MLS/MCS Range

john | mcsuser_u | s0-s0:c122
jane | mcsuser_u | s0-s0:c123
johnjane | mcsuser_u | s0-s0:c122,123

из semanage login -l и

mcsuser_u | MLS/MCS Level: s0 | MLS/MCS Range: s0-s0:c0.c1023 | SELinux Roles: user_r

из semanage user -l.

Я сделал домашний каталог пользователя Джон читаемый мир (chmod 707), вы вошли как Джон и создал текстовый файл johntext. Затем я присвоил категорию c122 в этот файл (все еще вошел как Джон). Я также смог назначить категорию c120 в файл, хотя Джон не относится к категории c120 сам, что не должно быть возможным согласно [0] (впоследствии я удалил c120 очередной раз). ls -lZ johntext показывает вывод

-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext

Следуя вышесказанному, я вошел в систему как пользователь Джейн, и попытался прочитать файл johntext используя cat команда, которую я смог сделать.

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

Решения?

Я немного сбит с толку и не знаю, в чем заключается ошибка, поэтому обращаюсь к вам за советом. Вероятно, это просто неправильное предположение или недопонимание с моей стороны, но я не могу понять этого прямо сейчас, и для меня это не имеет смысла. На мой взгляд, есть следующие возможности:

1. Мне нужно вручную активировать проверки MCS или использовать другую политику

Я не нашел никакой информации о том, нужно ли мне вручную активировать поддержку MCS и, таким образом, предполагаю, что это просто работает, если я назначу ярлыки (на основе [1]). Другой источник [2] предполагает, что MCS включен в целевой политика в отношении (по крайней мере) Fedora и RHEL, от которой я ожидал, что она не отличается для CentOS.

2. На моей стороне неправильная конфигурация.

Возможно, я ошибся при настройке категорий пользователей с помощью semanage login или присвоение категорий файлу.

3. Просто сломано

.. что было бы плохо

Ссылки на ссылки

0: https://selinux-mac.blogspot.de/2009/06/multi-category-security.html

1: https://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html

2: http://selinuxsymposium.org/2006/slides/08-mcs.pdf

Полный sestatus вывод

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

[РЕДАКТИРОВАТЬ]:

Я только что протестировал те же шаги на виртуальной машине под управлением CentOS 6.9, где все работает так, как ожидалось. Таким образом, прямо сейчас я бы предположил, что есть либо какая-то ошибка, связанная с MCS в SELinux на CentOS, либо некоторые недокументированные изменения в политике / конфигурации, которые потребуют настройки. Я все еще сомневаюсь, какие следующие разумные шаги можно предпринять, чтобы заставить его работать должным образом.

По-видимому, в политиках SELinux произошли изменения с CentOS6 на CentOS7, так что ограничения MCS больше не применяются ко всем типам. Для данного типа, чтобы придерживаться MCS, mcs_constrained_type атрибут должен быть добавлен к этому типу с помощью настраиваемой политики. Более подробную информацию о том, как это сделать (и какие типы MCS ограничены по умолчанию (и почему)) можно найти в сообщение в блоге Дэна Уолша.