检查用户是否在C的根?
我如何validation用户是否是root用户?
通常testing用户是否是root是错误的。 POSIX甚至不需要root用户,而是将其留给实现来确定权限的工作方式。 代码如:
if (i_am_root) do_privileged_op(); else print_error();
如果用户不需要root来执行必要的特权操作,将会使用户拥有高级权限模式。 我记得早在Linux的光盘刻录的早期,我不得不cdrecord
删除cdrecord
源文件,以删除所有无用的检查,看看它是否以root身份运行,当它工作得很好,有权读取/dev/sga
。
相反,你应该总是尝试你需要执行的特权操作,并检查EPERM
或类似的,如果它没有通知用户,他们没有足够的权限(也许应该重试作为根运行)。
检查根目录有用的一种情况是检查你的程序是否被调用“suid-root”。 一个合理的testing将是:
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。
getuid
或geteuid
,这取决于你的意思。 在任何一种情况下,0表示根。
if(geteuid() != 0) { // Tell user to run app as root, then exit. }
R提出的观点是有效的。 你应该考虑试验和错误,或者另一种不明确需要根的方法。