问题
未分配到某个 SELinux MCS(多类别安全)类别的用户可以读取分配给该类别的文件,这表明 MCS 在我的系统上不起作用(运行 CentOS7,最小安装,SELinux 在有针对性的政策 )。
背景
我最近为自己购买了一个小型 vServer,这促使我深入研究安全系统设置并首次处理 SELinux。我打算通过在 docker 容器中运行它们(主机本身在 CentOS7 上运行)来分离我将在服务器上运行的应用程序。我很高兴地了解到,每个 docker 容器(默认情况下)在启动时分配了随机的 SELinux MCS 类别,为分离提供了额外的安全层。为了熟悉 SELinux 的一般工作原理和 MCS 的具体工作原理,我在一台家用机器上设置了一个 VM 并进行了一些尝试。这样做后,我注意到 MCS 不能像我预期的那样工作,所以要么是我遗漏了某些重要的东西,要么是某个地方存在配置问题。
我做了什么
为了测试 MCS,我按照 [0] 和 [1] 中的说明进行操作。首先,我确保 SELinux 确实在执行模式,并与有针对性的政策使用sestatus
。遵循[0],我创建了一个mcsuser_uSELinux 用户和 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
),登录身份约翰并创建了一个文本文件约翰文本。然后我分配了类别c122到该文件(仍然登录为约翰)。我还可以分配类别c120到文件,即使约翰不属于c120而根据 [0] 的说法,这是不可能的(我随后删除了c120再次)。ls -lZ johntext
显示输出
-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext
按照上述操作,我以用户身份登录简并尝试读取文件约翰文本使用cat
命令,我可以做到这一点。
对我来说,这清楚地表明 MCS 并未按我预期的方式工作(仅当请求访问的用户属于同一类别时才允许访问某一类别的对象)。
解决方案?
我现在有点困惑,不知道错误出在哪里,所以我向你们寻求建议。这可能只是我的错误假设或误解,但我现在想不通,而且对我来说这没有意义。我认为有以下几种可能:
1. 我必须手动激活 MCS 检查或使用其他策略
我没有找到任何关于是否必须手动激活 MCS 支持的信息,因此假设只要我分配标签,它就会起作用(基于 [1])。其他来源 [2] 建议在有针对性的至少在 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 的虚拟机上测试了相同的步骤,一切都按预期运行。因此,现在,我假设 CentOS 上的 SELinux 中存在一些与 MCS 相关的错误,或者对策略/配置进行了一些未记录的更改,需要进行调整。我仍然不确定接下来要采取哪些合理的步骤才能使其按预期运行。
答案1
显然,从 CentOS6 到 CentOS7,SELinux 策略发生了变化,MCS 约束不再适用于所有类型。对于要遵循 MCS 的给定类型,mcs_constrained_type
必须通过自定义策略将属性添加到该类型。有关如何执行此操作(以及哪些类型默认受 MCS 约束(以及原因))的更多详细信息,请参阅Dan Walsh 的博客文章。