【问题标题】:determine the user who run the current process [duplicate]确定运行当前进程的用户[重复]
【发布时间】:2013-08-11 21:43:01
【问题描述】:

我只是想知道,我们如何确定当前进程是否以 root 身份运行。在 google 上搜索后,我发现 Linux 有一个名为“current”的字段,我可以使用它来确定谁在运行特定进程。我尝试使用

current->uid == 0

但是,当我尝试编译我的代码时,我得到了这个错误

struct task_structâ has no member named âuidâ

我做错了吗?另外,如果进程以 root 身份运行,uid 总是等于 0,是真的吗?谢谢

【问题讨论】:

  • current->*** 变量仅在内核空间可见。在用户空间中,您应该使用getuid()
  • 只需使用getuid() == 0geteuid() == 0
  • @wildplasser 啊,我明白了。谢谢
  • 顺便说一句:getuid() 和 geteuid() 函数实际上是检查 current->[e]uid 字段(针对当前进程)并将它们报告给用户进程的系统调用。

标签: c linux root


【解决方案1】:

对于一个进程,它有 3 种用户 ID:

1.实际用户ID

--> 大部分时间是我们是谁,登录的人,而根进程有一些方法可以改变它。

使用getuid() 获取此用户ID。

2.有效用户ID

-->这个ID决定访问限制。 exce函数可以设置这个ID,如果没有,这个用户ID和实际用户ID是一样的。

使用geteuid() 获取此ID

3.保存设置用户ID

--> 通过exec 函数从有效用户ID 复制而来。没有函数可以获取这个ID的当前值。至少,我不知道。

所以

how can we determine if the current process is running as root or not

如果你的意思是运行 as root ,使用geteuid() == 0 更好,这只是我的看法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2010-12-23
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多