【问题标题】:AOSP setgid/setuid have no effectAOSP setgid/setuid 没有效果
【发布时间】:2017-02-15 01:07:40
【问题描述】:

我遇到了来自 setgid/setuid 的非常奇怪的行为。他们不返回错误代码,但也不调整进程权限。

这是 KitKat,SELinux 已禁用(也尝试过许可)。

示例代码:

int main(int argc, char **argv)
{
    if (setgid(0) || setuid(0))
    {
        fprintf(stderr, "su: unable to setgid/setuid!\n");
    }
    else
    {
        fprintf(stderr, "su: getgid: %d, getuid: %d\n", getgid(), getuid());

        char *args[argc + 1];
        args[0] = "sh";
        args[argc] = NULL;

        int i;
        for (i = 1; i < argc; i++)
        {
            args[i] = argv[i];
        }

        execv("/system/bin/sh", args);
    }
}

输出是 getgid/getuid 仍然是 1000,而不是 0。

最后启动的 shell 也没有 root 权限(在大多数命令/脚本上获得权限被拒绝)。

我查看了 su.te(此代码正在替换现有的 su,只是为了更容易在现有的 AOSP 项目中进行测试),并补充说:

allow su self:capability { setuid setgid };

这也无济于事。

我也尝试添加 setgroups(0, NULL);在 setgid() 之前,但这并没有做任何事情。

还有什么可能遗漏/错误的?

编辑:阅读更多信息,可能 /system 文件夹上设置了 nosuid,但查看 init.rc,它似乎没有专门设置。

提前致谢。

【问题讨论】:

    标签: root android-source su


    【解决方案1】:

    我已经解决了这个问题 - 显然问题在于未在可执行文件上设置粘性安全位。

    【讨论】:

    • 你能解释一下吗?
    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 2020-05-01
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多