千家信息网

SElinux是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"SElinux是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!背景SELinux
千家信息网最后更新 2026年11月03日SElinux是什么

本篇内容介绍了"SElinux是什么"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

背景

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件

在 SELinux 出现之前,Linux 上的安全模型叫 DAC,全称是 Discretionary Access Control,翻译为自主访问控制。 DAC 的核心思想很简单,就是:进程理论上所拥有的权限与执行它的用户的权限相同。比如,以 root 用户启动 Browser,那么 Browser 就有 root 用户的权限,DAC 管理太过宽松,不够灵活所以有了SELinux。

作用

在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

SELinux使用类型强制来改进强制访问控制。所有的主体(程序进程)对客体(文件/socket等资源)的访问都有一条TE规则来许可。当程序访问一个资源的时候,系统会搜索所有的TE规则集,并根据结果进行处理。这个规则集是由访问向量规则(AV, Access Vector)来描述的。

内核向外部暴露允许访问的资源权限,由TE来描述主体拥有什么样的访问权。SELinux定义了30个不同的客体类别:

security process system capability filesystem file dir fd lnk_file chr_file blk_file socket_file ...

每个客体类别都定义了操作许可,比如针对file有19个操作许可:

`ioctl read write create getattr setattr lock relablefrom relableto append unlink link rename execute swapon quotaon mounton execute_no_trans entrypoint

查看进程的SElinux权限

在 SELinux 中,每种东西都会被赋予一个安全属性,官方说法叫做 Security Context,Security Context 是一个字符串,主要由三个部分组成,例如 SEAndroid 中,进程的 Security Context 可通过 ps -Z 命令查看:

rk3288:/ $ ps -AZu:r:hal_wifi_supplicant_default:s0 wifi      1816     1   11388   6972 0                   0 S wpa_supplicantu:r:platform_app:s0:c512,c768  u0_a14        1388   228 1612844  57396 0                   0 S android.ext.servicesu:r:system_app:s0              system        1531   228 1669680 119364 0                   0 S com.android.gallery3du:r:kernel:s0                  root           582     2       0      0 0                   0 S [kworker/1:2]u:r:radio:s0                   radio          594   228 1634876  89296 0                   0 S com.android.phoneu:r:system_app:s0              system         672   228 1686204 141716 0                   0 S com.android.settingsu:r:platform_app:s0:c512,c768  u0_a18         522   223 1721656 152116 0                   0 S com.android.systemui

上面的最左边的一列就是进程的 Security Context,以第一个进程 wpa_supplicant 为例

u:r:hal_wifi_supplicant_default:s0

  • u 为 user 的意思,SEAndroid 中定义了一个 SELinux 用户,值为 u

  • r 为 role 的意思,role 是角色之意,它是 SELinux 中一个比较高层次,更方便的权限管理思路。简单点说,一个 u 可以属于多个 role,不同的 role 具有不同的权限。

  • hal_wifi_supplicant_default 代表该进程所属的 Domain 为 hal_wifi_supplicant_default。MAC(Mandatory Access Control)强制访问控制 的基础管理思路其实是 Type Enforcement Access Control(简称TEAC,一般用TE表示),对进程来说,Type 就是 Domain,比如 hal_wifi_supplicant_default 需要什么权限,都需要通过 allow 语句在 te 文件中进行说明。

  • s0 是 SELinux 为了满足军用和教育行业而设计的 Multi-Level Security(MLS)机制有关。简单点说,MLS 将系统的进程和文件进行了分级,不同级别的资源需要对应级别的进程才能访问

访问规则

AV用来描述主体对客体的访问许可。通常有四类AV规则:

  • allow:表示允许主体对客体执行许可的操作.

  • neverallow:表示不允许主体对客体执行制定的操作。

  • auditallow: 表示允许操作并记录访问决策信息。

  • dontaudit:表示不记录违反规则的决策信息,切违反规则不影响运行`

通用的类型规则语法位:

1 allow platform_app debugfs:file { read ioctl };

表示类别为platform_app的程序进程,对debugfs类型的文件执行read和ioctl操作。

模式切换

SELINUX有「disabled」「permissive」,「enforcing」3种选择。

Disabled就不用说了。

permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用,是UserDebug的默认模式。

Enforcing就是你违反了策略,你就无法继续操作下去。

通过以下命令可以切换系统的SElinux模式 adb shell setenforce 0

0--代表Permissive

1--代表Enforcing

adb shell getenforce---查看状态

Android系统上遇到SElinux如何调试

在android系统开发中,因为selinux权限问题一般会在user版本出现,但我们在userdebug版本通过以下方式可以验证

1、第一步先确定问题是否由selinux权限问题引起   

通过命令: adb shell getenforce //查看当前SePolicy权限状态(Enforcing 表示打开 Permissive表示关闭)

userdebug版本处于permissive关闭状态   settenforce 1 //更改状态到Enforcing,0表示Permissive   进行测试,如果此时问题会出现,那么就是selinux权限问题

2、解决方法

1.adb shell dmesg----抓kernel log

(特别说明:adb shell "cat /proc/kmsg | grep avc" > avc_log.txt 可以直接提出avc的log)

2.adb logcat -b events

关键字:

avc: denied

如图:

  

这是一个selinux权限问题,我们只关注denied{} 、scontext 、tcontext 和 tclass 四个关键字就可以

  • denied{}括号内的内容表示被拒的权限动作

  • scontext的值表示需要在哪个te文件添加

  • tcontext 表示需要赋予权限的目标

  • tclass 表示权限问题的类型

这个问题的修改方式是在system_app.te文件添加如下代码: allow system_app sysfs_thermal:dir search;

注意:有时在Enforcing模式时不能看到所有缺少的权限日志,例如:

这个日志由于FileNotFoundException问题导致程序不会继续执行到代码终点,所以没有执行的代码所缺少的权限日志就不能得到,但是在Permissive模式所有权限问题会打印出来,所以建议抓log在Permissive模式下或者两种模式都抓

"SElinux是什么"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

权限 进程 问题 规则 文件 模式 控制 客体 就是 主体 系统 不同 内容 状态 用户 程序 类型 资源 强制 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海睿民互联网科技有限公司 互联网金融 科技 互联网科技论文 米客互联网科技 华中科技有哪些互联网大佬 科技赋能互联网健康 隆华科技工业互联网 以后互联网后是啥科技 贵州叶脉互联网科技有限公司所属行业 青岛科技大学互联网大赛研究生 佛山市拉法互联网科技有限公司 工业互联网等科技实现智能化赋能 元气玛特互联网科技公司是外包吗 广州百诚互联网科技有限公司官网 富国互联网科技002692 互联网科技包装股份有限公司上市 容联科技互联网电商 互联网领先科技成果宣传视频 青岛互联网科技园 互联网科技创业计划的风险分析 有格互联网科技 高科技与互联网 亿策互联网科技 互联网金融科技创新 善班互联网科技有限公司 天扬科技互联网广告 广东工业互联网大赛深圳学泰科技 互联网科技资金流入 广东鹅鹅鹅互联网科技有限公司 互联网科技企业商标注意事项
0