【问题标题】:in kernel program get root user id and compare with current user id在内核程序中获取 root 用户 id 并与当前用户 id 进行比较
【发布时间】:2015-01-09 17:56:48
【问题描述】:

我们知道,root uid 为 0。所以我尝试将当前进程的 uid 与 0 进行比较。如下:

uid_eq(get_current_cred()->uid, 0)

但是,我得到 'uid_eq' 的参数 2 的类型不兼容

我也试过

uid_eq(get_current_cred()->uid, (kuid_t)0)

但这也给出了这个错误:要求转换为非标量类型

我应该如何检查当前进程是否是内核中的根?谢谢。

【问题讨论】:

    标签: c linux kernel root


    【解决方案1】:

    kuid_t 是一个结构,所以你应该声明一个,并将它的val 成员设置为0

    试试这个

    kuid_t rootUid;
    
    rootUid.val = 0;
    uid_eq(get_current_cred()->uid, rootUid);
    

    【讨论】:

    • 非常感谢,我还没有意识到kuid_t是struct类型。您的答案是正确的,但仅用于检查 get_current_cred()->uid.val == 0 就足够了。
    • 可能是,但结构可能会在未来发生变化,我认为这就是为什么有一个uid_eq 函数,所以原则上,你可以使用memset(&rootUid, 0, sizeof(rootUid)); 并使用uid_eq功能,但我不确定。
    • 谢谢!另外,如果用户使用 sudo 运行程序,我是否应该使用uid_eq(get_current_cred()->euid, rootUid); 进行检查?
    • 我不确定,因为我不知道sudo 是如何工作的,而且我实际上从未使用过sudo,你应该通过打印get_current_cred()->euid.val 值来尝试,我会尝试的。
    猜你喜欢
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多