Файл, назначенный определенной категории 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 не работает так, как я ожидал (разрешение доступа к объектам определенной категории, только если пользователь, запрашивающий доступ, имеет ту же категорию).
Я немного сбит с толку и не знаю, в чем заключается ошибка, поэтому обращаюсь к вам за советом. Вероятно, это просто неправильное предположение или недопонимание с моей стороны, но я не могу понять этого прямо сейчас, и для меня это не имеет смысла. На мой взгляд, есть следующие возможности:
Я не нашел никакой информации о том, нужно ли мне вручную активировать поддержку MCS и, таким образом, предполагаю, что это просто работает, если я назначу ярлыки (на основе [1]). Другой источник [2] предполагает, что MCS включен в целевой политика в отношении (по крайней мере) Fedora и RHEL, от которой я ожидал, что она не отличается для CentOS.
Возможно, я ошибся при настройке категорий пользователей с помощью semanage login
или присвоение категорий файлу.
.. что было бы плохо
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 ограничены по умолчанию (и почему)) можно найти в сообщение в блоге Дэна Уолша.