【Linux】SELinux的原理是什么?怎么配置SELinux上下文?


hello大家好😊

SELinux原理❓

概念

SELinux(Security-Enhanced Linux)是一种强化安全性的 Linux 安全模块,它采用了强制访问控制(Mandatory Access Control,MAC)机制来加强操作系统的安全性。

我们大都熟悉标准的用户、组、其他 rwx权限安全模型,这种基于用户和组的模型称为自由决定的访问控制(Discretionary Access Control,DAC)。在DAC中,资源的所有者决定谁可以访问其资源,并将访问权限授予其他用户。但是,这种控制层级较低,可能在高度定制的安全环境中不足以提供必要的保护

相比之下,SELinux 使用强制访问控制(MAC)规则,不受资源所有者的自由决定,通过策略限制进程和用户对资源的访问,提供了更高级别的系统安全性

示例

接下来我们通过一个例子看一下SELinux如何发挥作用:

假设你的系统是一个 Web 服务器,运行着一个名为 “MyWebApp” 的网站,网站的根目录是*/var/www/html/MyWebApp*。此时,SELinux 启用并运行

  • 没有 SELinux 时(仅使用文件权限):
    在没有 SELinux 的情况下,我们设置了合适的文件权限,使得 Apache 服务器可以读取和服务 /var/www/html/MyWebApp 目录下的文件。此时,Apache 进程对这个目录有读取权限,并且能够执行其中的脚本和服务请求。但是,如果 Apache 进程被攻击者入侵,攻击者可以读取和执行该目录下的所有文件,这可能导致系统被入侵、文件被篡改或敏感信息泄露
  • 启用 SELinux 后
    当启用 SELinux 后,Apache 进程会被赋予一个特定的安全上下文,表示它的用户、角色和类型。同时,/var/www/html/MyWebApp 目录及其中的文件也会被赋予特定的安全上下文。
    💡 假设 Apache 进程被赋予类型上下文 httpd_t,而 /var/www/html/MyWebApp 目录被赋予类型上下文 httpd_sys_content_t。此时,即使 Apache 进程在文件权限层面上具有读取和执行目录的权限,由于 SELinux 强制访问控制(MAC)机制,只有 httpd_t 类型的进程才能访问具有 httpd_sys_content_t 上下文的目录
    ❗ 如果有一个恶意进程(非 httpd_t 类型)企图读取或执行 /var/www/html/MyWebApp 目录,SELinux 会阻止该操作,即使文件权限允许。因为它不符合 SELinux 策略中规定的访问规则
    🖐同时,其他系统资源如数据库文件、用户信息等也可能被分配特定的安全上下文,并受到 SELinux 的保护。攻击者即使入侵了一个进程,由于 SELinux 的限制,他们仍然受到更严格的权限控制,不能随意访问和修改其他资源

启用/禁用 SELinux

如果需要启用或禁用 SELinux,可以编辑 /etc/selinux/config 文件,并将 SELINUX 参数设置为 enforcing(启用)或 disabled(禁用)

我们也可以用命令的方式查看和更改模式。比如要确定当前的SELinux模式,运行getenforce命令。要将SELinux设置为其他模式,使用 setenforce命令

配置SELinux上下文❓

SELinux上下文(SELinux Context)是什么

在运行SELinux的系统上,所有进程和文件都会有相应的标签。标签代表了与安全有关的信息,称为SELinux上下文。

SELinux 上下文的格式通常是 “user:role:type”,例如 “system_u:object_r:httpd_sys_content_t”。其中,“system_u” 表示用户标识符,“object_r” 表示角色标识符,“httpd_sys_content_t” 表示类型标识符(每个对象都被赋予一个唯一的类型标识符,通过类型标识符限制了进程和资源之间的访问)。

显示文件或目录上的SELinux上下文

我们使用 ls 命令结合 -Z 选项来显示文件或目录上的 SELinux 上下文
示例:

ls -Z example.txt  #显示文件 "example.txt" 的 SELinux 上下文
ls -Zd my_directory  #显示目录 "my_directory" 的 SELinux 上下文

更改文件的SELinux上下文

用于更改文件 SELinux上下文的命令包括: semanage fcontextrestoreconchcon

chcon

chcon命令临时更改SELinux上下文。也就是说它不会将上下文更改保存到SELinux上下文数据库中,当使用restorecon命令后,chcon命令所做的更改无法保留

semanage fcontext

为文件设置SELinux上下文的首选方法是使用semanage fcontext 命令来声明文件的默认标签然后使用restorecon命令将该上下文应用于文件

semanage fcontext命令的选项参考(部分):

选项描述
-a ,- -add添加新的规则
-d ,- -delete删除现有的文件的规则
-l ,- -list列出当前定义的文件的上下文规则
-t, --type=TYPE指定要应用的目标上下文类型

示例

假设我们有一个 Web 应用程序,其根目录是 /var/www/html/MyWebApp,我们想要将该目录及其子目录和文件的安全上下文设置为 httpd_sys_content_t 类型,以便 Apache Web 服务器可以访问它。

首先,使用以下命令添加上下文规则

semanage fcontext -a -t httpd_sys_content_t "/var/www/html/MyWebApp(/.*)?"
  • -a 表示添加新的规则
  • -t 指定了要应用的目标上下文类型
  • “/var/www/html/MyWebApp(/.*)?” 是一个正则表达式,匹配 /var/www/html/MyWebApp 及其子目录和文件

然后,使用以下命令使规则生效:

restorecon -Rv /var/www/html/MyWebApp
  • -R 表示递归地恢复所有文件上下文
  • -v 表示显示详细信息

现在,/var/www/html/MyWebApp 及其所有子目录和文件都具有了 httpd_sys_content_t 类型的安全上下文,允许 Apache Web 服务器访问这个 Web 应用程序

❗ 注意,使用 semanage fcontextrestorecon 命令需要具有超级用户权限(root)。在使用这些工具时,务必小心并确保了解 SELinux策略的影响。不正确的上下文设置可能导致应用程序无法访问文件,因此建议在生产环境中谨慎操作,并备份相关文件和配置

总结💯

好啦,我们现在来总结一下:

  • SELinux(Security-Enhanced Linux)是一种强制访问控制(Mandatory Access Control,MAC)系统,它使用类型强制机制将每个对象(进程、文件、目录等)分配给一个唯一的安全类型;使用安全策略来定义系统中的规则和规范,指定了哪些进程、用户、角色和类型可以访问特定的资源,以及在什么条件下允许访问。通过这些 机制,SELinux 实现了高级别的安全控制,限制了未经授权的访问,提供了额外的安全层级
  • 我们使用 semanage fcontextrestoreconchcon这些命令更改SELinux上下文

感谢💖

好啦,这次的分享就到这里,感谢大家看到这里🤞

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值