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

相关推荐
MXsoft6181 分钟前
**智慧校园运维实践:多校区、老旧设备的统一监控方案**
运维·自动化
Sean‘8 分钟前
在隔离内网机器上使用 Filebeat 全量采集日志并推送到 ELK 的实战
运维·服务器·elk
Promise微笑15 分钟前
精准微阻测量:微欧计的分类、场景应用与高效选型决策指南
大数据·运维·网络·人工智能
MageGojo22 分钟前
R-Shell开源项目实战解析:用Rust打造命令行SSH工具,支持连接管理、远程执行、SFTP与MCP
运维·rust·开源项目·命令行工具·ssh客户端·mcp
云飞云共享云桌面24 分钟前
非标设计工厂8-10个SolidWorks研发共享一台高性能工作站
运维·服务器·自动化·电脑·制造
rsuhbsrjms26 分钟前
可视耳勺靠谱吗?无线可视挖耳勺安全吗?口碑好的可视耳勺
人工智能·安全
墨痕诉清风32 分钟前
Linux系统设置上海时间(24小时制)
linux·运维·服务器
utf8mb4安全女神36 分钟前
脚本模块化
linux·运维·服务器
daad77739 分钟前
纪录无人机PID参数配置
linux
数智化精益手记局42 分钟前
拆解项目管理平台核心功能:看项目管理平台如何解决跨部门协作难题与多项目并行场景
大数据·运维·数据库·人工智能·产品运营