私はman sudo
以下を読んだ。
--preserve-env
ユーザーが既存の環境変数を保持したいセキュリティポリシーを表します。ユーザーが環境を保護する権限を持っていない場合、セキュリティポリシーはエラーを返す可能性があります。
ところで、この許可がなくても走ることを妨げるものが何なのか知りたいです。
sudo env MY_VAR=$MY_VAR <cmd>
?
答え1
興味深い質問です。まず、環境を手動で設定するのは面倒なので、--preserve-env
明らかに良いです。
セキュリティの観点から、sudo設定はenv
sudoを使用した実行を無効にするか、またはenv
。
私はsudoer設定がフルルートアクセスのための制限されたコマンドのリストに制限されるとは思いません。それだけではありませんenv
。なぜしないのですかsudo bash -c 'export MY_VAR="$MY_VAR"; exec <cmd>'
?これはエスケープしてはならない制限されたシェルに似ています。走ることができるものを厳密に制限しないと、逃げ道があるかもしれません。
私はsudoerのマニュアルページのこのセクションがこれをサポートしていると思います:
SETENVとNOSETENV
これらのラベルは、コマンドごとに setenv オプションの値をオーバーライドします。コマンドにSETENVが設定されている場合、ユーザーは-Eオプションを使用してコマンドラインでenv_resetオプションを無効にできます。また、コマンドラインに設定されている環境変数には、またはによって課される制限は適用
env_check
されませenv_delete
んenv_keep
。したがって、信頼できるユーザーだけがこの方法で変数を設定できます。一致するコマンドがALLの場合、そのコマンドはSETENVフラグを意味します。; このデフォルトは NOSETENV タグを使用して無視できます。
したがって、ユーザーがすべてのコマンドを使用できるようにする場合env
(デフォルト)も使用できます--preserve-env
。構成で特定のコマンドのみを許可する場合、デフォルトはNOSETENVなので、ユーザーはそれをバイパスし--preserve-env
たり呼び出すことはできません。env
要約:アクセス権が不足しています--preserve-env
が、そうである可能性はありませんenv
。