まず、権限下げがない場合について
ノーマルはX
pオプションはO
setresuidはO
pオプション+setresuidはO
次に、権限下げがあった場合について
ノーマルはX
pオプションはX
setresuidはO
pオプション+setresuidはO
/bin/shや/bin/bashを起動する際に、実UIDと実行UIDが異なる場合は、/bin/shや/bin/bashが実行UIDに実UIDをセットしてしまうのは本当。
→権限下げがない場合のノーマルはXなのに対して、権限下げがない場合のpオプションはOであるから
pオプションは/bin/shや/bin/bashの権限下げには対応できるが、ターゲットプログラム内の権限下げには対応できない
→権限下げがない場合のpオプションはOであるが、権限下げがある場合のpオプションはXであるから
setresuidは/bin/shや/bin/bashの権限下げと、ターゲットプログラム内の権限下げの両方に対応している
→権限下げがない場合のsetresuidも、権限下げがある場合のsetresuidもOであるから
つまり、setresuidを使えば、pオプションを使う必要はない