当前位置: 首页 > news >正文

SELinux安全上下文

1、SELinux 简介

  1. 是什么? SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全子系统,提供更细粒度的权限控制,防止进程或用户越权操作。

  2. 核心思想

    • 最小权限原则:进程/用户只能访问其明确需要的资源。

    • 基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security Context)。

  3. 工作模式

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

2、基础操作命令

1. 查看SELinux状态

getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)

2. 切换工作模式

setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式

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

3、安全上下文(Security Context)

1. 查看上下文

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

2. 修改上下文
chcon命令
选项说明示例消息
-t, --type TYPE设置安全上下文的类型部分已将 file.txt 的类型更改为 httpd_sys_content_t
-u, --user USER设置安全上下文的用户部分已将 file.txt 的用户更改为 system_u
-r, --role ROLE设置安全上下文的角色部分已将 file.txt 的角色更改为 object_r
--reference=FILE使用指定文件的安全上下文已从 ref_file 复制上下文到 target_file
-R, --recursive递归处理文件和目录已递归更改 dir/ 及其内容的上下文
-h, --help显示帮助信息显示帮助菜单
-v, --verbose显示操作详情正在更改 file.txt 的安全上下文
--version显示版本信息chcon (GNU coreutils) 8.32

选项使用案例

  1. 设置文件类型

  2. 将 /var/www/html/index.html 的上下文类型设为 httpd_sys_content_t:

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

设置用户部分

将 /etc/nginx/nginx.conf 的用户部分设为 system_u:

sudo chcon -u system_u /etc/nginx/nginx.conf

设置角色部分

将 /home/user/file.txt 的角色部分设为 object_r:

sudo chcon -r object_r /home/user/file.txt

参照文件上下文

将 file2 的上下文设置为与 file1 一致:

sudo chcon --reference=file1 file2

递归操作目录

递归修改 /var/www/html/ 目录下所有文件的上下文类型:

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

显示帮助信息

chcon --help

显示版本信息

chcon --version

详细模式操作

启用详细输出,修改 ~/.ssh/config 的上下文类型:

sudo chcon -v -t ssh_home_t ~/.ssh/config

说明

  • 实际执行时,若未添加 -v 参数,chcon 默认不输出成功信息,仅在出错时显示错误。

  • 使用 -v 参数可查看操作详情(如上述表格中的“示例消息”)。

chcon -t httpd_sys_content_t /var/www/html/index.html # 临时修改文件类型
restorecon -v /var/www/html/index.html # 恢复默认上下文

semanage 命令
子命令/选项用途说明常用选项示例消息/操作
semanage login管理SELinux用户与Linux账户的映射关系-a (添加)、-d (删除)、-m (修改)将用户 user1 映射到 SELinux 用户 staff_u
semanage user管理SELinux用户及其角色和权限-a、-d、-R (角色)、-L (限制)创建新SELinux用户 web_user 并分配角色 httpd_role
semanage port管理网络端口与SELinux类型的绑定关系-a、-d、-t (类型)、-p (协议)将TCP端口 8080 绑定到 http_port_t 类型
semanage interface管理网络接口与SELinux类型的绑定关系-a、-d、-t将接口 eth1 绑定到 netif_t 类型
semanage module管理SELinux策略模块(启用/禁用)-a、-d、-e (启用)、-D (禁用)启用策略模块 my_custom_module
semanage fcontext管理文件/目录的默认SELinux上下文规则-a、-d、-t、-s (范围)添加规则:/webapps(/.*)? 的上下文类型为 httpd_sys_content_t
semanage boolean管理SELinux布尔值(开关策略功能)-1 (查看)、--on、--off启用布尔值 httpd_can_network_connect
semanage dontaudit管理dontaudit规则(是否记录特定访问拒绝事件)--on、--off关闭对 sshd 的 dontaudit 规则
-h / --help显示帮助信息-显示子命令的帮助菜单
-v / --verbose显示详细操作信息-显示添加端口 8080 的详细过程
-n / --noheading输出时隐藏列标题-仅显示端口列表数据,无标题行

选项使用案例

管理端口绑定

将TCP端口 8080 标记为HTTP服务端口:

sudo semanage port -a -t http_port_t -p tcp 8080

说明:允许Apache等HTTP服务使用8080端口。

管理文件上下文规则

为自定义Web目录 /opt/webapps 设置默认上下文:

sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapps(/.*)?"
sudo restorecon -Rv /opt/webapps

说明:添加规则后需运行 restorecon 立即生效。

管理SELinux用户映射

将Linux用户 dev_user 映射到SELinux用户 user_u:

sudo semanage login -a -s user_u dev_user

说明:限制用户 dev_user 的SELinux权限。

启用布尔值

允许HTTP服务访问网络:

sudo semanage boolean --on httpd_can_network_connect

说明:无需重启服务,立即生效。

管理策略模块

禁用自定义策略模块 mymodule:

sudo semanage module -D mymodule

说明:禁用后相关规则不再生效。

查看当前端口绑定

列出所有HTTP相关端口:

semanage port -l | grep http_port_t

输出示例

http_port_t    tcp    80, 443, 8080

删除文件上下文规则

移除对 /tmp/custom_dir 的上下文规则:

sudo semanage fcontext -d "/tmp/custom_dir(/.*)?"

注意事项

  • 权限要求:大多数操作需 sudo 或 root 权限。

  • 持久化存储:semanage 修改的规则会保存到策略库(默认路径 /etc/selinux/targeted),重启后仍有效。

  • 结合工具使用:修改文件上下文后,需运行 restorecon 或重启服务使更改生效。

4、SELinux布尔值(Booleans)

SELinux策略通过布尔值动态调整权限控制(例如允许Apache访问用户家目录)。

getsebool -a | grep httpd# 查看所有与Apache相关的布尔值
setsebool -P httpd_enable_homedirs=on # 启用布尔值(-P永久生效)

5、日志分析与故障排除

1. 查看SELinux日志

tail -f /var/log/audit/audit.log # 直接查看原始日志
ausearch -m AVC -ts recent# 使用工具过滤日志

2. 生成解决方案建议

grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp# 编译并加载自定义策略

6、常见问题与解决方案

场景1:Web服务器无法访问文件
  • 现象:Apache返回403错误,但文件权限正常。

  • 解决

    1. 检查文件上下文:ls -Z /var/www/html

    2. 修复上下文:restorecon -Rv /var/www/html

场景2:服务无法绑定非标准端口
  • 现象:Nginx无法监听8080端口。

  • 解决

semanage port -a -t http_port_t -p tcp 8080# 添加端口到SELinux策略

7、注意事项

  1. 不要随意禁用SELinux:优先使用Permissive模式调试。

  2. 谨慎使用chcon:错误修改上下文可能导致系统不稳定。

  3. 备份策略:修改策略前备份 /etc/selinux 目录。


文章转载自:

http://oxkqzjSZ.Lcwhn.cn
http://BHDdASJt.Lcwhn.cn
http://dLI4wJmG.Lcwhn.cn
http://l5sergRW.Lcwhn.cn
http://0h4pkfw2.Lcwhn.cn
http://sRGUP097.Lcwhn.cn
http://bXPrVD5G.Lcwhn.cn
http://WTreezoA.Lcwhn.cn
http://md6myxMo.Lcwhn.cn
http://aoj8gzrm.Lcwhn.cn
http://OtIX6twi.Lcwhn.cn
http://0uXkQmux.Lcwhn.cn
http://J2LHGtEq.Lcwhn.cn
http://E0hhtPBm.Lcwhn.cn
http://p2VvCDMH.Lcwhn.cn
http://VWexPzf3.Lcwhn.cn
http://Hhyz0NdB.Lcwhn.cn
http://PAQesFE0.Lcwhn.cn
http://1DHNbQtH.Lcwhn.cn
http://sZfHMV6B.Lcwhn.cn
http://bpLepnQ8.Lcwhn.cn
http://G0uf519g.Lcwhn.cn
http://W7YQR1YF.Lcwhn.cn
http://EjQdQlRk.Lcwhn.cn
http://Uu280nlP.Lcwhn.cn
http://9gZOFUlv.Lcwhn.cn
http://W5t8zHYb.Lcwhn.cn
http://29kWW6z9.Lcwhn.cn
http://c9BEMyj2.Lcwhn.cn
http://N0tdN09Z.Lcwhn.cn
http://www.dtcms.com/a/380122.html

相关文章:

  • 【项目】 :C++ - 仿mudou库one thread one loop式并发服务器实现(代码实现)
  • 主动性算法-解决点:新陈代谢
  • 从0开始开发app(AI助手版)-架构及环境搭建
  • 服务器内存不足会造成哪些影响?
  • 缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(二)
  • MongoDB BI Connector 详细介绍与使用指南(手动安装方式,CentOS 7 + MongoDB 5.0.5)
  • 【计算机网络】HTTP协议(一)——超文本传输协议
  • 【国内电子数据取证厂商龙信科技】被格式化的手机如何恢复数据
  • 【项目】 :C++ - 仿mudou库one thread one loop式并发服务器实现(模块划分)
  • 采集集群外的k8s(prometheus监控)
  • AI 玩转网页自动化无压力:基于函数计算 FC 构建 Browser Tool Sandbox
  • Redisson原理与面试问题解析
  • ICCV 2025 | 首次引入Flash Attention,轻量SR窗口扩至32×32还不卡!
  • 关于线性子空间(Linear Subspace)的数学定义
  • OpenHarmony AVSession深度解析(二):从本地会话到分布式跨设备协同的完整生命周期管理
  • 12.NModbus4在C#上的部署与使用 C#例子 WPF例子
  • 迅为RK3568开发板Linux_NVR_SDK 系统开发-扩展根文件系统
  • OpenCV:特征提取
  • Zynq开发实践(FPGA之第一个vivado工程)
  • 数字人技术如何与数字孪生深度融合?
  • 如何生成 GitHub Token(用于 Hexo 部署):保姆级教程+避坑指南
  • Python uv常用命令及使用详解
  • MySQL主从同步参数调优案例
  • Python的uv包管理工具使用
  • 构建python3.11+uv+openssh环境的docker镜像
  • RabbitMQ的核心使用示例
  • 大数据电商流量分析项目实战:Hive 数据仓库(三)
  • 【Kubernetes】Tomcat 启用 Prometheus 监控指标
  • 数字人分身 + 矩阵系统聚合的源码搭建与定制开发
  • 如何使用 OCR 提取扫描件 PDF 的文本(Python 实现)