Setuidビットはbashに影響を与えないようです


14

私は少し実験していて、奇妙なことに気付きました:にあるbashのコピーにsetuidビットを設定/usr/bin/bash-testしても効果がないようです。のインスタンスを実行したときbash-test、ホームディレクトリがに設定されておらず/rootwhoamiコマンドを実行したときにbash-test、ユーザー名が報告されず、rootとして実行されていないrootことbash-testが示唆されました。ただし、setuidビットをonに設定するwhoamiと、予想どおりシェルのルートとして報告されました。

setuidビットもオンに設定してみて/usr/bin/bash、同じ動作を観察しました。

setuidビットを設定すると、bashがrootとして実行されないのはなぜですか?selinuxはこれと何か関係がありますか?

linux  bash  setuid 

1
この質問にはsetuidに関する追加情報があります。
アントン

チェン、ディーン、ワーグナーの解くSetuidもご覧ください。その古い紙ですが、それでも適用されます。

回答:


21

説明はちょっと面倒です: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。動作しませんでした。


2

いずれの場合でも、SUIDルートプログラムルートの環境($HOME、シェルの構成など)では実行されず、ルートパワーで実行されます(つまり、ファイルを削除したり、権限を変更したりできます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.