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权限下,即是普通用户。
相关推荐
robotx1 小时前
AOSP设备节点权限添加相关
android
顾林海1 小时前
Android文件系统安全与权限控制:给应用数据上把“安全锁”
android·面试·操作系统
青莲8431 小时前
Android 动画机制完整详解
android·前端·面试
城东米粉儿1 小时前
android 离屏预渲染 笔记
android
未知名Android用户1 小时前
Android自定义 View + Canvas—声纹小球动画
android
_李小白2 小时前
【Android FrameWork】延伸阅读:AMS 的 handleApplicationCrash
android·开发语言·python
_李小白2 小时前
【Android FrameWork】第四十九天:SystemUI
android
Mr -老鬼2 小时前
移动端跨平台适配技术框架:从发展到展望
android·ios·小程序·uni-app
城东米粉儿2 小时前
compose measurePoliy 笔记
android