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