man bash
set
私は組み込みフラグを説明するセクションを読みました-p
。このセクションでは、特権モードがBashの動作に与える影響のいくつかを示しますが、十分に深く説明しません(または十分なコンテキスト/経験がない)。 )それが何のためのものなのか、どのような状況で使われるのかを理解するためです。
私が混乱しているのは、私が特権モードについて読んだことのすべてが、「無益」という名前がより適切な名前であるかのように聞こえるからです。これはそれ自体が私が間違って理解したことを示しているかもしれません。
私もsetuidを理解しているかどうかわかりません。私は実効ユーザーIDと実際のユーザーIDが関係しているという事実に精通していますsudo
が、setuidがより広い概念であるように聞こえるので、何かが欠けている可能性があります。
ベストアンサー1
特権モードは、シェルが強化された特権で実行されている場合(たとえば、setuidプログラムによって呼び出される場合など)、セキュリティを強化するために(潜在的に危険な操作を制限することによって)存在します。
はい、「権利不足」のように聞こえるという点で正しいです。この-p
オプションは、より高い権限を持つユーザーの下でコマンドを実行するようにシェルをトリックすることによって攻撃を許可できることを制限することです。これがまさに起動スクリプトを制限する理由です。たとえば、この場合、権限を持つユーザーはこれらのスクリプトを所有または制御できません。また、環境から関数を継承することも危険です。cd
これは、特権シェル中に利用可能な機能、またはエクスポートしてls
攻撃に使用できるアクションをトリガーできるためです。
「setuid」についても質問しました。この文脈では、「setuid」は通常、特権(または出力)など、対応するビットを04000
含むバイナリの特権を表します。バイナリで「setuid」ビットを有効にすると、常にバイナリ所有者の有効なuidの下で実行されます。したがって、どのユーザーでも、rootが所有するsetuidバイナリを実行するたびにrootとして実行されます。実際の uid はそれを呼び出すユーザーの uid なので、この場合は確認が一般的です。 (しかし、ファイル権限の「setgid」ビットでも同じことが起こります。)04711
-rws--x--x
ls
effective uid != real uid
02000
したがって、利用可能な1つの可能なシナリオbash -p
は、特権ユーザー(rootまたはその他)で実行され、シェルを作成したいsetuidバイナリです。bash -p
これにより、bashはそのシナリオで使用できます。努力するより安全な状態を維持するために(危険な環境の起動スクリプトと機能を無視して)、実行時に有効なuidの権限が保持されます。オプションなしで呼び出すことは、-p
bashが単に有効なuidを無視し(実際のuidにリセットして)、何も起こらなかったかのように振る舞うことを意味します。
これにはまだ多くのセキュリティトラップがあります。したがって、特権bashを使用するには、まだセキュリティがどのように影響を受ける可能性があるかについて多くの考えが必要です。取られた措置-p
可能役に立ちますが、可能な攻撃シナリオの全体的な文脈で考慮する必要があります。