根據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