set*gid()
非常にまれな場合を除いて、さまざまなシステムコールには、グループを変更するための特権が必要です。プライマリグループをプロセスの補足グループの1つに変更することは、それらの1つではないようです。たとえば、newgrp
/ sg
コマンドは、プライマリグループを切り替えるために特権を昇格する必要があります。
setgid()
/ setegid()
/ setregid()
/ setfsgid()
特権のない補足グループへの切り替えを許可しない理由はありますか?もしそうなら、理由は何ですか?
newgrp/sg
は、プロセスの補足グループリストではなく、アカウントデータベースを指すことに注意してください。
setgid()
許可するとグループのメンバーシップを離れることができます(これはセキュリティ上の問題になります)が、上記と同じsetgid実行可能トリックを使用してこれを行うこともできます。そしてあなたのgidは通常あなたの補足リストにもあります(initgroups(3)
そのためにgid引数を取ります)。
/usr/bin/env
setgid権限でのコピーを作成することにより)その制限を回避できます。