Linux红帽:RHCSA认证知识讲解(十 二)调试 SELinux,如何管理 SELinux 的运行模式、安全策略、端口和上下文策略

发布于:2025-04-08 ⋅ 阅读:(21) ⋅ 点赞:(0)


前言

  • 在红帽 Linux 系统的管理工作中,SELinux 的调试和管理是系统管理员经常会遇到的重要任务
  • 这些任务对于保障系统的安全性和稳定性起着关键作用
  • 本文将深入且详细地讲解如何调试 SELinux,包括如何管理 SELinux 的运行模式、安全策略、端口和上下文策略等内容
  • 掌握这些技能,对于确保系统的可靠性和安全性意义重大。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的RHCSA认证知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12901802.html?spm=1001.2014.3001.5482


一、SELinux 简介

  • SELinux 是由美国 NSA(国家安全局)开发的一套基于内核的增强型强制安全保护机制
  • 简单来说,它就像是系统的一个安全卫士,主要针对用户、进程和文件进行安全标签的分配和相关限制
  • SELinux 的安全策略由 NSA 和 Red Hat 提供,能够有效增强系统的安全性。有了它,系统就多了一层防护,能更好地抵御各种潜在的安全威胁

二、SELinux 的运行模式

SELinux 有三种运行模式,每种模式都有不同的作用,下面我们来详细了解一下。

  1. enforcing(强制模式):在这种模式下,SELinux 会严格执行安全策略,任何违反策略的行为都会被阻止。就好比一个严格的保安,不允许任何不符合规定的行为发生。
  2. permissive(宽松模式):此时 SELinux 会记录违反策略的行为,但不会阻止这些行为。它就像一个记录员,只记录违规行为,而不采取行动。
  3. disabled(禁用模式):在这个模式下,SELinux 完全被禁用,不会对系统进行任何安全策略的限制。这就相当于把保安撤掉了,系统处于一种没有安全策略约束的状态。

2.1 查看和切换 SELinux 模式

  1. 查看 SELinux 模式:我们可以使用以下命令查看当前的 SELinux 模式,非常简单:
getenforce

在这里插入图片描述

  1. 临时切换 SELinux 模式:如果我们想要临时切换 SELinux 模式,可以使用setenforce命令。
    • 切换到强制模式:
setenforce 1
  • 切换到宽松模式:
    
setenforce 0
  1. 永久切换 SELinux 模式:要永久更改 SELinux 模式,就需要修改配置文件并重启系统了。
    • 修改配置文件:
vim /etc/selinux/config

打开配置文件后,将SELINUX参数设置为enforcingpermissivedisabled。例如,设置为强制模式:在这里插入图片描述

SELINUX=enforcing
- 重启系统:
reboot

三、SELinux 预设安全策略的开关控制

SELinux 提供了许多预设的安全策略开关,我们可以通过一些命令来管理这些开关,下面我们来看看具体怎么做。

  1. 列出所有开关参数:使用以下命令可以列出所有的开关参数:
getsebool -a

在这里插入图片描述

  1. 修改开关状态
    • 打开某个开关(永久生效):
setsebool -P 开关参数=on
- 关闭某个开关(永久生效):
setsebool -P 开关参数=off

四、管理 SELinux 安全端口开放策略

SELinux 通过安全策略控制哪些端口可以被特定的服务使用。我们可以通过以下命令来管理端口策略。

  1. 列出所有预设的端口开放策略:使用这个命令可以查看所有预设的端口开放策略:
semanage port -l
  1. 添加某个类别的开放端口:如果我们要为某个服务添加一个新的开放端口,可以使用以下命令。例如,为 httpd 服务添加一个新端口 82/tcp:
semanage port -a -t http_port_t -p tcp 82
  1. 删除某个类别的开放端口:要是想删除某个服务的开放端口,就用这个命令。例如,删除 httpd 服务的端口 82/tcp:
semanage port -d -t http_port_t -p tcp 82

五、管理 SELinux 安全上下文策略

SELinux 通过安全上下文策略来控制文件、目录和其他对象的访问权限。我们可以使用以下命令来管理上下文策略。

  1. 列出所有预设的安全上下文策略:用这个命令可以查看所有预设的安全上下文策略:
semanage fcontext -l
  1. 添加文档的上下文策略:如果要为某个文档或目录添加一个上下文策略,可以使用以下命令。例如,为/var/www/html目录添加一个上下文策略:
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
  1. 修改文档的上下文策略:要是想修改某个文档或目录的上下文策略,就用这个命令。例如,修改/var/www/html目录的上下文策略:
semanage fcontext -m -t httpd_sys_content_t "/var/www/html(/.*)?"

六、修改 firewalld 防火墙策略

为了确保 httpd 服务能够正常使用,除了配置 SELinux,我们还需要确保防火墙允许 httpd 服务的流量。下面我们来看看如何管理 firewalld 防火墙策略。

  1. 检查 firewalld 防火墙是否已经开启:使用以下命令可以检查防火墙的状态:
systemctl status firewalld
  1. 添加 firewalld 的 service 和 port
    • 添加 service:
firewall-cmd --permanent --add-service=http
- 添加 port:
firewall-cmd --permanent --add-port=82/tcp
  1. 重新加载 firewalld 防火墙策略:添加完之后,记得重新加载防火墙策略,让设置生效:
firewall-cmd --reload

七、真题带练

  • SELinux RHCSA认证知识真题
    在这里插入图片描述

答案

下载软件
[root@node1 ~]# dnf provides semanage  
[root@node1 ~]# dnf -y install policycoreutils-python-utils  
设置http 82端口
[root@node1 ~]# semanage port -l  | grep http
[root@node1 ~]# semanage port -a -t http_port_t -p tcp 82
[root@node1 ~]# ll /var/www/html  -Z
[root@node1 ~]# semanage fcontext -m -t httpd_sys_content_t /var/www/html/file1
[root@node1 ~]# restorecon -RV /var/www/html
防火墙设置
[root@node1 ~]# firewall-cmd --permanent --add-service=http
[root@node1 ~]# firewall-cmd --permanent --add-port=82/tcp
[root@node1 ~]# firewall-cmd --reload
httpd的设置
[root@node1 ~]# systemctl restart httpd
[root@node1 ~]# systemctl enable --now httpd

验证
[root@node1 ~]# curl http://node1.domain250.example.com:82/file1
[root@node1 ~]# curl http://node1.domain250.example.com:82/file2
[root@node1 ~]# curl http://node1.domain250.example.com:82/file3

逐行讲解

  1. dnf provides semanage

    • 作用:查询哪个软件包包含 semanage 命令。就像在问“电脑里哪个软件有这个工具?”,这里查到是 policycoreutils-python-utils 软件包。
      在这里插入图片描述
  2. dnf -y install policycoreutils-python-utils

    • 作用:安装 policycoreutils-python-utils 软件包,-y 表示自动确认安装,不用手动输入“yes”。
  3. semanage port -l | grep http

    • 作用:列出系统中与 http 相关的端口规则。semanage port -l 是列端口规则,grep http 是筛选出含“http”的内容。
  4. semanage port -a -t http_port_t -p tcp 82

    • 作用:添加一个新的端口规则,允许 tcp 82 端口通过 SELinux 策略(SELinux 是系统的安全机制,这里告诉它 82 端口可以用)。
  5. ll /var/www/html -Z

    • 作用:查看 /var/www/html 目录下文件的 SELinux 安全上下文(类似文件的“安全标签”)。
  6. semanage fcontext -m -t httpd_sys_content_t /var/www/html/file1

    • 作用:修改 file1 文件的 SELinux 上下文为 httpd_sys_content_t(让文件符合网页服务的安全规则)。
      在这里插入图片描述
  7. restorecon -RV /var/www/html

    • 作用:恢复 /var/www/html 目录下文件的 SELinux 上下文到默认设置,让前面的修改生效。
  8. firewall-cmd --permanent --add-service=http

    • 作用:在防火墙中永久允许 http 服务通过(防火墙像门卫,这里告诉门卫允许 http 通行)。
  9. firewall-cmd --permanent --add-port=82/tcp

    • 作用:在防火墙中永久允许 tcp 82 端口通过。
  10. firewall-cmd --reload

    • 作用:重新加载防火墙规则,让新设置生效。
  11. systemctl restart httpd

    • 作用:重启 httpd 服务(网页服务,类似让网页服务“重启生效”)。
  12. systemctl enable --now httpd

    • 作用:设置 httpd 服务开机自启动,并且立即启动。
  13. curl http://node1.domain250.example.com:82/file1

    • 作用:用 curl 命令访问网页文件,验证是否能正常获取内容。如果显示文件内容,说明配置成功。

    • 解释为什么只改 file1:因为只有 file1 的 SELinux 上下文和其他文件不一样,通过 ll -Z 能看到这个区别,所以只需要改它。


以上就是这篇博客的全部内容,下一篇我们将继续探索 Redhat 的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的RHCSA认证知识文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12901802.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到