根据issetugid
的手册页,呼叫应该是(1)警告uid/gid变化;或(2)警告可能受污染的环境。函数名称提示了第三个目的。issetugid的用途?
第一个问题:它的目的是什么?
当我看到可用的实现(例如,Linux系统作为一个库,因为Linux内核不提供API上),我发现了以下内容:
if (getuid() != geteuid()) return 1;
if (getgid() != getegid()) return 1;
return 0;
在Solaris上,它看起来如下:
return ((curproc->p_flag & SUGID) != 0);
我有点怀疑,但是这部分是因为它很难明白什么样的跨平台geteuid
和getegid
回报功能 - 例如,BSD,Linux,Unix和Solaris操作系统。
第二个问题:Linux代码在语义上是否等同于Solaris代码?
第三个问题:是否geteuid
和getegid
跨平台实现?对于拥有三位身份证明系统的系统如何 - 真实,有效并保存?
第四个问题:在这里唯一的id是否是有效的id?
如果一个进程以UID = 0开始,并暂时放弃权限,那么saved
就会发挥作用。暂时丢弃root的进程不需要exec
,并且不应该被污染。
第五个问题:是否会暂时丢弃根感染的进程?
第六个问题:如果一个进程的有效id是被保存的id被认为是有问题的?
所陈述的主要理由骂issetugid-在setuid或setgid程序或程序 ,一个成功的高管后,有更多的权限运行时,以保证安全 行为。你可能会使它比实际更复杂。 –
谢谢吉姆。我处于困境 - 我正在审核一些使用该函数的代码。在Linux上,该库提供API,因为它不是。但我不知道它应该做的(因为它的非标),或者如果它有效地做这件事([设置uid揭秘](http://www.cs.berkeley.edu/~daw/papers/setuid- usenix02.pdf))。 – jww