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 时,应该根据具体的需求和环境进行权衡。

相关推荐
A小辣椒12 小时前
TShark:基础知识
linux
AlfredZhao14 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪1 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5202 天前
Linux 11 动态监控指令top
linux
小宇宙Zz2 天前
Maven依赖冲突
java·服务器·maven