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

selinux

1. 作用

  • SELinux域限制: 对服务程序的功能进行限制,确保服务程序做不了出格的事情。
  • SELinux安全上下文: 对文件资源的访问限制,确保文件资源只能被其所属的服务程序访问。

区别

  • 传统的文件权限:与账号有关,属于自主访问控制DAC(DIscretionary Access Control)
    当某个进程想要对文件进行访问时,系统就会根据该进程的所有者/用户组,并比较文件的权限,若通过通过权限检查,就可以访问该文件。注意: 各种权限设置对root用户时无效的
  • SELinux:以策略规则制定特定程序读取特定文件,属于强制访问控制MAC(Mandatory Access Control)
    可以针对特定的进程与特定的文件资源来进行权限控制,即使你是root在使用不同的进程时,你所拥有的权限并不一定是root,而要看当时该进程的设置而定,则就可以针对进程来进行访问控制

二、工作原理

2.1 名词解释

主体(subject)

  • 主体就是想要访问文件或目录资源的进程
  • 进程得到资源的流程: 由用户调用命令,命令产生进程,由进程去访问文件或目录资源
  • 自主访问控制系统中(Linux的默认权限),靠权限控制的主体是用户
  • 强制访问控制系统中(SELinux),靠策略规则控制的主体是程序

目标(object)

  • 目标就是需要访问的文件或目录资源

策略(policy) (多个规则的集合)

  • Linux系统中进程与文件的数量庞大,所以限制进程是否可以访问文件的SELinux规则数量就更加繁琐,所以SELinux默认定义了两个策略来指定规则。
  • 默认策略
    targeted: 默认策略,用于限制网络服务(dhcpd, httpd, named, ntpd, portmap, snmapd, squid, syslog),对本机系统的限制极少
    -mls: 多级安全保护策略,该策略限制更为严格
  • 安全上下文 (security context)
    所有进程、文件和目录都有自己的安全上下文
    进程是否能够访问文件或目录,就要其安全上下文是否匹配
    为每个进程、文件、端口等对象标记上下文标签(如user:role:type:sensitivity)
    解释:
    当主体(进程)访问目标(文件)时,首先要和SELinux中定义好的策略进行匹配
    若符合定义的策略规则,并且主体的安全上下文和目标的安全上下文匹配则允许访问文件
    若安全上下文比较失败,则拒绝访问,并通过AVC(Access Vector Cache, 访问向量缓存,主要用于记录所有和SELinux相关的访问统计信息)生成拒绝访问信息
    注意: 最终是否可以访问到目标文件夹,还要匹配产生进程(主体)的用户是否对目标文件拥有合理的rwx权限。

2.2 相关命令

seinfo命令

selinux的启动,关闭,查看
enforcing: 强制模式,启用SELinux,将拦截服务的不合法请求
permissive: 宽容模式,启用SELinux,只发出警告并不拦截
disabled: 关闭模式,SELinux没有运行
getenforce		// 查看当前selinux工作模式
setenforce 1	// 临时开启
setenforce 0	// 临时关闭进入宽容模式
vi /etc/selinux/config
SELINUX=enforcing 或 enabled
#注:如果将配置文件修改为enabled,则重启后的状态为Permissive
SELINUX=disabled    

查询sestatus

[root@server ~]# sestatus
SELinux status:                 enabled           # 是否启用  
SELinuxfs mount:                /sys/fs/selinux   # selinux临时文件系统的挂载点
SELinux root directory:         /etc/selinux      # 启动目录,配置文件目录位置
Loaded policy name:             targeted          # 当前加载的策略类型# 策略类型#  targeted:只保护目标进行,默认#  minimum:少数选定进程进行保护#  mls:多级安全保护,最高级
Current mode:                   enforcing         # 执行的模式,重要
Mode from config file:          enforcing         # 配置文件的模式
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

chcon: 手动修改目标的上下文策略

# 方法1
[root@server ~]# chcon  [-R] [-t  type]  [-u  user]  [-r  role]  文件名
-R:递归修改,当前目录及目录下的所有文件都同时设置
-t:后面接安全上下文件的类型字段(重要)
-u:后面接身份标识
-r:后面接角色
-v:显示变动结果# 方法2:会把范例文件的4个字段全部进行参照,即全部修改
[root@server ~]# chcon  -R  --reference=范例文件  文件名

restorecon命令

  • 将文件的SELinux类型恢复为默认的SELinux类型
  • 默认的SELinux类型与semanage命令有关,其参考semanage命令所查询的默认SELinux类型
[root@server ~]# restorecon  [-Rv]  文件或目录
-R:连同子目录一起修改;
-v:将过程显示到屏幕上// 将/web1恢复默认类型
[root@server ~]# ls -Zd /web1
unconfined_u:object_r:httpd_sys_content_t:s0 /web1[root@server ~]# restorecon -Rv /web1[root@server ~]# ls -Zd /web1
unconfined_u:object_r:default_t:s0 /web1

semanage命令

  • 用于管理 SELinux 的策略,查询/修改/增加/删除文件的默认SELinux安全上下文,管理网络端口、消息接口等

三、相关接口

3.1 if(interface): 策略接口

在 SELinux 策略开发中,IF(接口)是一种抽象化的策略定义方式,用于封装重复使用的策略逻辑,提高策略的可维护性和复用性。
核心作用
模块化设计:将常用的策略规则封装为接口(如allow_httpd_to_http_port),其他策略可直接调用接口,避免重复编写代码。
隔离复杂度:接口隐藏底层实现细节,上层策略只需关注接口功能,降低策略开发难度。

# 定义一个接口,允许指定类型访问HTTP端口
interface(`httpd_can_listen_http', `allow $1 http_port_t:tcp_socket name_connect;
')

3.2 fc(File context): 安全上下文

定义
标签格式:通常为user:role:type:sensitivity,例如system_u:object_r:httpd_sys_content_t:s0,其中httpd_sys_content_t是文件类型,决定 HTTP 服务可访问该文件。
管理方式:
通过ls -Z命令查看文件上下文;
用chcon临时修改上下文,或用semanage fcontext永久配置(需配合restorecon生效)。

3.3 te(type Enforcement): 类型强制

TE 是 SELinux 实现强制访问控制的核心机制,通过定义对象类型(Type)和进程类型,并基于类型之间的规则(策略)控制访问。
类型定义:为进程(如httpd_t)和资源(如httpd_sys_content_t)分配类型,策略通过allow/deny规则定义类型间的访问权限。
策略文件(.te):TE 策略以文本文件形式存在(扩展名为.te),包含类型定义、权限规则、接口声明等,例如:

# 定义HTTP进程类型
type httpd_t, domain;# 允许HTTP进程访问HTTP内容文件
allow httpd_t httpd_sys_content_t:file { read open };

相关文章:

  • 开源 python 应用 开发(一)python、pip、pyAutogui、python opencv安装
  • 云创智城YunCharge充电桩施工安装与项目落地标准及施工所需准备
  • 【PyTorch革命】机器学习系统编程模型的演进之路
  • 《高等数学》(同济大学·第7版)第五章 定积分 第二节微积分基本公式
  • 65-Oracle Undo机制
  • 无锡哲讯科技:助力纺织业搭乘 SAP 数字化快车
  • Kafka与Zookeeper在linux上的下载记录
  • 如何用AI开发完整的小程序<8>—让AI制作具体功能
  • RSA加密原理及推导
  • CentOS 7.9 系统安装 Percona XtraBackup(含 xtrabackup 和 innobackupex 工具)的详细步骤
  • 2140、解决智力问题
  • Spring JDBC 事务
  • python高校教务管理系统
  • 47.第二阶段x64游戏实战-封包-分析打怪call
  • python源码:执行pdf合并/分页/图片管理功能
  • 在高数中 导数 微分 不定积分 定积分 的意义以及联系
  • 单调栈原理与应用
  • Python 商务数据分析—— NumPy 学习笔记Ⅰ
  • Docker Desktop 4.42集成的MCP工具包
  • (C++)素数的判断(C++教学)(C语言)
  • 网站建设官网免费模板/石家庄seo结算
  • o2o网站建设多少钱/网络营销的主要传播渠道是
  • 杭州市人民政府信息公开网/最新seo课程
  • 网站开发建设与维护/宁波seo网络推广咨询价格
  • 海口网红美食餐厅/aso优化工具
  • yollow网站推广/谷歌chrome浏览器下载