Linux红帽:RHCSA认证知识讲解(十 二)调试 SELinux,如何管理 SELinux 的运行模式、安全策略、端口和上下文策略_rhcsa的selinux
Linux红帽:RHCSA认证知识讲解(十 二)调试 SELinux,如何管理 SELinux 的运行模式、安全策略、端口和上下文策略
- 前言
 - 一、SELinux 简介
 - 二、SELinux 的运行模式
 - 
- 2.1 查看和切换 SELinux 模式
 
 - 三、SELinux 预设安全策略的开关控制
 - 四、管理 SELinux 安全端口开放策略
 - 五、管理 SELinux 安全上下文策略
 - 六、修改 firewalld 防火墙策略
 - 七、真题带练
 - 
- 
- 答案
 - 逐行讲解
 
 
 - 
 
前言
- 在红帽 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 有三种运行模式,每种模式都有不同的作用,下面我们来详细了解一下。
- enforcing(强制模式):在这种模式下,SELinux 会严格执行安全策略,任何违反策略的行为都会被阻止。就好比一个严格的保安,不允许任何不符合规定的行为发生。
 - permissive(宽松模式):此时 SELinux 会记录违反策略的行为,但不会阻止这些行为。它就像一个记录员,只记录违规行为,而不采取行动。
 - disabled(禁用模式):在这个模式下,SELinux 完全被禁用,不会对系统进行任何安全策略的限制。这就相当于把保安撤掉了,系统处于一种没有安全策略约束的状态。
 
2.1 查看和切换 SELinux 模式
- 查看 SELinux 模式:我们可以使用以下命令查看当前的 SELinux 模式,非常简单:
 
getenforce

- 临时切换 SELinux 模式:如果我们想要临时切换 SELinux 模式,可以使用
setenforce命令。- 切换到强制模式:
 
 
setenforce 1
- 
切换到宽松模式: 
setenforce 0
- 永久切换 SELinux 模式:要永久更改 SELinux 模式,就需要修改配置文件并重启系统了。
- 修改配置文件:
 
 
vim /etc/selinux/config
打开配置文件后,将SELINUX参数设置为enforcing、permissive或disabled。例如,设置为强制模式:
SELINUX=enforcing
- 重启系统:
reboot
三、SELinux 预设安全策略的开关控制
SELinux 提供了许多预设的安全策略开关,我们可以通过一些命令来管理这些开关,下面我们来看看具体怎么做。
- 列出所有开关参数:使用以下命令可以列出所有的开关参数:
 
getsebool -a

- 修改开关状态:
- 打开某个开关(永久生效):
 
 
setsebool -P 开关参数=on
- 关闭某个开关(永久生效):
setsebool -P 开关参数=off
四、管理 SELinux 安全端口开放策略
SELinux 通过安全策略控制哪些端口可以被特定的服务使用。我们可以通过以下命令来管理端口策略。
- 列出所有预设的端口开放策略:使用这个命令可以查看所有预设的端口开放策略:
 
semanage port -l
- 添加某个类别的开放端口:如果我们要为某个服务添加一个新的开放端口,可以使用以下命令。例如,为 httpd 服务添加一个新端口 82/tcp:
 
semanage port -a -t http_port_t -p tcp 82
- 删除某个类别的开放端口:要是想删除某个服务的开放端口,就用这个命令。例如,删除 httpd 服务的端口 82/tcp:
 
semanage port -d -t http_port_t -p tcp 82
五、管理 SELinux 安全上下文策略
SELinux 通过安全上下文策略来控制文件、目录和其他对象的访问权限。我们可以使用以下命令来管理上下文策略。
- 列出所有预设的安全上下文策略:用这个命令可以查看所有预设的安全上下文策略:
 
semanage fcontext -l
- 添加文档的上下文策略:如果要为某个文档或目录添加一个上下文策略,可以使用以下命令。例如,为
/var/www/html目录添加一个上下文策略: 
semanage fcontext -a -t httpd_sys_content_t \"/var/www/html(/.*)?\"
- 修改文档的上下文策略:要是想修改某个文档或目录的上下文策略,就用这个命令。例如,修改
/var/www/html目录的上下文策略: 
semanage fcontext -m -t httpd_sys_content_t \"/var/www/html(/.*)?\"
六、修改 firewalld 防火墙策略
为了确保 httpd 服务能够正常使用,除了配置 SELinux,我们还需要确保防火墙允许 httpd 服务的流量。下面我们来看看如何管理 firewalld 防火墙策略。
- 检查 firewalld 防火墙是否已经开启:使用以下命令可以检查防火墙的状态:
 
systemctl status firewalld
- 添加 firewalld 的 service 和 port:
- 添加 service:
 
 
firewall-cmd --permanent --add-service=http
- 添加 port:
firewall-cmd --permanent --add-port=82/tcp
- 重新加载 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 --reloadhttpd的设置[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
逐行讲解
- 
dnf provides semanage- 作用:查询哪个软件包包含 
semanage命令。就像在问“电脑里哪个软件有这个工具?”,这里查到是policycoreutils-python-utils软件包。

 
 - 作用:查询哪个软件包包含 
 - 
dnf -y install policycoreutils-python-utils- 作用:安装 
policycoreutils-python-utils软件包,-y表示自动确认安装,不用手动输入“yes”。 
 - 作用:安装 
 - 
semanage port -l | grep http- 作用:列出系统中与 
http相关的端口规则。semanage port -l是列端口规则,grep http是筛选出含“http”的内容。 
 - 作用:列出系统中与 
 - 
semanage port -a -t http_port_t -p tcp 82- 作用:添加一个新的端口规则,允许 
tcp 82端口通过 SELinux 策略(SELinux 是系统的安全机制,这里告诉它 82 端口可以用)。 
 - 作用:添加一个新的端口规则,允许 
 - 
ll /var/www/html -Z- 作用:查看 
/var/www/html目录下文件的 SELinux 安全上下文(类似文件的“安全标签”)。 
 - 作用:查看 
 - 
semanage fcontext -m -t httpd_sys_content_t /var/www/html/file1- 作用:修改 
file1文件的 SELinux 上下文为httpd_sys_content_t(让文件符合网页服务的安全规则)。

 
 - 作用:修改 
 - 
restorecon -RV /var/www/html- 作用:恢复 
/var/www/html目录下文件的 SELinux 上下文到默认设置,让前面的修改生效。 
 - 作用:恢复 
 - 
firewall-cmd --permanent --add-service=http- 作用:在防火墙中永久允许 
http服务通过(防火墙像门卫,这里告诉门卫允许 http 通行)。 
 - 作用:在防火墙中永久允许 
 - 
firewall-cmd --permanent --add-port=82/tcp- 作用:在防火墙中永久允许 
tcp 82端口通过。 
 - 作用:在防火墙中永久允许 
 - 
firewall-cmd --reload- 作用:重新加载防火墙规则,让新设置生效。
 
 - 
systemctl restart httpd- 作用:重启 
httpd服务(网页服务,类似让网页服务“重启生效”)。 
 - 作用:重启 
 - 
systemctl enable --now httpd- 作用:设置 
httpd服务开机自启动,并且立即启动。 
 - 作用:设置 
 - 
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



