Linux Selinux详解

介绍

Linux SELinux是一种安全增强的Linux,它可以让用户和管理员对访问控制有更多的控制。它是一种标签机制,可以对文件和其他对象提供高级别的安全保护,防止未授权的进程或者没有必要访问的授权进程进行滥用。SELinux最初是由美国国家安全局(NSA)开发的,作为一系列使用Linux安全模块(LSM)的Linux内核补丁。SELinux于2000年发布给开源社区,并于2003年集成到上游Linux内核中。

SELinux的工作原理是,它为系统上的应用程序、进程和文件定义了访问控制。它使用安全策略,这是一组规则,告诉SELinux什么可以或者不能被访问,来执行策略允许的访问。当一个应用程序或进程(称为主体)发出一个访问一个对象(如文件)的请求时,SELinux会与一个访问向量缓存(AVC)进行检查,其中缓存了主体和对象的权限。如果SELinux无法根据缓存的权限做出访问决定,它就会将请求发送给安全服务器。安全服务器会检查应用程序或进程和文件的安全上下文。安全上下文是从SELinux策略数据库中应用的。然后授予或拒绝权限。如果权限被拒绝,一个“avc: denied”消息将会出现在/var/log/messages中。

SELinux有多种配置方式来保护你的系统。最常见的是目标策略(targeted policy)或多级安全(MLS)。目标策略是默认选项,涵盖了一系列的进程、任务和服务。MLS可以非常复杂,通常只有政府组织使用。你可以通过查看/etc/selinux/config文件来确定你的系统应该运行哪种策略。该文件有一个部分显示了SELinux是处于宽容模式(permissive mode)、强制模式(enforcing mode)还是禁用状态(disabled),以及应该加载哪种策略。SELINUX变量可以设置为disabled、permissive或enforcing来选择其中一个选项。disableddisables会禁用大部分SELinux内核和应用程序代码,使系统在没有任何SELinux保护的情况下运行。permissiveoption会启用SELinux代码,但使其以一种模式运行,即策略会拒绝的访问被允许但被记录。enforcingoption会启用SELinux代码,并使其强制执行并记录访问拒绝。

SELinux还允许在系统上安装多个策略,但只有一个策略可以在任何给定时间处于活动状态。目前,存在多种类型的SELinux策略:targeted, mls等等。

安全上下文

SELinux安全上下文是一种用于标识进程和文件的安全属性的机制,它由五个字段组成:SELinux用户、角色、类型、灵敏度和类别。SELinux用户表示数据或进程的所有者,角色表示数据是文件还是进程,类型表示数据或进程的功能或用途,灵敏度和类别表示数据或进程的保密性等级。SELinux通过比较进程和文件的安全上下文来决定是否允许访问,只有当它们的安全上下文匹配或者符合策略规则时,才会授予访问权限。

SELinux 上下文包括以下字段: user(用户)、role(角色)、type(类型)和 security level(安全级别)。在 SELinux 策略中,SELinux 类型信息可能是最重要的。这是因为,最常用的、用于定义允许在进程和系统资源间进行的交互的策略规则会使用 SELinux 类型而不是 SELinux 的完整上下文。SELinux 类型通常以 _t 结尾。例如,Web 服务器的类型名称是 httpd_t。通常位于 /var/www/html/ 中的文件和目录的类型上下文是 httpd_sys_content_t。通常位于 /tmp 和 /var/tmp/ 中的文件和目录的类型上下文是 tmp_t。Web 服务器端口的类型上下文是 http_port_t

例如,有一个策略规则允许 Apache(作为 httpd_t运行的 Web 服务器进程)访问通常位于 /var/www/html/ 及其他 Web 服务器目录(httpd_sys_content_t)中的文件和目录。策略中没有针对通常位于 /tmp 和 /var/tmp / 中的文件的允许规则,因此不允许访问。有了 SELinux,即使 Apache 被破坏并且恶意的脚本可以访问,它仍然无法访问 /tmp 目录。

图 1.1. SELinux 允许以 httpd_t 身份运行的 Apache 进程访问 /var/www/html/ 目录,并且它拒绝同一进程访问 /data/mysql/ 目录,因为 httpd_t 和 mysqld_db_t 类型上下文没有允许规则。另一方面,作为 mysqld_t 运行的 MariaDB 进程能够访问 /data/mysql/ 目录,SELinux 也正确拒绝类型为 mysqld_t 的进程,以访问标记为 httpd_sys_content_t 的 /var/www/html/ 目录。

SELinux 允许以 httpd_t 身份运行的 Apache 进程访问 /var/www/html/ 目录,并且它拒绝同一进程访问 /data/mysql/ 目录,因为 httpd_t 和 mysqld_db_t 类型上下文没有允许规则。另一方面,作为 mysqld_t 运行的 MariaDB 进程能够访问 /data/mysql/ 目录,SELinux 也正确拒绝类型为 mysqld_t 的进程,以访问标记为 httpd_sys_content_t 的 /var/www/html/ 目录。

Selinux 模式

SELinux 模式是指 SELinux 的工作状态,它可以影响 SELinux 如何控制进程和资源之间的访问。SELinux 有三种模式,分别是:

  • 强制模式(enforcing mode):这是 SELinux 的默认模式,它会根据安全策略和规则来阻止和记录违反访问控制的行为。这种模式可以提高系统的安全性,但也可能导致一些正常的操作被拒绝。
  • 宽容模式(permissive mode):这是 SELinux 的调试模式,它不会阻止违反访问控制的行为,只会记录到日志中。这种模式可以用来检查 SELinux 的配置是否正确,或者排除一些问题的原因。
  • 禁用模式(disabled mode):这是 SELinux 的关闭状态,它不会执行任何访问控制,也不会记录任何日志。这种模式可以用来临时关闭 SELinux 的功能,或者在不需要 SELinux 的场合使用。

如何管理Selinux

管理 SELinux 是指对 SELinux 的配置、监控和维护的过程,它涉及到以下几个方面:

  • 设置 SELinux 的模式,即强制模式、宽容模式或禁用模式,以决定 SELinux 如何处理访问控制的违规行为。一般来说,强制模式是最安全的,宽容模式是用于调试的,禁用模式是不推荐的。你可以通过编辑 /etc/selinux/config 文件或使用命令行工具来设置 SELinux 的模式。
  • 选择 SELinux 的策略,即目标策略、多级安全策略或自定义策略,以决定 SELinux 如何定义和执行访问控制的规则。目标策略是默认的,它只针对一些特定的进程和服务进行访问控制。多级安全策略是更复杂的,它基于用户、角色和等级进行访问控制。自定义策略是根据用户的需求和场景来编写的。你可以通过查看 /etc/selinux/config 文件或使用命令行工具来选择 SELinux 的策略。
  • 管理 SELinux 的标签,即为系统中的文件、进程和端口分配合适的安全上下文,以便 SELinux 根据类型强制访问控制来判断是否允许访问。你可以使用命令行工具或图形工具来查看、修改和恢复 SELinux 的标签。
  • 调整 SELinux 的布尔值,即开启或关闭 SELinux 中的某些功能或特性,以便灵活地适应不同的应用场景。你可以使用命令行工具或图形工具来查看和修改 SELinux 的布尔值。
  • 处理 SELinux 的错误,即分析和解决 SELinux 阻止或记录的访问控制的违规行为,以便优化 SELinux 的配置和性能。你可以使用命令行工具或图形工具来查看、审计和修复 SELinux 的错误。

如何查看我的SELinux配置?

如果您想查看您的SELinux配置,您可以使用以下几种方法:

  • 运行命令 sestatus ,查看SELinux的状态、模式、策略和其他信息。例如,您可以看到SELinux是启用还是禁用,是强制模式还是宽容模式,以及使用的策略类型。
  • 运行命令 getenforce ,查看SELinux的当前模式。例如,您可以看到SELinux是强制模式、宽容模式还是禁用模式。
  • 查看文件 /etc/selinux/config ,查看SELinux的配置文件。例如,您可以看到SELinux的默认模式和策略类型。

Selinux 管理命令

Selinux 配置文件

[root@Demo01 ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


getenforce :检查Selinux 状态

[root@Demo01 ~]# getenforce
disabled

**sestatus **:也可以用下述命令;如果SELinux status参数为enabled即为开启状态

[root@Demo01 ~]# sestatus -v
SELinux status:                 disabled

二、关闭SELinux:

1、临时关闭(重启机器后失效):

#setenforce 0设置为permissive模式;setenforce 1 设置为enforcing模式;
setenforce 0                  

2、永久关闭(需要重启机器):

sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config

重启机器即可

2、永久关闭(需要重启机器):

sed -i s#SELINUX=enforcing#SELINUX=disabled# /etc/selinux/config

重启机器即可

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Lyle_Tu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值