安全上下文

本文涉及的产品
访问控制,不限时长
简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45176195 (一)、类型强制策略的安全上下文 所有的操作系统访问控制都是基于与主体和客体相关的访问控制属性的。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45176195

(一)、类型强制策略的安全上下文
所有的操作系统访问控制都是基于与主体和客体相关的访问控制属性的。在SELinux中,访问控制属性杯称作安全上下文。所有的客体(文件,进程间通信,通信管道,套接字,网络主机等)和主体(进程)有一个和他们相关的单一安全上下文。一个安全上下文有三个元素:用户,角色和类型标识符。指定和显示一个安全上下文常用的格式如下:

用户(user):角色(role):类型标识符(type)

每一个元素的字符串标识符杯定义在SELinux的策略语言中,策略语言的细节后面慢慢讨论。就现在来说,仅仅理解一个有效的安全上下文一定要有一个有效的用户,角色和类型标识符,并且标识符被策略书写者定义。每一个标识符的命名空间都是正交的。(所以,举个例子,用户,角色和类型有相同的字符串标识符是可以的,但是不推荐使用。)

检查安全上下文:
SELinux通过添加-Z选项修改了系统命令来展示主体和客体的安全上下文。例如,ls -Z 显示了文件系统对象的安全上下文,ps -Z展示了进程的安全上下文。另外一个有用的命令是 id,他展示你的shell的安全上下文(也就是说,你的当前的用户,角色和类型)。下面的例子展示了一个运行在SELinux中的shell的安全上下文。

$ id -Z
joe:user_r:user_t

你可以在你自己的SELinux中使用这些命令,正如我们在这一章节中使用的一样。

(二)、SELinux和标准Linux比较

此时此刻,比较在标准Linux和SELinux中的访问控制属性是非常有用的。为了简单起见,我们坚持使用常用的文件系统对象,例如文件和目录。在标准Linux中,主体的进程访问属性是通过进程结构体提供的在linux内核中所有进程的真实有效的用户ID和组ID。这些属性被内核所保护着,并且经过一些列的控制方式来设置。包括登录进程和setuid程序。对于客体来说,文件的索引节点包含着一系列的访问模式位和文件的用户ID和组ID,前者是基于三个读/写/可执行位的集合来实现控制访问,这三个分别代表文件拥有者,文件组和其他任何人。后者决定了文件的所有者和组来决定对于一个给定的访问尝试应该使用哪一个位集合。

正如前面所述,在SELinux中,访问控制属性他基本上就是安全上下文。所有的客体和主体有一个相关的安全上下文。标准Linux使用进程的用户/组ID,文件访问模式位和文件用户/组ID来同意或者是拒绝访问,SELinux使用进程和客体的安全上下文来进行访问控制。更具体的说,由于SELinux的主要访问控制特征是TE,即类型强制策略,安全上下文中的类型标识符被用来决定访问。

注意:
SELinux是在标准Linux之上添加的类型强制机制。也就是说标准Linux和SELinux访问控制都必须满足才能访问客体。所以,例如,我们有SELinux对于文件的一个写权限,但是没有标准linux的写权限,我们依然不能想文件中写入数据。

下面的表列出了标准Linux和SELinux的一些区别:

这里写图片描述

(三)、关于安全上下文更多的信息

安全上下文是一个简单的,一致的访问控制属性。在SELinux中,类型标识符是安全上下文中决定访问的主要的部分。由于历史原因,进程的类型经常被称作域(domain)。使用域和域类型来代表进程的类型是比较普遍的,所以我们不可避免的要是用术语“域”。大体上,认为域,域类型,主体类型和进程类型是同义的。

在安全上下文中的用户标识符和角色标识符在访问控制策略中起很小的作用,因为是类型强制策略而不是约束条件强制策略,约束条件强制策略我们将在第七章中讨论。对于进程来说,用户标识符和角色标识符是非常有趣的。

因为他们被用来控制用户标识符和Linux用户账户的类型相关联的。对于客体来说,用户标识符和角色标识符几乎没用。作为一个公约,一个客体的角色通常是 object_r ,一个客体的用户通常是创建该客体的进程的用户标识符。他们在访问控制中没有作用。

最后,要知道标准Linux中的用户ID和SELinux在安全上下文中的用户标识符的不同。技术上,他们是完全正交的标识符,被标准的访问控制机制和安全增强型的访问控制机制分别使用。他们之间的任何联系都是通过登录进程按照公约严格提供的,而不是被SELinux策略直接实施的。

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
2月前
长上下文能取代RAG吗?
【10月更文挑战第28天】本文探讨了检索增强生成(RAG)和长上下文(LC)在大型语言模型(LLMs)中的应用。RAG通过检索外部信息扩展LLM的知识范围,而LC则直接处理长文本。研究发现,LC在性能上通常优于RAG,但在处理超过模型上下文窗口的文本时,RAG表现出优势。此外,RAG在成本上更具优势。基于此,作者提出了Self-Route方法,结合RAG和LC的优点,实现性能和成本的最佳平衡。
43 7
|
5月前
|
自然语言处理 知识图谱
|
4月前
|
安全 Go 开发者
使用 contextvars 管理上下文变量
使用 contextvars 管理上下文变量
64 0
|
5月前
|
机器学习/深度学习 自然语言处理
上下文无关与上下文相关
上下文无关与上下文相关
|
5月前
|
JavaScript
使用局部上下文创建控制器对象
使用局部上下文创建控制器对象
|
5月前
|
C语言 Windows
上下文跳转之ucontext
上下文跳转之ucontext
|
C#
C# 当前上下文中不存在InitializeComponent()
C#——当前上下文中不存在InitializeComponent()可能原因是:项目文件直接由外部加载进来时可能出现错误。可以先检查xaml文件的开头x:Class=“day27test02.MainWindow”是否是正确的类名。如果不是,改成对应的项目的类即可。这是本人碰到的这种情况通过这种方式得到解决的,仅供参考。
753 1
C# 当前上下文中不存在InitializeComponent()
|
8月前
|
中间件
Koa2 中的上下文(context)是什么?如何使用上下文对象?
Koa2 中的上下文(context)是什么?如何使用上下文对象?
88 0
|
存储 Linux 调度
上下文之->解密篇
上下文之->解密篇
50 0
|
监控 Python
Python函数-上下文管理器
Python函数-上下文管理器
61 0