私は少し実験していて、何か奇妙なことに気づきました。/usr/bin/bash-test
にあるbashのコピーにsetuidビットを設定します。 効果がないようでした。 bash-test
のインスタンスを実行したとき 、ホームディレクトリが/root
に設定されていません whoami
を実行したとき bash-test
からのコマンド 、私のユーザー名はroot
として報告されませんでした 、bash-test
を提案します ルートとして実行されていませんでした。ただし、whoami
にsetuidビットを設定すると 、予想通り、私はどのシェルでもルートであると報告されました。
/usr/bin/bash
にsetuidビットを設定してみました 同様に、同じ動作を観察しました。
setuidビットを設定したときにbashがrootとして実行されないのはなぜですか? selinuxはこれと関係がありますか?
承認された回答:
説明はちょっと面倒です:bash自体が理由です。 strace
私たちの友達です(これが機能するには、SUIDルート自体である必要があります):
getuid() = 1000
getgid() = 1001
geteuid() = 0
getegid() = 1001
setuid(1000) = 0
setgid(1001) = 0
bashは、SUIDルート(UID!=EUID)が開始されたことを検出し、そのルート電源を使用してこの電源を破棄し、EUIDをUIDにリセットします。そして後でFSUIDでさえ、念のために…:
getuid() = 1000
setfsuid(1000) = 1000
getgid() = 1001
setfsgid(1001) = 1001
結局のところ、チャンスはありません。 UIDルート(つまりsudo)でbashを開始する必要があります。
編集1
マニュアルページには次のように書かれています:
有効なユーザー(グループ)IDが実際のユーザー(グループ)IDと等しくない状態でシェルが開始され、-pオプションが指定されていない場合、スタートアップファイルは読み取られず、シェル関数は環境から継承されません。SHELLOPTS 、BASHOPTS、CDPATH、およびGLOBIGNORE変数は、それらが環境に表示されている場合は無視され、実効ユーザーIDは実際のユーザーIDに設定されます。呼び出し時に-pオプションが指定されている場合、起動動作は同じですが、有効なユーザーIDはリセットされません。
しかし、これは私にはうまくいきません。 -p
スタートアップオプションの中でも言及されていません。 --posix
も試しました;どちらも機能しませんでした。