Android有的命令不需要root权限,有的命令需要root权限是如何实现的

Android有的命令不需要root权限,有的命令需要root权限是如何实现的

bash 复制代码
例如:ls命令非root下,可以正常执行,而btconfig命令非root下不能被看到,所以不能被执行,需要root才可以。

# setenforce 0  // 临时关闭selinux 能看到btconfig
# setenforce 1  // 打开selinux

1, ls命令非root下,可以正常执行
kalama:/system/bin # ls -l ls
lrwxr-xr-x 1 root shell 6 2009-01-01 00:00 ls -> toybox
kalama:/system/bin # ls -lZ ls                                                                                                
lrwxr-xr-x 1 root shell u:object_r:system_file:s0  6 2009-01-01 00:00 ls -> toybox
kalama:/system/bin # ls -lZ /system/bin/toybox  // 查看toybox的selinux的上下文
-rwxr-xr-x 1 root shell u:object_r:toolbox_exec:s0  510384 2009-01-01 00:00 toybox

2, ls命令非root下,可以正常执行,原因是配置了如下selinux权限
在源代码的system/sepolicy,执行grep -r "toolbox_exec" 搜索
private/shell.te:allow shell toolbox_exec:file rx_file_perms;


3, btconfig命名非root下不能正常执行,需要root才可以
127|kalama:/ $ btconfig
/system/bin/sh: btconfig: inaccessible or not found

127|kalama:/ $ su
1|kalama:/system/bin # which btconfig                                                                                         
/vendor/bin/btconfig
kalama:/system/bin # ls -lZ /vendor/bin/btconfig
-rwxr-xr-x 1 root shell u:object_r:vendor_file:s0  123496 2009-01-01 00:00 /vendor/bin/btconfig

4, 修改btconfig上下文为toolbox_exec,使其能在普通用户下能看到。
adb root && adb remount
# chcon u:object_r:toolbox_exec:s0 /vendor/bin/btconfig
adb reboot重启后,在非root命令下,可以看到和使用该命令了

5, 查看selinux上下文是toolbox_exec的命令
kalama:/system/bin # ls -lZ | grep toolbox_exec                                                                               
-rwxr-xr-x 1 root shell u:object_r:toolbox_exec:s0                    33680 2009-01-01 00:00 mini-keyctl
-rwxr-xr-x 1 root shell u:object_r:toolbox_exec:s0                   126560 2009-01-01 00:00 toolbox
-rwxr-xr-x 1 root shell u:object_r:toolbox_exec:s0                   510384 2009-01-01 00:00 toybox

6, 修改selinux权限和linux用户文件权限常用命令
chmod 666 /dev/hraw0
chown system ...
chgrp system ...
$ su 切换到root权限,即切换到root用户下
adb root && adb remount
adb unroot
修改selinux上下文命令:chcon restorecon
修改linux用户权限命令:chmod chown chgrp

总结:
如果在root权限下,某命令可以正常执行,
而非root权限下,某命令能看到但执行失败或者某命令看不到,所以执行不了。
原因是:selinux权限和linux用户权限配置导致的。
如果想要把自己添加的命令暴露给App使用,只需要配置相应的selinux权限和linux文件权限即可。
执行su命令切换到root权限,本质上是切换到root用户。
非root权限下,即是普通用户。
相关推荐
_一条咸鱼_2 小时前
Vulkan入门教程:源码级解析
android·面试·android jetpack
嘉小华2 小时前
ThreadLocal 详解
android
wkj0013 小时前
php 如何通过mysqli操作数据库?
android·数据库·php
kymjs张涛4 小时前
零一开源|前沿技术周报 #7
android·前端·ios
wuwu_q6 小时前
RK3566/RK3568 Android11 修改selinux模式
android·rk3568
_一条咸鱼_7 小时前
Android Runtime内存共享与访问控制原理剖析(71)
android·面试·android jetpack
嘉小华7 小时前
第三章:焦点分发全链路源码解析
android
嘉小华7 小时前
Android 协程全景式深度解析:第六章 高阶并发模式
android
嘉小华7 小时前
Android 协程全景式深度解析:第七章 协程调试与性能优化
android
你过来啊你7 小时前
Android开发中RxJava的使用与原理
android