Linux红帽:RHCSA认证知识讲解(十 二)调试 SELinux,如何管理 SELinux 的运行模式、安全策略、端口和上下文策略
前言
- 在红帽 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 --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
逐行讲解
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
非常感谢您的阅读,喜欢的话记得三连哦 |