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权限下,即是普通用户。
相关推荐
AI大法师4 小时前
Android应用性能监测与调优:掌握Profiler和LeakCanary等关键工具
android
2501_915106328 小时前
iOS混淆工具实战 金融支付类 App 的安全防护与合规落地
android·ios·小程序·https·uni-app·iphone·webview
alexhilton9 小时前
运行时着色器实战:实现元球(Metaballs)动效
android·kotlin·android jetpack
從南走到北10 小时前
JAVA国际版东郊到家同城按摩服务美容美发私教到店服务系统源码支持Android+IOS+H5
android·java·开发语言·ios·微信·微信小程序·小程序
观熵12 小时前
Android 相机系统全景架构图解
android·数码相机·架构·camera·影像
Huntto13 小时前
在Android中使用libpng
android
雨白15 小时前
Android 自定义 View:彻底搞懂 Xfermode 与官方文档陷阱
android
_小马快跑_15 小时前
从VSync心跳到SurfaceFlinger合成:拆解 Choreographer与Display刷新流程
android
_小马快跑_15 小时前
Android | 视图渲染:从invalidate()到屏幕刷新的链路解析
android
Monkey-旭18 小时前
Android 定位技术全解析:从基础实现到精准优化
android·java·kotlin·地图·定位