Linux系统 SELinux 安全管理与故障排查

一、SELinux 安全上下文管理

1. SELinux 简介

SELinux(Security-Enhanced Linux)是 Linux 内核的强制访问控制(MAC)安全子系统,通过基于标签的访问控制实现细粒度权限管理,遵循最小权限原则。

SELinux 有三种工作模式:

  • Enforcing:强制执行策略,拒绝非法操作并记录日志
  • Permissive:仅记录违规操作,不阻止(用于调试)
  • Disabled:完全关闭 SELinux(需重启生效)

2. 基础操作命令

查看 SELinux 状态

复制代码
getenforce  # 查看当前模式
sestatus    # 详细状态信息

注意:setenforce 仅临时生效,永久修改需编辑/etc/selinux/config文件

切换工作模式

复制代码
setenforce 0  # 切换到Permissive模式
setenforce 1  # 切换到Enforcing模式

3. 安全上下文管理

查看上下文

复制代码
ls -Z /var/www/html  # 查看文件/目录的上下文
ps -Z -C httpd       # 查看进程的上下文

修改上下文

  1. chcon 命令(临时修改):

    设置文件类型

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

    递归修改目录

    sudo chcon -R -t httpd_sys_content_t /var/www/html/

    参照文件上下文

    sudo chcon --reference=file1 file2

  2. semanage 命令(永久修改):

    为自定义目录设置默认上下文

    sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapps(/.*)?"
    sudo restorecon -Rv /opt/webapps # 应用更改

4. 常见 SELinux 问题解决

Web 服务器 403 错误

复制代码
# 检查文件上下文
ls -Z /var/www/html

# 修复上下文
restorecon -Rv /var/www/html

服务无法绑定非标准端口

复制代码
# 将8080端口添加到HTTP服务端口列表
semanage port -a -t http_port_t -p tcp 8080

管理 SELinux 布尔值

复制代码
# 查看Apache相关布尔值
getsebool -a | grep httpd

# 永久启用HTTP访问用户家目录
setsebool -P httpd_enable_homedirs=on

二、常见 Linux 系统故障排查案例

1. GRUB 引导故障

故障现象:系统启动卡在 "GRUB>" 提示符,无法进入系统

解决步骤

  1. 在 GRUB 命令行执行以下命令临时启动系统:

plaintext

复制代码
insmod xfs
set root=(hd0,msdos1)
linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
initrd16 /initramfs-3.10.0-1160.el7.x86_64.img
boot
  1. 进入系统后重建 GRUB 配置:grub2-mkconfig -o /boot/grub2/grub.cfg

2. 文件系统只读故障

故障现象:无法创建文件,提示 "Read-only file system

解决方案

  1. 卸载分区:umount /dev/sda1
  2. 强制修复(ext 文件系统):fsck -y /dev/sda1
  3. 强制修复(xfs 文件系统):xfs_repair /dev/sda1
  4. 重新挂载:mount -a

3. OOM Killer 触发

故障现象:关键进程突然被终止,系统日志出现 "Killed process"

优化方案

  • 调整进程 OOM 优先级:echo -100 > /proc/[PID]/oom_score_adj

  • 修改内存分配策略:

    vm.overcommit_memory = 2
    vm.overcommit_ratio = 80

4. 磁盘空间耗尽

故障现象:服务异常,df 显示使用率 100%

快速定位与解决

  1. 查找未释放空间的进程:lsof -n | grep deleted
  2. 定位大文件:du -xh --max-depth=1 / | sort -hr
  3. 常见清理:
    • 日志清理:journalctl --vacuum-size=100M
    • 临时文件清理:rm -rf /tmp/*.tmp

5. SSH 登录缓慢

故障现象:SSH 连接延迟超过 10 秒

优化配置

  1. 编辑 sshd_config:
    • 设置UseDNS no
    • 关闭GSSAPIAuthentication no
  2. 重启 sshd 服务使配置生效

6.root密码遗忘

在RHEL/CentOS 7及更新版本中,如果忘记root密码,可以通过以下步骤重置(需物理/虚拟控制台访问权限):

方法原理

通过修改GRUB2启动参数进入单用户模式,绕过身份验证直接获取root权限

详细操作步骤

  1. 重启系统并中断引导
复制代码
# 当系统启动到GRUB菜单时,快速按下方向键阻止自动引导
# 选择默认内核条目(通常第一条)按 `e` 键进入编辑模式
  1. 修改内核参数
复制代码
# 在linux16行(或linux行)末尾追加:
rd.break enforcing=0
​
# 修改后的完整行示例:
linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/rhel-root rw rd.break enforcing=0
  1. 进入紧急模式
复制代码
# 按 Ctrl+X 启动系统,进入紧急救援模式的shell环境
# 此时文件系统挂载在/sysroot(只读模式)
  1. 切换根目录
复制代码
chroot /sysroot
  1. 修改root密码
复制代码
# 此时已获得完整root权限:
passwd root
# 输入新密码两次(不会显示输入内容)
  1. 修复SELinux上下文
复制代码
# 强制重新标记文件系统(重要!):
touch /.autorelabel
  1. 退出并重启
复制代码
exit
reboot

关键参数说明

参数 作用
rd.break 在内核加载初期中断启动流程
enforcing=0 临时禁用SELinux强制模式

注意事项

  1. 磁盘加密系统:若启用了LUKS加密,需先解密再操作

  2. 云服务器:部分云平台需通过VNC或救援模式操作

  3. 时间控制.autorelabel会导致首次重启时间较长(约5-15分钟)

  4. UEFI系统:可能需要关闭Secure Boot功能

  5. 审计日志:系统日志会记录密码修改操作(/var/log/audit/audit.log)


替代方案(适用于不同场景)

  1. init方法

    复制代码
    # 在GRUB的linux行后追加:
    init=/bin/bash
  2. systemd方法

    复制代码
    systemctl edit --force --full rescue.target

相关推荐
Johny_Zhao4 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
用户962377954489 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机12 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机12 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544814 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star14 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544817 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux