云计算百科
云计算领域专业知识百科平台

Linux(CentOS)系统管理入门笔记(第二十二期)——SELinux 安全加固——上下文、布尔值与故障排查

Linux(CentOS)系统管理入门笔记(第二十二期)——SELinux 安全加固——上下文、布尔值与故障排查

Linux系统管理入门系列更多文章欢迎访问:

Linux入门——系统管理1、Linux入门——系统管理2

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~

引言:Linux 安全的“第二道锁”——当文件权限不够用的时候

我们学习了文件权限(rwx)、用户管理(UID/GID)和防火墙(firewalld)。这些都是 Linux 安全体系的重要组成部分。但有一个问题始终存在:文件权限只能控制“谁能访问”,无法控制“怎么访问”。

想象一下:你有一栋大楼,每间办公室都有门锁(文件权限)——只有特定的人(用户/组)才能进入。但如果某个员工被黑客控制了,黑客假扮成这个员工进入大楼,他就能自由访问这个员工有权进入的所有房间。

这就是 Linux 文件权限模型的本质缺陷——权限绑定的是“身份”,而不是“行为”。

  • Web 服务器进程(以 apache 用户运行)可以访问 /var/www/html——这是正常的
  • 但如果黑客攻破了 Web 服务器,同样的 apache 进程还可能访问 /tmp、/var/tmp,甚至通过漏洞读取 /etc/passwd——这是灾难!

SELinux(Security-Enhanced Linux,安全增强 Linux) 解决了这个问题。它为每个进程、文件、目录、端口都打上了一个“安全标签”(SELinux 上下文),并定义了一套严格的访问规则——即使你是 root,如果 SELinux 策略不允许,你也无法执行某个操作。

传统 DAC(自主访问控制): SELinux MAC(强制访问控制):
“你是谁,决定了你能干什么” “你的标签是什么,决定了你能干什么”
↓ ↓
用户身份(UID) 安全上下文(上下文)

SELinux 不是替代文件权限,而是在其之上构建的第二道防线。它以 最小权限原则 为核心——默认拒绝所有操作,只有明确允许的才能执行。

本期将系统学习 SELinux 的核心概念与实战管理:

  • SELinux 概述:DAC vs MAC、SELinux 的目标
  • SELinux 模式:Enforcing / Permissive / Disabled
  • 安全上下文管理:文件、进程、端口的标签
  • SELinux 布尔值:开关式策略调整
  • 故障排查:setroubleshoot 与 sealert 诊断工具

读完这一期,你将掌握 Linux 安全体系中最深层的防御机制——从“能访问”到“能安全访问”的跃升。

— Compiled and Authored by Whisky — Augest 2
nd, 2026

目录

  • SELinux 概述:文件权限之外的“行为管控”
    • 1.1 DAC vs MAC
    • 1.2 SELinux 的目标
  • SELinux 工作模式
    • 2.1 三种模式详解
    • 2.2 查看与设置模式
    • 2.3 模式切换注意事项
  • SELinux 安全上下文
    • 3.1 上下文的结构与 -Z 选项
    • 3.2 新文件的默认上下文
    • 3.3 chcon:临时修改上下文
    • 3.4 restorecon:恢复默认上下文
    • 3.5 semanage fcontext:永久定义默认上下文
    • 3.6 实战:配置自定义 Web 目录
  • SELinux 端口管理
    • 4.1 端口标签的概念
    • 4.2 查看与添加端口标签
    • 4.3 实战:Web 服务使用自定义端口
  • SELinux 布尔值
    • 5.1 什么是布尔值
    • 5.2 查看与设置布尔值
    • 5.3 实战:允许 httpd 访问用户家目录
  • SELinux 故障排查
    • 6.1 setroubleshoot-server:自动诊断
    • 6.2 sealert:详细排查工具
    • 6.3 SELinux 问题处理思路
  • 总结与速查手册
  • 1. SELinux 概述:文件权限之外的“行为管控”

    1.1 DAC vs MAC

    访问控制模型全称控制依据代表
    DAC Discretionary Access Control(自主访问控制) 用户身份(UID/GID) Linux 文件权限(rwx)
    MAC Mandatory Access Control(强制访问控制) 安全标签/上下文 SELinux、AppArmor

    DAC 的本质:由文件所有者自主决定谁可以访问(chmod/chown)。root 用户可以访问任何文件——这对安全来说是巨大的风险。

    MAC 的本质:由系统策略强制规定——即使你是 root,如果没有匹配的安全标签,操作也会被拒绝。

    # 即使 root 用户,SELinux 策略也可以阻止操作
    [root@centos7 ~]# echo test > /var/www/html/index.html
    -bash: /var/www/html/index.html: Permission denied
    # 明明是 root,却被拒绝了——这就是 SELinux 在起作用!

    1.2 SELinux 的目标

    主要目标:防止已遭泄露的系统服务访问用户数据。

    场景:黑客攻破了 Web 服务器(apache 进程),获得了 apache 用户的权限。在传统的 DAC 模型下,apache 用户可能能访问 /tmp、/var/tmp 甚至读取 /etc/passwd。

    在 SELinux 的保护下:

    • apache 进程的标签是 httpd_t
    • /var/www/html 文件的标签是 httpd_sys_content_t
    • /tmp 目录的标签是 tmp_t
    • SELinux 策略规定:httpd_t 只允许访问 httpd_sys_content_t 标签的文件
    • 即使 apache 用户有权限访问 /tmp,SELinux 策略也会阻止——因为标签不匹配!

    💡 白话理解:文件权限是“门禁卡”(谁有卡能进门),SELinux 是“保安”(即使有卡,保安不批准也不能进,也不能去不该去的地方)。

    2. SELinux 工作模式

    2.1 三种模式详解

    模式访问控制违规记录推荐场景
    Enforcing(强制) ✅ 强制执行 ✅ 记录 生产环境
    Permissive(允许) ❌ 不强制(仅警告) ✅ 记录 调试/测试
    Disabled(禁用) ❌ 完全关闭 ❌ 不记录 ❌ 不推荐

    # 查看当前模式
    [root@centos7 ~]# getenforce
    Enforcing

    2.2 查看与设置模式

    # 查看当前模式
    [root@centos7 ~]# getenforce

    # 临时切换模式(立即生效,无需重启)
    [root@centos7 ~]# setenforce 0 # 切换到 Permissive
    [root@centos7 ~]# setenforce 1 # 切换到 Enforcing
    # 或使用名称
    [root@centos7 ~]# setenforce Permissive
    [root@centos7 ~]# setenforce Enforcing

    # 永久设置(修改配置文件,需重启)
    [root@centos7 ~]# vim /etc/selinux/config
    SELINUX=enforcing # 可选:enforcing / permissive / disabled
    SELINUXTYPE=targeted # 策略类型:targeted 是默认

    模式切换注意事项:

    切换方向是否需要重启
    Enforcing ↔ Permissive ❌ 不需要
    Enforcing → Disabled ✅ 需要重启
    Disabled → Enforcing/Permissive ✅ 需要重启

    2.3 内核参数启动时设置 SELinux 模式

    在 GRUB2 启动菜单中可通过内核参数控制 SELinux 模式(常用于故障修复):

    内核参数效果
    enforcing=0 启动时进入 Permissive 模式
    enforcing=1 启动时进入 Enforcing 模式(默认)
    selinux=0 完全禁用 SELinux

    3. SELinux 安全上下文

    3.1 上下文的结构与 -Z 选项

    SELinux 安全上下文格式:

    用户:角色:类型:敏感度

    部分含义示例
    用户(user) SELinux 用户身份,与 Linux 用户不同 unconfined_u、system_u
    角色(role) 进程角色(进程是 _r,文件是 _r) object_r
    类型(type) 核心部分,以 _t 结尾,策略基于类型匹配 httpd_t、httpd_sys_content_t
    敏感度(level) MLS/MCS 安全级别(多级安全) s0、s0-s0:c0.c1023

    使用 -Z 查看安全上下文:

    # 查看进程的安全上下文
    [root@centos7 ~]# ps -Z
    LABEL PID TTY TIME CMD
    system_u:system_r:sshd_t:s0-s0:c0.c1023 951 ? 00:00:00 sshd
    unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1276 pts/0 00:00:00 bash

    # 查看文件的安全上下文
    [root@centos7 ~]# ls -Z /etc/hosts
    system_u:object_r:net_conf_t:s0 /etc/hosts

    # 查看目录的安全上下文
    [root@centos7 ~]# ls -Zd /var/www/html
    system_u:object_r:httpd_sys_content_t:s0 /var/www/html

    ⚠️ 关键理解:SELinux 基于 类型(type) 做访问控制,而不是用户或角色。httpd_t 能访问 httpd_sys_content_t,但不能访问 tmp_t。

    3.2 新文件的默认上下文

    新文件通常从父目录继承 SELinux 上下文。

    # 在 /tmp 中创建文件(继承 tmp_t)
    [root@centos7 ~]# touch /tmp/testfile
    [root@centos7 ~]# ls -Z /tmp/testfile
    unconfined_u:object_r:user_tmp_t:s0 /tmp/testfile

    # 复制到 /root(继承 admin_home_t)
    [root@centos7 ~]# cp /tmp/testfile /root/
    [root@centos7 ~]# ls -Z /root/testfile
    unconfined_u:object_r:admin_home_t:s0 /root/testfile

    两种情况上下文保持不变:

    操作SELinux 上下文变化
    cp -a(保留属性) ❌ 不变
    mv(移动) ❌ 不变

    # 移动文件,上下文不变(仍是 user_tmp_t,但位置在 /root)
    [root@centos7 ~]# mv /tmp/testfile /root/testfile-mv
    [root@centos7 ~]# ls -Z /root/testfile-mv
    unconfined_u:object_r:user_tmp_t:s0 /root/testfile-mv
    # 这可能导致 SELinux 问题——文件在 root 家目录,但标签是 tmp_t!

    3.3 chcon:临时修改上下文

    chcon 用于直接修改文件的 SELinux 上下文,适用于测试和调试。

    # 创建目录并查看上下文
    [root@centos7 ~]# mkdir /www
    [root@centos7 ~]# ls -Zd /www
    unconfined_u:object_r:default_t:s0 /www

    # 修改上下文(改为 httpd_sys_content_t)
    [root@centos7 ~]# chcon -t httpd_sys_content_t /www
    [root@centos7 ~]# ls -Zd /www
    unconfined_u:object_r:httpd_sys_content_t:s0 /www

    # 使用 -R 递归修改
    [root@centos7 ~]# chcon -R -t httpd_sys_content_t /www

    ⚠️ 重要:chcon 的修改不会保存到 SELinux 策略数据库。当系统执行 restorecon 或完整 relabel 时,修改会被重置。

    3.4 restorecon:恢复默认上下文

    restorecon 根据 SELinux 策略数据库中的规则,恢复文件的默认上下文。

    # 恢复单个文件的上下文
    [root@centos7 ~]# restorecon -v /www
    Relabeled /www from unconfined_u:object_r:httpd_sys_content_t:s0 to unconfined_u:object_r:default_t:s0
    # -v:显示恢复过程

    # 递归恢复目录下所有文件
    [root@centos7 ~]# restorecon -Rv /www/

    3.5 semanage fcontext:永久定义默认上下文

    semanage fcontext 在 SELinux 策略数据库中添加/删除/修改上下文规则,restorecon 将依据这些规则恢复上下文。

    # 安装 semanage 工具
    [root@centos7 ~]# yum install -y policycoreutils-python-utils

    # 为 /www 目录定义默认上下文(使用正则表达式匹配所有子文件)
    [root@centos7 ~]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'

    # 查看自定义规则
    [root@centos7 ~]# semanage fcontext -lC
    SELinux fcontext type Context
    /www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

    # 恢复上下文
    [root@centos7 ~]# restorecon -Rv /www/
    Relabeled /www from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:httpd_sys_content_t:s0

    # 删除自定义规则
    [root@centos7 ~]# semanage fcontext -d -t httpd_sys_content_t '/www(/.*)?'

    # 验证删除
    [root@centos7 ~]# semanage fcontext -lC
    # 无输出

    3.6 实战:配置自定义 Web 目录

    场景:将 Web 服务的主目录从 /var/www/html 改为 /www。

    # 1. 创建自定义 Web 目录
    [root@centos7 ~]# mkdir /www
    [root@centos7 ~]# echo "<h1>Hello SELinux</h1>" > /www/index.html

    # 2. 配置 httpd 主目录
    [root@centos7 ~]# vim /etc/httpd/conf/httpd.conf
    DocumentRoot "/www"
    <Directory "/www">
    AllowOverride None
    Require all granted
    </Directory>

    # 3. 尝试启动(失败!SELinux 阻止)
    [root@centos7 ~]# systemctl start httpd
    Job for httpd.service failed because the control process exited with error code.

    [root@centos7 ~]# tail /var/log/messages
    ... SELinux is preventing httpd from getattr access on the directory /www ...

    # 4. 永久修改 SELinux 上下文
    [root@centos7 ~]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
    [root@centos7 ~]# restorecon -Rv /www/

    # 5. 启动成功
    [root@centos7 ~]# systemctl start httpd
    [root@centos7 ~]# curl http://localhost/
    <h1>Hello SELinux</h1>

    4. SELinux 端口管理

    4.1 端口标签的概念

    SELinux 不仅给文件打标签,还给网络端口打标签。当服务进程尝试绑定到某个端口时,SELinux 检查:

    • 进程的域(如 httpd_t)是否被允许绑定到该端口标签(如 http_port_t)

    # 查看端口标签
    [root@centos7 ~]# semanage port -l | grep http_port_t
    http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
    # 注意:httpd 服务可以绑定到这些端口

    4.2 查看与添加端口标签

    # 查看所有端口标签(仅查看自定义的用 -lC)
    [root@centos7 ~]# semanage port -l

    # 添加端口标签(将 18020 端口标记为 http_port_t)
    [root@centos7 ~]# semanage port -a -t http_port_t -p tcp 18020

    # 修改端口标签(将 18020 改为 ssh_port_t)
    [root@centos7 ~]# semanage port -m -t ssh_port_t -p tcp 18020

    # 删除端口标签
    [root@centos7 ~]# semanage port -d -t ssh_port_t -p tcp 18020

    # 查看自定义的端口标签
    [root@centos7 ~]# semanage port -lC
    SELinux Port Type Proto Port Number
    http_port_t tcp 18020

    4.3 实战:Web 服务使用自定义端口

    场景:让 httpd 监听在 18020 端口。

    # 1. 修改 httpd 配置文件
    [root@centos7 ~]# vim /etc/httpd/conf/httpd.conf
    Listen 18020

    # 2. 尝试启动(失败——SELinux 阻止绑定非标准端口)
    [root@centos7 ~]# systemctl restart httpd
    Job for httpd.service failed...
    [root@centos7 ~]# tail /var/log/messages
    ... AH00072: make_sock: could not bind to address 0.0.0.0:18020

    # 3. 将端口添加到 http_port_t 标签
    [root@centos7 ~]# semanage port -a -t http_port_t -p tcp 18020

    # 4. 再次启动成功
    [root@centos7 ~]# systemctl restart httpd
    [root@centos7 ~]# curl http://localhost:18020/
    <h1>Hello SELinux</h1>

    5. SELinux 布尔值

    5.1 什么是布尔值

    SELinux 布尔值是可以在运行时动态开启/关闭的策略开关,用于调整特定功能的行为,而无需修改复杂的策略规则。

    布尔值就像是 SELinux 策略的“开关面板”
    – 每个开关控制一个特定的功能
    – 可以随时打开或关闭
    – 无需重启系统

    5.2 查看与设置布尔值

    # 查看所有布尔值
    [root@centos7 ~]# getsebool -a
    httpd_enable_homedirs —> off
    httpd_unified —> off
    ...

    # 查看特定布尔值
    [root@centos7 ~]# getsebool httpd_enable_homedirs
    httpd_enable_homedirs —> off

    # 临时设置布尔值(运行时生效,重启后恢复)
    [root@centos7 ~]# setsebool httpd_enable_homedirs=1
    # 或使用 on/off/true/false
    [root@centos7 ~]# setsebool httpd_enable_homedirs on

    # 永久设置(写入策略数据库,重启后仍生效)-P
    [root@centos7 ~]# setsebool -P httpd_enable_homedirs=1

    # 使用 semanage 管理布尔值
    [root@centos7 ~]# semanage boolean -l # 查看所有
    [root@centos7 ~]# semanage boolean -lC # 只查看自定义的
    [root@centos7 ~]# semanage boolean -m –on httpd_enable_homedirs # 启用
    [root@centos7 ~]# semanage boolean -m –off httpd_enable_homedirs # 禁用

    5.3 实战:允许 httpd 访问用户家目录

    场景:允许用户通过 ~username URL 访问自己的 public_html 目录。

    # 1. 配置 httpd 启用 UserDir
    [root@centos7 ~]# vim /etc/httpd/conf.d/userdir.conf
    UserDir enabled
    UserDir public_html

    # 2. 用户创建 public_html 目录并写入文件
    [whisky@centos7 ~]$ mkdir ~/public_html
    [whisky@centos7 ~]$ echo "Welcome to whisky's home" > ~/public_html/index.html

    # 3. 确保用户家目录有执行权限(其他人可进入)
    [whisky@centos7 ~]$ chmod 711 ~

    # 4. 尝试访问(SELinux 阻止!)
    [root@centos7 ~]# curl http://localhost/~whisky/
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head><title>403 Forbidden</title></head><body>...

    # 5. 启用 httpd_enable_homedirs 布尔值
    [root@centos7 ~]# setsebool -P httpd_enable_homedirs=1

    # 6. 再次访问
    [root@centos7 ~]# curl http://localhost/~whisky/
    Welcome to whisky's home

    6. SELinux 故障排查

    6.1 setroubleshoot-server:自动诊断

    setroubleshoot-server 服务会自动监控 SELinux 拒绝事件(AVC 消息),并将诊断摘要发送到 /var/log/messages。

    # 安装
    [root@centos7 ~]# yum install -y setroubleshoot-server

    # 服务已集成,无需额外启动

    # 触发一个 SELinux 错误后查看日志
    [root@centos7 ~]# tail -f /var/log/messages
    Nov 30 10:39:34 server setroubleshoot[4035]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /home/whisky/public_html/index.html. For complete SELinux messages run: sealert -l bb10b03c-bed2-4853-85cb-92c1824fd75d

    6.2 sealert:详细排查工具

    根据 /var/log/messages 中的提示,使用 sealert 获取完整诊断信息:

    [root@centos7 ~]# sealert -l bb10b03c-bed2-4853-85cb-92c1824fd75d
    SELinux is preventing /usr/sbin/httpd from getattr access on the file /home/whisky/public_html/index.html.

    ***** Plugin public_content (32.5 confidence) suggests ********************
    If you want to treat index.html as public content
    Then you need to change the label on index.html to public_content_t or public_content_rw_t.
    Do
    # semanage fcontext -a -t public_content_t '/home/whisky/public_html/index.html'
    # restorecon -v '/home/whisky/public_html/index.html'

    ***** Plugin catchall_boolean (32.5 confidence) suggests ******************
    If you want to allow httpd to enable homedirs
    Then you must tell SELinux about this by enabling the 'httpd_enable_homedirs' boolean.
    Do
    setsebool -P httpd_enable_homedirs 1
    ...

    sealert 给出了具体的解决方案,通常有多个选项:

    解决方案适用场景
    修改文件上下文(semanage fcontext + restorecon) 文件标签不正确
    调整布尔值(setsebool -P) 功能开关未启用
    修改端口标签(semanage port) 服务使用非标准端口

    6.3 SELinux 问题处理思路

    1. 确认是否 SELinux 引起的
    └─ tail -f /var/log/messages 或 audit2why < /var/log/audit/audit.log

    2. 判断这个拒绝是正常的还是误报
    └─ 如果是正常的阻止(如 httpd 访问 /home),说明 SELinux 在正确工作
    └─ 如果是误报(需要被允许),继续↓

    3. 最常见的 SELinux 问题:文件上下文不正确
    └─ 文件从其他地方移动过来,上下文不匹配
    └─ 解决方法:restorecon -Rv /path

    4. 布尔值设置不当
    └─ 如 httpd_enable_homedirs、ftpd_anon_write 等
    └─ 解决方法:setsebool -P 布尔值=1

    5. 端口上下文不匹配
    └─ 服务绑定到非标准端口
    └─ 解决方法:semanage port -a -t 标签 -p 协议 端口

    6. SELinux 策略 Bug(极少见)
    └─ 使用 audit2allow 生成自定义策略模块

    7. 总结与速查手册

    7.1 核心知识点一览

    主题关键点
    SELinux 目标 防止已遭泄露的系统服务访问用户数据
    三种模式 Enforcing(强制)、Permissive(允许)、Disabled(禁用)
    安全上下文 用户:角色:类型:敏感度,基于 类型(type) 做访问控制
    chcon 临时修改上下文(不持久化)
    restorecon 根据策略数据库恢复默认上下文
    semanage fcontext 永久定义默认上下文规则
    semanage port 管理端口标签
    布尔值 开关式调整 SELinux 策略行为
    setroubleshoot 自动诊断 SELinux 问题

    7.2 命令速查表

    命令作用
    getenforce 查看当前模式
    `setenforce 0 1`
    /etc/selinux/config 永久配置
    ls -Z / ps -Z 查看安全上下文
    chcon -t 类型 文件 临时修改上下文
    restorecon -Rv 目录 恢复默认上下文
    semanage fcontext -a -t 类型 '正则' 添加默认上下文规则
    semanage fcontext -lC 查看自定义上下文规则
    semanage port -a -t 类型 -p 协议 端口 添加端口标签
    semanage port -lC 查看自定义端口标签
    getsebool -a 查看所有布尔值
    setsebool -P 布尔值=1 永久启用布尔值
    sealert -l UUID 查看 SELinux 问题详情

    7.3 常用 SELinux 类型速查

    类型用途
    httpd_t httpd 进程域
    httpd_sys_content_t Web 服务器的文档内容
    httpd_sys_script_exec_t CGI 脚本
    http_port_t httpd 绑定的端口
    ssh_port_t SSH 端口
    tmp_t /tmp 目录中的文件
    user_home_dir_t 用户家目录
    public_content_t 公共内容(如匿名 FTP)

    7.4 SELinux 工作模式速查

    模式是否强制执行是否记录违规重启要求
    Enforcing 设为默认需重启
    Permissive 设为默认需重启
    Disabled 必须重启

    7.5 常见错误排查

    问题原因解决方案
    服务启动失败,日志有 Permission denied SELinux 阻止 查看 /var/log/messages,用 sealert 诊断
    文件访问被拒 上下文不匹配 restorecon -Rv /path
    服务无法绑定端口 端口标签未添加 semanage port -a -t 标签 -p tcp 端口
    功能需要特殊权限 布尔值未启用 getsebool 查找,setsebool -P 启用
    禁用 SELinux 后想重新启用 config 中设为 disabled 将 SELINUX=disabled 改为 enforcing,重启,系统会重新标记

    7.6 思考与拓展(原课后作业转化)

  • SELinux 的 Enforcing 和 Permissive 模式有什么区别? → Enforcing:SELinux 策略被强制执行,违规操作被拒绝;Permissive:策略被加载但不强制执行,仅记录违规日志。Permissive 用于测试和调试。
  • 为什么 chcon 修改上下文后,restorecon 会将其恢复? → chcon 只修改文件本身的标签,不修改策略数据库。restorecon 从策略数据库中读取默认规则,将文件恢复到规则定义的标签。
  • SELinux 布尔值的作用是什么? → 布尔值提供了开关式调整 SELinux 策略的能力,无需编写复杂策略。例如 httpd_enable_homedirs 控制 httpd 是否能访问用户家目录。
  • 什么时候应该禁用 SELinux? → 极少情况下才建议禁用。如果确实需要,应先设置为 Permissive 模式运行一段时间,收集所有违规记录,然后根据日志调整策略,最终再启用 Enforcing。
  • 如何判断一个问题是 SELinux 引起的还是文件权限引起的? → 查看 /var/log/messages 是否有 SELinux is preventing 或 AVC 字样,或使用 sealert 诊断。如果日志无 SELinux 相关记录,可能是文件权限问题。
  • 7.7 生产环境最佳实践

    场景建议
    生产环境 保持 SELINUX=enforcing,不要禁用
    应用部署 遵循标准的目录和上下文规范,必要时使用 semanage fcontext 定义自定义规则
    故障排查 先切换到 Permissive 模式确认是 SELinux 问题,修复后切回 Enforcing
    新服务部署 使用 sealert 获取正确的修复建议,而非盲目禁用 SELinux
    软件升级 升级后检查 SELinux 策略更新,必要时执行 restorecon -Rv /
    监控 监控 /var/log/messages 中的 SELinux 告警,及时处理

    系列结语

    至此,Linux(CentOS)系统管理入门笔记 系列全部 22 期内容已完整呈现。我们从 Linux 的历史哲学出发,走过了命令行基础、文件系统管理、用户权限体系、存储管理(分区/RAID/LVM/Swap)、启动原理与故障恢复、防火墙和 SELinux 安全加固——覆盖了 Linux 系统管理员从入门到实战所需的完整知识体系。

    这个系列的特点是:

    • 理论与实践并重:每个概念都有可执行的命令和清晰的输出解读
    • 循序渐进:从零到一,从“会敲命令”到“懂系统原理”
    • 生产导向:每期结尾都有生产环境最佳实践和常见问题排查

    记住,真正的 Linux 管理员不是“记住所有命令的人”,而是“知道去哪里查、怎么组合工具、如何排查问题”的人。

    愿你在 Linux 的世界里,越走越远,越走越深。

    下个系列预告:至此,你已经掌握了 Linux 系统管理的完整技能——从命令行基础、文件系统、用户权限,到进程管理、存储管理、系统启动、防火墙与 SELinux 安全加固。这是一名合格系统管理员的核心能力。

    但系统管理的终点,正是网络服务架设的起点。管理系统是为了运行服务——DHCP 动态分配地址、DNS 解析域名、NFS/SMB 共享文件、Apache/Nginx 提供 Web 服务、MariaDB/MySQL 存储数据、TLS 加密通信……

    下一个系列,我们将进入 Linux 网络服务架设学习笔记 的世界,从 DHCP 服务器 开始——学习如何为网络中的设备自动分配 IP 地址、配置网关和 DNS,以及如何部署 DHCP 中继实现跨网段分配。敬请期待!

    愿你在 Linux 的世界里,越走越远,越走越深。

    — Linux(CentOS)系统管理入门笔记 全系列完 —

    — Compiled and Authored by Whisky — Augest 2
    nd, 2026

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux(CentOS)系统管理入门笔记(第二十二期)——SELinux 安全加固——上下文、布尔值与故障排查
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!