首页 > 系统相关 >Linux Selinux详解

Linux Selinux详解

时间:2024-09-13 08:54:28浏览次数:14  
标签:策略 Selinux 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

重启机器即可

标签:策略,Selinux,Linux,模式,访问,详解,SELinux,进程,上下文
From: https://blog.csdn.net/qq_40797754/article/details/142071911

相关文章

  • Linux 运维三剑客:grep、sed 和 awk 实战案例与命令参数详解
    在Linux运维中,grep、sed和awk是三个非常强大的文本处理工具,它们在处理文本数据时发挥着重要作用。本文将通过一些实战案例,展示这三个工具的使用方法和强大功能,并对它们的命令参数进行详解。grep:文本搜索利器grep是一个强大的文本搜索工具,它使用正则表达式来匹配文本......
  • 注册表 ControlSet001、ControlSet002以及CurrentControlSet 详解
    注册表HKLM\system注意注册表项包含windows启动的三个控件组(额外还可能存在一个备份控件组)。在初始状态下。它们各自是ControlSet001、ControlSet002以及CurrentControlSet。这些控件组中包括了操作系统配置的信息,比方服务、驱动、系统控制、枚举信息等等。默认情况下,ControlSet......
  • Linux调试器--gdb/cgdb
    ......
  • Linux编译器-gcc/g++使用
    1.背景知识1.预处理(进行宏替换)2.编译(生成汇编)3.汇编(生成机器可识别代码)4.连接(生成可执行文件或库文件)2.gcc如何完成格式gcc[选项]要编译的文件[选项][目标文件]预处理(进行宏替换)编译(生成汇编)汇编(生成机器可识别代码)连接(生成可执行文件或库文件)......
  • 【TS】TypeScript配置详解【三】
    简介TypeScript代码最终都会被编译成JavaScript代码来运行。这个编译的过程需要使用TypeScript编译器,我们可以为该编译器配置一些编译选项。在TypeScript项目的根目录下执行“tsc-init”命令,快速创建一个tsconfig.json文件。该文件用于配置TypeScript编译项目时编......
  • ##嵌入式学习之Linux系统编程##--标准I/O函数
    day01主要内容:linux系统下一切皆文件标准IO---标准库文件IO---系统调用制作库---静态库、动态库基本概念:标准I/O:文件:一组相关数据的有序集合。文件名:这个数据集合的名称。文件类型:lsp-bcd系统调用用户空间进程访问内核的接口把用户从底层的硬件编程......
  • 【TS】TypeScript高级详解【二】
    TypeScript类的使用进行ES5开发的时候,需要使用函数和原型链实现类和继承。ES6引入了class关键字,我们可以更加方便地定义和使用类。作为JavaScript的超集,TypeScript同样支持使用class关键字,并且可以对类的属性和方法等进行静态类型检测。类的定义具体的类定义方式如下:......
  • 【TS】TypeScript基础详解【一】
    Javascript类型缺陷类型引发的问题在编程开发中,有一个共识:错误越早发现,就越容易解决。例如:能在代码编写时发现错误,就不要等到代码编译时才发现(这也是IDE的优势之一)。能在代码编译时发现错误,就不要在代码运行时才发现(类型检测可以帮助我们在这方面做得很好)。能在开发......
  • 在 Linux 系统中设置 Python 虚拟环境
    安装venv模块(如果尚未安装):sudoapt-getinstallpython3-venvsudo:以超级用户权限运行命令。apt-getinstall:使用包管理器安装软件包。python3-venv:要安装的具体软件包名称,这个包提供了创建虚拟环境的工具。创建虚拟环境:在你的项目目录中运行以下命令来创建虚拟环境(例......
  • 【Linux】:信号的保存和信号处理
    朋友们、伙计们,我们又见面了,本期来给大家带来信号的保存和信号处理相关代码和知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!C语言专栏:C语言:从入门到精通数据结构专栏:数据结构个 人 主 页 :stackY、C++专栏  :C++Linux专 栏 ......