Android setuid失败,Galaxy s4上的权限被拒绝

Android setuid失败,Galaxy s4上的权限被拒绝,android,linux,galaxy,su,setuid,Android,Linux,Galaxy,Su,Setuid,我正在尝试在c上为android创建一个setuid程序。我在安卓2.3-4.2上测试了它,除了三星Galaxy s4(i9500)之外,它在所有设备上都运行良好 我使用CF Auto Root在设备上安装su,它运行良好。但我的应用程序做得不好 我已将mysu安装到system dir并设置了所有权限: shell@android:/ $ ls -Z /system/bin/mysu -rwsr-sr-x root root u:object_r:system

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

我使用CF Auto Root在设备上安装su,它运行良好。但我的应用程序做得不好

我已将mysu安装到system dir并设置了所有权限:

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还有什么功能?

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


还有一件事,SELinux是从4.3开始引入的,即使您必须是adb shell上的root用户,您仍然不能做任何其他事情。

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

android 4.3不再允许使用setgid和setuid

是的,可能S4在内核中有一些变化,但是chainfire的su是如何工作的呢?它不是标准程序,因为它是通过cf auto root安装的。无论是改变它的名称,还是在它的末尾添加垃圾(改变md5),都不会有什么不同——它正在工作。你是说4.3吗?4.3版本的根目录比以前的版本复杂得多。例如,我正在使用GalaxyNexus。在升级到4.3之前,我可以简单地快速启动设备并加载我自己的ramdisk,它有一个根adbd在运行。然后我将一个setuidsu程序复制到/system/xbin中,它工作得很好(在根目录下不修改任何系统文件-不破坏原始rom)。但是,在升级到4.3之后,这将不起作用,因为shell运行在一些特殊的上下文中,这将限制您的root权限。我不知道supersu是如何工作的,但我认为他们可能会改变系统。我说的是S4上的4.2。S4引入了KNOX,内部有SELinux。找到解决方案,请参见下文谢谢。这个问题是在Galaxy S4上没有4.3版本时提出的,但它很可能会被未来有类似问题的人阅读,因此在我看来这是一个有价值的补充。如果你发布自己的答案,如果你也能解释为什么需要fork(),那就太好了?@user1147688我不确定,但是需要重置一些流程属性。也许您可以在问题或答案中添加相关的代码片段。那会更有帮助。请你把mysu的源代码贴出来好吗?