gpt4 book ai didi

检查用户是否是 C 中的 root 用户?

转载 作者:太空狗 更新时间:2023-10-29 16:20:51 24 4
gpt4 key购买 nike

如何验证用户是否为 root?

最佳答案

通常测试用户是否为 root 是错误的。 POSIX 甚至不需要 root 用户,而是将其留给实现来确定权限如何工作。代码如:

if (i_am_root) do_privileged_op(); else print_error();

高级权限模型确实会惹恼用户,在这些模型中,不需要 root 来执行必要的特权操作。我记得在 Linux 上刻录 cd 的早期,我不得不破解整个 cdrecord 源代码以删除所有无用的检查以查看它是否以 root 身份运行,当它工作得很好时读取 /dev/sga 的权限。

相反,您应该始终尝试您需要执行的特权操作,并检查 EPERM 或类似的操作是否无法通知用户他们没有足够的特权(也许应该重试以 root 身份运行)。

检查 root 有用的一种情况是检查您的程序是否被调用了“suid-root”。一个合理的测试是:

uid_t uid=getuid(), euid=geteuid();
if (uid<0 || uid!=euid) {
/* We might have elevated privileges beyond that of the user who invoked
* the program, due to suid bit. Be very careful about trusting any data! */
} else {
/* Anything goes. */
}

请注意,我考虑到获取 uid/euid 的任何一个调用都可能失败的可能性(牵强附会,但最好是偏执),并且在失败的情况下,我们应该假设我们是 suid 并且是恶意的用户以某种方式导致系统调用失败以试图隐藏我们是 suid。

关于检查用户是否是 C 中的 root 用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com