`sudo --preserve-env=MY_VAR` と `sudo env MY_VAR=$MY_VAR`

`sudo --preserve-env=MY_VAR` と `sudo env MY_VAR=$MY_VAR`

私はman sudo以下を読んだ。

--preserve-env

ユーザーが既存の環境変数を保持したいセキュリティポリシーを表します。ユーザーが環境を保護する権限を持っていない場合、セキュリティポリシーはエラーを返す可能性があります。

ところで、この許可がなくても走ることを妨げるものが何なのか知りたいです。

sudo env MY_VAR=$MY_VAR <cmd>

ベストアンサー1

興味深い質問です。まず、環境を手動で設定するのは面倒なので、--preserve-env明らかに良いです。

セキュリティの観点から、sudo設定はenvsudoを使用した実行を無効にするか、またはenv

私はsudoer設定がフルルートアクセスのための制限されたコマンドのリストに制限されるとは思いません。それだけではありませんenv。なぜしないのですかsudo bash -c 'export MY_VAR="$MY_VAR"; exec <cmd>'?これはエスケープしてはならない制限されたシェルに似ています。走ることができるものを厳密に制限しないと、逃げ道があるかもしれません。

私はsudoerのマニュアルページのこのセクションがこれをサポートしていると思います:

SETENVとNOSETENV

これらのラベルは、コマンドごとに setenv オプションの値をオーバーライドします。コマンドにSETENVが設定されている場合、ユーザーは-Eオプションを使用してコマンドラインでenv_resetオプションを無効にできます。また、コマンドラインに設定されている環境変数には、またはによって課される制限は適用env_checkされませenv_deleteenv_keepしたがって、信頼できるユーザーだけがこの方法で変数を設定できます。一致するコマンドがALLの場合、そのコマンドはSETENVフラグを意味します。; このデフォルトは NOSETENV タグを使用して無視できます。

したがって、ユーザーがすべてのコマンドを使用できるようにする場合env(デフォルト)も使用できます--preserve-env。構成で特定のコマンドのみを許可する場合、デフォルトはNOSETENVなので、ユーザーはそれをバイパスし--preserve-envたり呼び出すことはできません。env

要約:アクセス権が不足しています--preserve-envが、そうである可能性はありませんenv

おすすめ記事