第17章:SELinux 与系统安全机制
在企业级 Linux 系统中SELinuxSecurity-Enhanced Linux是防止越权访问的“终极防线”。它由美国国家安全局NSA开发openEuler 作为企业级发行版默认启用 SELinux 提供强制访问控制MAC远超传统的自主访问控制DAC。本章将带你从零理解 SELinux 的核心概念掌握日常管理命令让你在享受安全防护的同时不再被“SELinux 拒绝访问”所困扰。 本章目标理解 SELinux 的基本原理与强制访问控制MAC机制掌握 SELinux 的三种运行模式enforcing、permissive、disabled使用sestatus、getenforce查看 SELinux 状态理解安全上下文Security Context与文件标签使用ls -Z、chcon、restorecon管理文件上下文使用semanage管理端口、布尔值与策略实战修复因 SELinux 导致的 Web 服务无法启动问题17.1 什么是 SELinuxSELinuxSecurity-Enhanced Linux是 Linux 内核的一个安全模块提供强制访问控制Mandatory Access Control, MAC即使 root 用户也不能绕过。✅ 传统 DAC vs SELinux MAC机制自主访问控制DAC强制访问控制MAC权限模型用户/组/其他 rwx用户:角色:类型:级别谁能改权限文件所有者策略定义用户不能随意更改root 权限root 可以访问一切root 也受策略限制安全级别基础防护高强度隔离 类比DAC 房间门锁主人可以给任何人钥匙SELinux 门禁系统即使有钥匙也要看权限卡是否允许进入17.2 SELinux 运行模式SELinux 有三种运行模式可通过/etc/selinux/config永久设置。 三种模式模式说明命令enforcing强制模式拒绝违规操作并记录日志默认setenforce 1permissive宽容模式允许所有操作但记录违规调试用setenforce 0disabled禁用模式完全关闭 SELinux不推荐修改配置文件 查看 SELinux 状态sestatus输出示例SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled ...️ 临时切换模式sudosetenforce0# 切换到 permissivesudosetenforce1# 切换回 enforcing⚠️setenforce不能将 disabled 模式启用只能在 enabled 状态下切换 enforcing/permissive。 永久修改模式编辑配置文件sudovim/etc/selinux/config修改SELINUXenforcing # 可选enforcing, permissive, disabled SELINUXTYPEtargeted # 策略类型保持默认⚠️ 修改后需重启机器reboot生效。17.3 安全上下文Security ContextSELinux 通过为每个进程、文件、端口打上“标签”即安全上下文来控制访问。查看安全上下文ls-Z示例ls-Z/etc/passwd# 输出system_u:object_r:passwd_file_t:s0 /etc/passwd格式用户:角色:类型:级别部分说明system_uSELinux 用户不是 Linux 用户object_r角色object rolepasswd_file_t类型Type— 最关键决定谁能访问s0多级安全MLS级别常见文件类型示例类型用途httpd_sys_content_tApache 可读的网页文件httpd_sys_script_exec_tApache 可执行的 CGI 脚本ssh_home_t用户家目录下的 SSH 文件var_log_t日志文件bin_t可执行程序17.4 管理文件上下文 临时修改chcon# 将文件类型改为 httpd 可读sudochcon-thttpd_sys_content_t /var/www/html/index.html-t指定类型-u用户-r角色⚠️chcon的修改是临时的restorecon或make relabel会覆盖。 恢复默认上下文restorecon# 恢复单个文件sudorestorecon /var/www/html/index.html# 递归恢复目录sudorestorecon-R/var/www/html/# 查看将要恢复的内容不执行sudorestorecon-nR/var/www/html/✅ 推荐修改文件后使用restorecon而非chcon 查看默认上下文规则semanage fcontext-l|grep/var/www输出/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0说明所有/var/www下的文件默认应为httpd_sys_content_t类型。17.5 使用semanage管理 SELinuxsemanage是 SELinux 的高级管理工具需安装sudodnfinstall-ypolicycoreutils-python-utils 管理端口Web 服务默认只能绑定 80、443、8080 等端口。若你使用 8081需添加# 添加 HTTP 服务可绑定的端口sudosemanage port-a-thttp_port_t-ptcp8081# 查看sudosemanage port-l|grephttp# 删除sudosemanage port-d-thttp_port_t-ptcp8081️ 管理布尔值Booleans布尔值用于开启/关闭某些 SELinux 策略行为。查看所有布尔值getsebool-a|grephttp常见布尔值httpd_can_network_connect允许 Apache 连接网络httpd_enable_homedirs允许 Apache 读取用户家目录allow_ssh_keysign允许 SSH 使用密钥签名修改布尔值# 临时生效setsebool httpd_can_network_connect on# 永久生效setsebool-Phttpd_can_network_connect on-P表示永久保存重启后仍有效。17.6 实战修复 SELinux 导致的服务无法启动场景你将 Nginx 的网站根目录设为/data/web但启动失败。sudosystemctl start nginx Jobfornginx.service failed...排查步骤1. 查看服务状态systemctl status nginx可能无明确错误。2. 查看 SELinux 拒绝日志sudoausearch-mavc-tsrecent或sudogrepdenied/var/log/audit/audit.log|tail-5输出typeAVC msgaudit(1712345678.123:456): avc: denied { read } for pid1234 commnginx nameindex.html devsda1 ino5678 scontextsystem_u:system_r:httpd_t:s0 tcontextunconfined_u:object_r:default_t:s0 tclassfile✅ 说明Nginx (httpd_t) 被拒绝读取文件类型为default_t3. 修复文件上下文# 临时修复sudochcon-R-thttpd_sys_content_t /data/web/# 或永久修复推荐sudosemanage fcontext-a-thttpd_sys_content_t/data/web(/.*)?sudorestorecon-R/data/web/4. 重新启动服务sudosystemctl start nginx systemctl status nginx✅ 服务成功启动✅ 本章小结命令用途示例sestatus查看 SELinux 状态setenforce 0/1临时切换模式ls -Z查看安全上下文ls -Z /etc/passwdchcon临时修改上下文chcon -t httpd_t filerestorecon恢复默认上下文restorecon -R /var/www/semanage fcontext永久设置上下文规则添加/data/web规则semanage port管理端口标签开放 8081 给 httpdsetsebool -P永久启用布尔值httpd_can_network_connect 课后练习运行sestatus查看当前 SELinux 模式。使用ls -Z查看/etc/shadow的安全上下文。创建一个目录/testweb放入index.html尝试用 Nginx 服务访问会失败。使用ausearch或grep audit.log查看 SELinux 拒绝记录。使用semanage fcontext和restorecon修复上下文使 Nginx 可访问。挑战将 Nginx 配置为监听 8081 端口并使用semanage port添加该端口到http_port_t。 下一章预告第18章《Shell 脚本编程基础》我们将学习什么是 Shell 脚本为何要写脚本脚本结构#!/bin/bash与执行方式变量定义与使用环境变量、位置参数条件判断if、test、[ ]、[[ ]]循环for、while、until函数定义与调用实战编写系统监控脚本准备好从“命令行用户”升级为“自动化工程师”了吗

相关新闻

MATLAB频谱功率谱画图程序(完整版)

MATLAB频谱功率谱画图程序(完整版)

matlab频谱功率谱画图程序(完整版) 输入:% data为待分析信号,需要是一维实数也能处理数据信息波(例如:下图7-9绘制的导入数据的信号) (感觉信号的横坐标单位可能不太正确&#xff0c…

2026/7/4 13:18:24 阅读更多 →
2026年维修指南:戴森吸尘器官方与TOP3第三方机构深度评测

2026年维修指南:戴森吸尘器官方与TOP3第三方机构深度评测

朋友,你家那台戴森吸尘器是不是也开始闹脾气了?吸力变弱、电池续航尿崩,或者干脆“罢工”了?别急,这几乎是所有戴森用户的必经之路。今天咱们不聊虚的,就用数据和真实案例,掰扯掰扯2026年戴森维…

2026/7/5 1:54:51 阅读更多 →
这个全自动锂电池包装成型机的控制系统设计挺有意思。欧姆龙CJ2M-CPU35主控配NC413定位模块,30轴同步控制玩得挺溜。咱先拆个定位控制的例子看看

这个全自动锂电池包装成型机的控制系统设计挺有意思。欧姆龙CJ2M-CPU35主控配NC413定位模块,30轴同步控制玩得挺溜。咱先拆个定位控制的例子看看

omron欧姆龙CJ/CP程序 欧姆龙CJ2M-CPU35,搭配普洛菲斯触摸屏,主机搭载NC413定位控制模块带将近30轴,NG剔除功能。全自动CE锂电池包装成型机,轴控制,涵盖人机配方一键换型功能,故障记录功能,产量…

2026/5/17 9:29:36 阅读更多 →

最新新闻

Redis Stream 消息队列总结

Redis Stream 消息队列总结

1. Stream 是什么Redis Stream 是 Redis 提供的一种消息队列数据结构,用于保存和传递一系列消息。它的核心特点是:消息有唯一 ID。消息会持久化保存在 Redis 中,不会像 Pub/Sub 一样发送后立刻丢失。支持消费者组。支持消息确认机制。支持查看…

2026/7/5 1:52:27 阅读更多 →
【大白话说Java面试题 第153题】【06_Spring篇】第13题:Spring 中 Bean 是线程安全的吗?

【大白话说Java面试题 第153题】【06_Spring篇】第13题:Spring 中 Bean 是线程安全的吗?

📌 PDF:大白话说Java面试题 — 06_Spring篇 第13题:Spring 中 Bean 是线程安全的吗? 📚 回答: 核心考点: Spring Bean 的线程安全性是并发编程与 Spring 框架交叉的经典问题,大厂面…

2026/7/5 1:50:25 阅读更多 →
Java计算机毕设之美容会员储值充值积分管理系统的设计与实现 美业技师业绩提成统计管理系统(完整前后端代码+说明文档+LW,调试定制等)

Java计算机毕设之美容会员储值充值积分管理系统的设计与实现 美业技师业绩提成统计管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/5 1:48:25 阅读更多 →
电容式触摸按键 PCB 设计 10 要点:从 PAD 形状到走线间距的实战避坑

电容式触摸按键 PCB 设计 10 要点:从 PAD 形状到走线间距的实战避坑

电容式触摸按键PCB设计10大核心要点:从焊盘优化到抗干扰布局实战指南在智能家电和消费电子领域,电容式触摸按键正在快速取代传统机械按键。根据行业调研数据,2022年全球电容式触摸控制器市场规模已达12.7亿美元,年复合增长率保持在…

2026/7/5 1:46:23 阅读更多 →
校友质量高的国内EMBA 2026综合实力权威榜单

校友质量高的国内EMBA 2026综合实力权威榜单

一、榜单评测引言随着国内企业全球化布局、数字化转型进程加速,越来越多企业创始人、高层管理者摒弃传统单一管理进修模式,优先选择校友圈层优质、国际化资源充足、学历认可度高的中英双语EMBA项目。优质校友圈层不仅是职场进阶、企业发展的核心人脉资源…

2026/7/5 1:44:23 阅读更多 →
面试官问:“模型一本正经胡说时,logprobs 抓得到吗?“

面试官问:“模型一本正经胡说时,logprobs 抓得到吗?“

面试官问:“模型一本正经胡说时,logprobs 抓得到吗?” “3 年 LLM 应用开发,主导过企业 RAG 知识库和多个 Agent 项目,熟悉主流大模型 API 与推理优化。” 简历挺漂亮。我没问框架,先问了个最朴素的问题&am…

2026/7/5 1:44:23 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻