跳过正文

SELinux、root权限控制

·74 字·1 分钟
jiladahe1997
作者
jiladahe1997
To see the world as it is, and to love it

背景
#

在安卓系统中,权限控制十分的严格。 举个例子,APP想要连接网络,需要权限;想要拉起相机,需要权限;想要读写文件,需要权限,等等。 这样做的目的是防止APP应用恶意的对系统进行破坏。

实现权限管理功能的模块叫做SELinux( Security Enhanced Linux )。



SELinux
#

Security Enhanced Linux,顾名思义,安全增强的Linux。 在传统的Linux中,权限控制的基本单位是“用户”,root用户可以拥有所有的权限,因此各大黑客、漏洞的目标都是获取root用户,从而可以获取所有的权限。 这种模式也叫作DAC 自主访问控制Discretionary Access Control
但是SELinux的权限基本单位是“进程”,这种模式也叫作 MAC 强制访问控制Mandatory Access Control


因此SELinux的权限配置也十分的复杂,详情请自行谷歌 SELinux的官方文档。


SELinux的配置:
#

**TODO **


暂时关闭SELinux
#

SELinux有三种模式:

  • Enforcing 强制— SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问
  • Permissive 宽容— SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志
  • Disabled 禁用— 完全禁用SELinux

一般我们调试时,可以将SELinux设置到Permissive模式:
在uboot的启动参数中加上 androidboot.selinux=permissive即可




root
#

虽然Android系统上主要使用SELinux来做权限管理,但是Linux的基于用户的权限管理仍然生效。举个栗子:

假设某个应用即使有读写文件的权限,但是仍然不能直接读取/var/log 这种uid是root的文件。

如果此时我们要让应用读写、操作root权限的某些命令,就需要给安卓系统进行root。


给安卓系统进行root:
#

【Android 10 编译完全root版本】https://www.jianshu.com/p/b7b0361aca34

另外,系统进行了root之后,可以通过 adb shell pm grant package_name permission给APP授权。而不弹窗。


安全的root
#

上述文档是对整个系统开放了root,这实际上是不安全的。 比较安全的方法的是对某一个APP开放root,其他APP均向那一个APP申请root权限。这也是superSu、magisk这种常见的root工具的做法。

【编写仿supersu的权限管理工具(aosp11 root、实现aosp系统内置wifi、root管理apk)】https://blog.csdn.net/abc767234318/article/details/119749264