GNU/Linux >> Linux の 問題 >  >> Linux

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

私は少し実験していて、何か奇妙なことに気づきました。/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も試しました;どちらも機能しませんでした。


Linux
  1. グループにユーザーを追加しましたが、ファイルに対するグループのアクセス許可はまだ効果がありませんか?

  2. Linux – SuidはLinuxのディレクトリに影響を与えませんか?

  3. Setuidビットを適切に使用していますか?

  1. Linux Setuidが機能しませんか?

  2. タイプアヘッドをBash履歴検索(ctrl-r)に適用するにはどうすればよいですか?

  3. Zshでアスタリスク「*」を取得してBashと同じ動作をさせるにはどうすればよいですか?

  1. root としても bash スクリプトを実行できませんか?

  2. jenkins パイプラインで bash コマンドを実行する

  3. root 権限がない場合に Linux に VIM をインストールするにはどうすればよいですか?