通常测试用户是否为 root 是错误的。 POSIX 甚至不需要 root 用户,而是将其留给实现来确定权限如何工作。代码如:
if (i_am_root) do_privileged_op(); else print_error();
使用高级权限模型确实会惹恼用户,其中不需要 root 即可执行必要的特权操作。我记得在 Linux 上刻录 CD 的早期,我不得不破解所有的cdrecord
source 删除所有无用的检查,看看它是否以 root 身份运行,当它在具有读取权限的情况下运行良好时/dev/sga
.
相反,你应该始终attempt您需要执行的特权操作,并检查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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)