首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AOSP setgid/setuid无效

AOSP setgid/setuid无效
EN

Stack Overflow用户
提问于 2016-10-06 18:19:45
回答 1查看 286关注 0票数 0

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

这是KitKat,SELinux已禁用(也尝试使用权限)。

示例代码:

代码语言:javascript
复制
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项目中测试),并补充道:

代码语言:javascript
复制
allow su self:capability { setuid setgid };

这也无济于事。

我还尝试在setgid()之前添加setgroups(0,NULL);,但没有任何效果。

还可能遗漏/错误什么?

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

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2016-10-12 05:49:14

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39893422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档