CodeGym /课程 /Docker SELF /介绍SELinux:检查状态、启用、基础命令

介绍SELinux:检查状态、启用、基础命令

Docker SELF
第 5 级 , 课程 2
可用

介绍SELinux:检查状态、启用、基础命令

1. 什么是SELinux?它有什么用?

SELinux (Security-Enhanced Linux) 是一个安全模块,它通过添加强制访问控制的概念来增强传统的权限管理模型。它允许管理员为用户甚至进程设置更加严格的限制,从而尽量减少可能的攻击带来的潜在损害。

它有什么特别之处?

想象一下,你的系统是一幢房子。传统权限(rwx对用户、组和其他人)就像房门的钥匙。但如果有人撬开了门怎么办?SELinux成为第二道防线,通过行为规则加强保护:"嘿,即使你进来了,也不能去浴室!"

SELinux的主要任务:

  1. 防止进程和文件的未授权访问。
  2. 即使进程被攻击,也能将损害降到最低。
  3. 遵循"默认保护"原则(所有内容都禁止,除非明确允许)。

SELinux的工作模式

SELinux可以在三种模式下运行:

  1. Enforcing — 激活状态,执行安全策略并阻止违反规则的进程。
  2. Permissive — 仅记录违规则件到日志但不阻止操作。
  3. Disabled — 完全禁用。
有趣的小知识:

在enforcing模式下,SELinux就像系统的严厉大哥。而permissive模式就像唠叨的弟弟,只会抱怨,但是啥都不干。


2. 检查SELinux状态

首先我们来看看SELinux是否启用以及它运行在哪种模式下。有几个很方便的命令可以做到这一点。

命令 getenforce

这个命令会简单告诉你当前使用的模式是哪个:EnforcingPermissive,还是Disabled

$ getenforce
Enforcing

如果输出Disabled,说明SELinux被禁用了——这意味着你需要稍微多做一些工作来启用它,但我们稍后会讨论这个。

命令 sestatus

你可以通过这个命令获取更详细的SELinux状态报告。它会显示当前状态、活动模式和所用的策略。

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing

在这里你可以看到:

  • enabled/disabled — SELinux是否启用。
  • current mode — 当前模式 (enforcing, permissive)。
  • loaded policy name — 加载的策略。例如,"targeted" 表示SELinux仅对关键进程应用控制。

3. SELinux模式切换

要更改SELinux的当前工作模式,可以使用命令setenforce

切换到permissive模式

如果你想暂时“放松”SELinux,可以启用permissive模式。

$ sudo setenforce 0

现在SELinux将仅记录违规行为,但不会阻止它们。你可以通过命令getenforce检查新的设置:

$ getenforce
Permissive

切换回enforcing模式

当你想重新开启严格控制时,执行:

$ sudo setenforce 1

当然,检查下结果:

$ getenforce
Enforcing

此更改会立即生效,但仅在系统的下一次重启之前有效。


4. 启用 SELinux

如果 SELinux 被禁用,需要修改配置文件。SELinux 是通过文件 /etc/selinux/config 管理的。

检查当前配置文件

先看看里面都设置了什么。可以使用任意文本编辑器,比如 nano

$ sudo nano /etc/selinux/config

你将看到类似下面的内容:

# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted

切换 SELinux 到启用状态

为了启用 SELinux,把 SELINUX=disabled 修改为 SELINUX=enforcingSELINUX=permissive

修改后的文件示例如下:

# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted

编辑后保存文件并重新启动系统:

$ sudo reboot

重启之后,可以使用 sestatus 检查状态,确保 SELinux 已启用。


5. SELinux上下文解析

什么是上下文?

上下文是SELinux用来管理访问的一种标签。每个文件、进程和用户都有自己的上下文。

你可以使用命令ls -Z来查看文件的上下文。例如:

$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

这是什么意思呢?

  1. unconfinedu — SELinux用户。
  2. objectr — 对象类型。
  3. httpdsyscontent_t — 访问类型(在这个例子中与web服务器相关)。
  4. s0 — 安全级别。

更改上下文

如果SELinux阻止你的应用程序正常运行,可能需要更改文件的上下文。使用命令chcon

$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html

这个命令临时更改文件的上下文类型。然而,在重启后更改可能会丢失,因此对于永久配置,最好修改SELinux策略(稍后会讲到)。


6. SELinux 工作示例

我们来看看一个例子。你是一个服务器管理员,想要部署一个 web 服务器,但 SELinux 阻止访问目录 /var/www/html 中的文件。

步骤:

  1. 检查 SELinux 的状态:

    $ sestatus
    

    确保 SELinux 已启用且运行在 enforcing 模式。

  2. 查看文件上下文:

    $ ls -Z /var/www/html
    
  3. 如果上下文不正确,修改它:

    $ sudo chcon -t httpd_sys_content_t /var/www/html/*
    
  4. 检查 web 服务器是否正常工作。


7. 常见错误和问题

  1. SELinux 被关闭,但你没有注意到。 一定要用 sestatus 检查状态。很多管理员安装系统后忘记启用 SELinux。

  2. "为什么我的服务不能正常运行?" SELinux 阻止了访问。用 audit.log 来分析:

    $ sudo cat /var/log/audit/audit.log | grep denied
    
  3. 上下文的更改没有保存。 不要用 chcon,而是用像 semanage 这样的永久性更改命令。

学习 SELinux 就像准备马拉松:起初可能有点难,但久而久之你会明白这个工具如何显著提升系统安全性。用这些知识,让自己成为一个即使面对最牛的黑客也能毫发无损的管理员。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION