setuid在Galaxy s4上使用PermissionDenied失败

时间:2013-08-14 08:09:23

标签: android linux galaxy su setuid

我正在尝试在c上为android创建一个setuid程序。我在android 2.3-4.2上进行了测试,它在除三星Galaxy s4(i9500)之外的所有设备上运行良好。

我使用CF-Auto-Root在设备上安装su,它运行正常。但我的应用程序效果不佳。

我已将mysu安装到系统目录并设置所有权限:

shell@android:/ $ ls -Z /system/bin/mysu
-rwsr-sr-x root     root              u:object_r:system_file:s0 mysu

那是关于Chainfire的su:

shell@android:/ $ ls -Z /system/xbin/su
-rwsr-sr-x root     root              u:object_r:system_file:s0 su

Selinux处于宽松模式:

shell@android:/ $ getsebool -a
android_cts --> on
app_bluetooth --> off
app_external_sdcard_rw --> on
app_internal_sdcard_rw --> on
app_ndk --> off
app_network --> on
app_read_logs --> off
app_vpn --> off
debugfs --> on
in_qemu --> off
manage_mac --> on
manage_selinux --> on
support_runas --> on
system_app_manage --> off

shell@android:/ $ getenforce
Permissive

在mysu中我在调用shell之前使用setuid和setgid,并且它们在Galaxy S4上失败:

shell@android:/ $ mysu
euid, egid: 0, 0
uid, gid: 2000, 2000
setgid(0): Permission denied
setuid (0): Permission denied
execv("/system/bin/sh", exec_args): Permission denied

我做错了什么?除了setuid和setgid之外,Chainfire的su是什么?

3 个答案:

答案 0 :(得分:3)

解决方案:在调用setuid(0)之前执行fork()。

答案 1 :(得分:0)

G4可能有一个定制的内核,可能会禁止第三方程序将uid设置为0。

还有一件事,SELinux是从4.3开始引入的,即使你是adb shell上的root用户,你仍然无法做其他事情。

答案 2 :(得分:0)

从android 4.3开始,setgid和setuid不再允许使用了。