介绍
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 模式
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
重启机器即可