Linux 笔记 SELinux 常见操作与介绍

SELinux(Security-Enhanced Linux)是 Linux 操作系统中的一种安全模块,旨在提供更细粒度的访问控制。它最初由美国国家安全局(NSA)开发,目的是增强 Linux 系统的安全性。SELinux 通过强制访问控制(MAC, Mandatory Access Control)来补充传统的自主访问控制(DAC, Discretionary Access Control),从而限制进程和用户只能访问它们明确被允许访问的资源。

一、SELinux 的状态

SELinux 可以处于以下三种状态之一:

  • Enforcing:启用并强制执行所有安全策略。任何违反策略的操作都将被阻止,并记录到日志中。
  • Permissive:虽然会记录违反策略的行为,但不会阻止这些行为发生。这对于调试和测试非常有用。
  • Disabled:完全禁用 SELinux。不推荐在生产环境中这样做,因为它会失去 SELinux 提供的所有保护。

二、管理 SELinux

管理 SELinux 包括配置策略、设置文件标签、调整域权限等。常用的命令和工具包括:

  • sestatus:查看 SELinux 的当前状态。
  • setenforce:临时切换 SELinux 的模式(从 enforcing 到 permissive 或反之)。
  • getenforce:获取 SELinux 的当前模式。
  • chcon:改变文件或目录的安全上下文(标签)。
  • restorecon:恢复文件或目录的默认安全上下文。
  • audit2allow:帮助分析日志中的拒绝事件,并生成相应的策略规则。
  • semanage:管理 SELinux 策略数据库,如添加或修改类型、端口、用户等。

1、getenforce 获取 SELinux 的当前模式

bash 复制代码
getenforce

2、setenforce 临时切换 SELinux 的模式

如果你只是想暂时改变 SELinux 的行为而不完全禁用它,可以使用 setenforce 命令:

  • 切换到 Permissive 模式(记录违规但不强制执行):
bash 复制代码
sudo setenforce 0
  • 切换回 Enforcing 模式(强制执行所有安全策略):
bash 复制代码
sudo setenforce 1

setenforce 命令不能直接将 SELinux 设置为 Disabled 状态。setenforce 只能用来临时切换 SELinux 的模式为 EnforcingPermissive。要永久禁用 SELinux,你需要编辑配置文件并重启系统。

3、永久禁用 SELinux

要永久禁用 SELinux,请按照以下步骤操作:

3.1、编辑 SELinux 配置文件

SELinux 的配置文件通常位于 /etc/selinux/config。你需要以管理员权限打开这个文件进行编辑:

bash 复制代码
sudo vi /etc/selinux/config

找到类似下面的行:

bash 复制代码
SELINUX=enforcing

将其修改为:

bash 复制代码
SELINUX=disabled

这会告诉 SELinux 在下次启动时完全禁用自己。

3.2、重启系统

bash 复制代码
sudo reboot

3.3、验证 SELinux 状态

系统重启后,你可以使用以下命令来验证 SELinux 是否已被禁用:

bash 复制代码
sestatus
或
getenforce

如果输出显示 SELinux status: disabled,那么你就成功地永久禁用了 SELinux。

三、SELinux 的核心概念 (扩展阅读)

1. 策略(Policy)

SELinux 使用策略来定义系统中对象(如文件、网络端口等)和主体(如进程、用户)之间的访问规则。策略非常严格,并且可以根据不同的需求定制。有几种预定义的策略类型:

  • Targeted:这是大多数发行版默认使用的策略,只对特定的服务进行限制,而其他部分则使用宽松的策略。
  • Strict:提供了最严格的控制,适用于高度敏感的环境。
  • MLS(Multi-Level Security):用于实现多级安全,比如政府或军事应用中的机密等级。

2. 标签(Labeling)

在 SELinux 中,每个文件、目录、进程等都被赋予了一个安全上下文(security context),也称为标签。这些标签包含了类型(type)、角色(role)和用户标识(user ID)。例如,一个典型的文件标签可能看起来像这样:

bash 复制代码
system_u:object_r:httpd_sys_content_t:s0

这表示该文件属于 system_u 用户,具有 object_r 角色,并且它的类型是 httpd_sys_content_t

3. 域(Domain)

域是用来描述进程运行时的安全上下文。每个进程都运行在一个特定的域中,而这个域决定了该进程可以做什么以及它可以访问哪些资源。例如,Apache HTTP Server 进程通常会在 httpd_t 域中运行。

4. 类型执行(Type Enforcement)

这是 SELinux 的核心机制之一。它基于类型来决定是否允许某个主体访问某个对象。如果策略不允许某个类型的进程访问某个类型的文件,即使该进程拥有适当的 DAC 权限,也会被拒绝。

四、SELinux 的优点

  • 更高的安全性:通过强制访问控制,有效地减少了恶意软件和错误配置带来的风险。
  • 隔离关键组件:能够更好地隔离应用程序和服务,降低单一漏洞影响整个系统的可能性。
  • 支持复杂的策略:适合需要高级别安全保障的组织和机构。

然而,SELinux 也有一定的学习曲线,特别是在配置和故障排除方面。对于某些应用场景来说,其复杂性可能是不必要的负担(例如,在构建k8s集群时,就会选择关闭SELinux)。因此,在决定是否启用 SELinux 时,应该根据具体的需求和环境进行权衡。

相关推荐
japrin32 分钟前
源代码编译安装X11及相关库、vim,配置vim(2)
linux·编辑器·vim
pursue.dreams38 分钟前
内网Ubuntu搭建minio
linux·运维·ubuntu
liuccn1 小时前
ubuntu 22下解决Unment dependencies问题
运维·服务器·ubuntu
rrokoko1 小时前
Linux 挥别 WinXP 时代协议,USB RNDIS 即将退场
linux
泽克1 小时前
第六章 城市综合管廊工程
笔记
hgdlip2 小时前
今日头条ip属地根据什么显示?不准确怎么办
服务器·网络·tcp/ip
XDU小迷弟2 小时前
第2天:Web应用&架构类别&源码类别&镜像容器&建站模版&编译封装&前后端分离
服务器·前端·安全·web安全·架构·安全架构
鸭梨山大。2 小时前
Apache MINA 反序列化漏洞CVE-2024-52046
linux·安全·apache
lishing62 小时前
Linux驱动开发(18):linux驱动并发与竞态
linux·运维·服务器
LLLuckyGirl~3 小时前
node.js内置模块之---buffer 模块
linux·编辑器·vim