百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

SELinux:宽容模式VS强制模式(selinux宽容模式有啥用)

nanshan 2024-10-15 11:28 45 浏览 0 评论

本文首发:看雪论坛 http://bbs.pediy.com/thread-215552.htm

SELinux-hardened 系统通常运行在 Enforcing 模式下,即意味着安全策略决定你是否可以执行你想执行的动作。但是,当你尝试调试 Permissive 的问题时,你需要临时性的关闭 SELinux,你可以选择使 SELinux 运行在 Permissive 模式下,或者整个系统关闭 SELinux,或者对某一类型使用 Permissive 模式。

? Permissive 和 Enforcing 之间切换

支持Permissive策略的目的是为了即使在SELinux系统运行下,那些应用程序依然有权限执行它们想执行的那些动作。在SELinux的Permissive模式下运行的程序不会被SELinux的安全策略保护,而该模式真正的目的是要记录若程序运行在 Enforcing 模式下,它的哪些行为会被拒绝,以便管理员有一个整体的感知。

如果 Kernel 启动的时候支持 SELinux 开发者模式(CONFIG_SECURITY_SELINUX_DEVELOP=y),则支持在 Enforcing 和 Permissive 模式之间切换。否则,内核默认会以 Enforcing 模式启动,而且不允许切换,这样的 Kernel 被认为是最安全的(即使一个黑客已经获得管理员权限,并且成功的执行了关闭 SELinux 的指令,SELinux 也不会被关闭)。大部分的发布版本都拥有开发者模式。之后,一旦你拥有管理员权限,你可以 rebuild 策略,随心所欲的添加到 privileges 中。处于开发者模式下的Kernel还可以再加固,有一个 boolean 选项secure_mode_policyload来禁止切换到 Permissive 模式下,直到你重启系统。

使用命令getenforce或者sestatus,来查看当前的状态信息。

使用 setenforce 命令

Enforcing和 Permissive 之间的切换使用setenforce命令。该命令支持 4 个参数:Enforcing,Permissive, 1, 0。

该命令可以临时调整模式。比如,你系统是以 Permissive 模式启动的,你在启动后想调整到 Enforcing 模式,你可以执行setenforce 1来启用 Enforcing 模式。

SELinux 配置文件

当系统启动时从配置文件/etc/selinux/config读取参数SELinux的默认值。

上图中,系统默认启动 Enforcing 模式。

使用 enforcing 内核启动选项

另一个决定哪种模式启动的方法是使用enforcing启动参数。该参数会覆盖配置文件中的设置,所以即使设置了SELinux=Enforcing,然而你启动参数enforcing=0,则系统依然会以 Permissive 模式启动。

应用程序行为上的不同

当我们观察运行在 Permissive 模式下的程序,SELinux 策略似乎没有起作用,其实不完全是,还是有一点作用的。有一种程序可以称为 SELinux-aware 的应用程序,这种程序知道当前系统的 SELinux 处于哪种模式下,而且在 Permissive 和 Enforcing 两种模式下,程序的行为是不同的。大部分的应用程序在 Permissvie 和 Enforcing 模式下的行为没有什么不同。SELinux-aware 的应用程序通常链接着 libselinux.so 库,可以使用 scanelf 工具查看。

该例子程序在 Permissive 模式下运行会发生错误ENTRYPOINT FAILED

?标记一类型为 Permissive

之前介绍的都是整体上的切换,系统要么运行在 Enforcing 下,要么运行在 Permissive 下。

幸运地是,SELinux 有一个巧妙的特性,你可以指定一个特定的 domain 运行 Permissive,而其他的仍然运行 Enforcing 模式。你所做的只是告诉 semanage 哪个 domain 你想让它处于 Permissive 模式下。

可以使用semanage permissive ‐l查看当前 Permissive 模式下的 domain。

?完全关闭 SELinux

如果你需要完全关闭 SELinux,有两个选择:更新配置文件,使用启动参数。然而,在执行之前,你需要了解关闭后的结果:关闭 SELinux 同时关闭了 context 的产生。意味着,每一个文件的创建和修改(使用替换文件方式的修改,像 vim 之类的)都不会使用 SELinux context 了。如果你之后又以 SELinux 开启的方式启动了,SELinux 将拒绝加载/读取这些文件(它们会被赋予 default_t context (没有扩展属性),只有默认的行为(不是所有的 domain 可以读取和使用))。

因此,当你以 SELinux 关闭的方式启动系统后,你再以 SELinux 开启的方式启动,你需要做整个文件系统的 relabel 操作,而且需要在 Permissive 模式下操作。这之后,你才能再以 Enforcing 模式启动。

通过启动参数禁用 SELinux

如果CONFIG_SELINUX_BOOTPARAM参数启用,你可以使用selinux=0来禁用SELinux

通过配置文件来禁用 SELinux

编辑配置文件/etc/selinux/config,设置SELinux=disabled

?你需要明确的几点

  • SELinux 有两种模式:Permissive 和 Enforcing。

  • 在 Permissive 模式下,SELinux 不会强制执行它的策略,但是会记录它应该block(或者 grant)的动作的行为。

  • SELinux-aware 的应用程序,在 Permissive 模式下和 SELinux 完全关闭的情况下,可能有不同的行为。

  • 特定的类型可以指定为 Perssive 模式,而系统中其他的仍以 Enforcing 模式运行。

  • 完全关闭的 SELinux 会导致文件 context 的不同,所以之后恢复时,需要整个文件系统 relabel。

原文链接:https://wiki.gentoo.org/wiki/SELinux/Tutorials/Permissive_versus_enforcing

本文由 看雪翻译小组 ghostway 编译

声明:转载请保留文章的完整性,注明作者、译者及出处, 并附上原文链接。

相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: