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

相关推荐
BillKu3 小时前
Vue3 中使用 DOMPurify 对渲染动态 HTML 进行安全净化处理
前端·安全·html
脚踏实地的大梦想家3 小时前
【Docker】P2 Docker环境构建准备:MacOS 与 Linux
linux·macos·docker
allnlei3 小时前
Keepalived 负载均衡
运维·负载均衡·lvs·keepalived
会飞的土拨鼠呀3 小时前
Debian 操作系统全面介绍
运维·debian
山城码农笑松哥3 小时前
国产凝思debian系Linux离线安装rabbitmq教程步骤
linux·debian·rabbitmq
抓饼先生3 小时前
C++ 20 视图view笔记
linux·开发语言·c++·笔记·c++20
狂浪天涯4 小时前
Android Security | SEAndroid 综述
linux
wanhengidc4 小时前
服务器内存不足会造成哪些影响?
运维·服务器·网络·游戏·智能手机
广州腾科助你拿下华为认证4 小时前
华为HICE云计算的含金量高吗?
运维·服务器·hcie证书