1

のマニュアルページによるとissetugid、呼び出しは次のいずれかになるはずです。(1) uid/gid の変更を警告する。または (2) 汚染された環境の可能性を警告します。関数名は、3 つ目の目的を示唆しています。

最初の質問: 目的は何ですか?

利用可能な実装を調べると (たとえば、Linux カーネルは API を提供しないため、Linux システムではライブラリとして)、次のことがわかります。

if (getuid() != geteuid()) return 1; 
if (getgid() != getegid()) return 1; 
return 0; 

Solaris では、次のようになります。

return ((curproc->p_flag & SUGID) != 0);

私は少し疑わしいですが、それは部分的には、BSD、Linux、Unix、Solaris など、すべてのプラットフォームで関数がどのようなもので、どのような関数が返さgeteuidれるのかを理解するのが難しいためです。getegid

2 番目の質問: Linux コードは意味的に Solaris コードと同等ですか?

3 番目の質問: はプラットフォーム間で同じようgeteuidに実装されていますか? getegidリアル、効果的、節約という 3 つの ID の遊びがあるシステムについてはどうですか?

4 番目の質問: ここで重要なのは実効 ID だけですか?

プロセスが UID = 0 として開始され、一時的に権限が失われた場合、savedID が影響を及ぼします。root を一時的に削除するプロセスは、汚染する必要execはなく、汚染するべきではありません。

5 番目の質問: root を一時的に削除するプロセスは汚染されていますか?

6 番目の質問: 有効な ID が保存された ID であるプロセスは汚染されていると見なすべきですか?

4

2 に答える 2