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

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

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

/usr/bin/bashまた、setuidビットの設定を試み、同じ動作を観察しました。

setuidビットを設定するときにbashがrootとして実行されないのはなぜですか? selinuxはこれに関連していますか?

ベストアンサー1

この説明は少し迷惑です。 bash自体が理由です。strace私たちの友達です(これを行うにはSUIDルートでなければなりません):

getuid()                                = 1000
getgid()                                = 1001
geteuid()                               = 0
getegid()                               = 1001
setuid(1000)                            = 0
setgid(1001)                            = 0

bashはSUIDルート(UID!= EUID)を開始したことを検出し、root権限を使用してこの権限を破棄し、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いきませんでした。

おすすめ記事