SELinux 相关知识总结分析

什么是Andorid SElinux?

SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,这个系统是要强制控制进程对系统资源的访问,并提供基于角色和多层级的安全访问控制策略。它要控制的不仅仅是用户,而是进程级别的。SELinux提供了比传统的UNIX权限更好的访问控制

使用SELinux,我们可以指定只有满足某种条件的进程才能访问相关的系统资源,这样即使用户运行了攻击程序或者以root身份运行,它也访问不了SELinux不授权的文件。

其工作原理如下:
在这里插入图片描述


哪个版本默认开启了selinux?

userdebug版本和eng版本默认关闭;
user默认开启;


如何通过调试手段确认问题是否是selinux导致?

  1. 将SELinux 模式调整到Permissive 模式,然后再测试确认是否与SELinux 约束相关。
  2. 如果还能复现问题,则与SELinux 无关, 如果原本很容易复现, 而Permissive mode 不能再复现, 那么可能关系比较大.
  3. adb在线修改seLinux:
getenforce  //获取当前seLinux状态
	Enforcing ://表示已打开 
	Permissive ://表示已关闭

setenforce 1 //打开seLinux
setenforce 0 //关闭seLinux


SELinux包含五个基本组成:

  1. 用于处理文件系统的辅助模块,即SELinuxFS.
  2. 集成Linux Security Modules的hooks sets.
  3. Security Policy Database.
  4. Security Label验证模块.
  5. Access Vector Cache(AVC),访问向量缓存,以便提高验证速度.

具体流程如下:

  1. 进程通过系统调用(System Call)访问某个资源,进入Kernel后,先会做基本的检测,如果异常则直接返回.
  2. Linux Kernel DAC审查,如果异常则直接返回.
  3. 调用Linux Kernel Modules的相关hooks,对接到SELinux的hooks,进而进行MAC的验证,如果异常则直接返回.
  4. 访问真正的系统资源.
  5. 返回用户态,将结构反馈.

注:enforcing mode (限制访问);permissive mode:(只审查权限,不限制)

猜你喜欢

转载自blog.csdn.net/weixin_45639314/article/details/131308693