残りの環境とsudoに関して「PATH」の特別な点は何ですか?

残りの環境とsudoに関して「PATH」の特別な点は何ですか?

~からsudoを使用するとコマンドが見つかりません

実際に正しく呼び出すと、sudo現在の環境 PATHenvコマンドを使用)および/または残りの環境(オプションを使用)で機能します。-E

sudo -E env "PATH=$PATH" <command> [arguments]

実際にそれを使用してエイリアスを作成できます。

alias mysudo='sudo -E env "PATH=$PATH"'

sudo(元の名前を置き換えてエイリアス自体の名前を指定することもできますsudo。)

コマンドでsudoオプションの代わりに現在を使用するのはなぜですか?PATHenv-E

コマンドの代わりにオプションでsudo残りの環境を使用するのはなぜですか?-Eenv

これもPATH環境の一部ですか?

PATH他の環境と比較して特別な点は何ですか?

ありがとうございます。


~からsudo マンページ

sudo は外部コマンドの実行時にセキュリティを確保しようとします。コマンドのなりすましを防ぐために、sudo は「.」をチェックします。ユーザーのPATHからコマンドを検索すると(どちらか一方または両方がPATHにある場合)、最後のコマンドは ""です(両方とも現在のディレクトリを表します)。しかし、参考にしてください。実際の PATH 環境変数は変更されず、sudo が実行するプログラムに変更されずに渡されます。

これは、「実際のPATH環境変数は変更されませんが、sudoが実行されているプログラムには変更されずに渡され、」ユーザー変数がPATH実行されたコマンドにそのまま渡されることを意味しますか?sudo

ベストアンサー1

有効にするとenv_reset(デフォルト)sudo環境を消去し、特に独自の環境を提供しますPATH(参考secure_path文献を参照/etc/sudoers)。env_reset無効になっていても適用され、消去される可能性がありenv_checkます。出力を比較するとこれがわかります。env_deletePATH

echo $PATH

そして

sudo printenv PATH

カスタム項目がある場合、PATH出力には表示されませんsudo printenv

このenvヒントは環境の整理に関するものです。

sudo env "PATH=$PATH" command

sudo実行を求められ、現在を含めるようにシェルで拡張しenv "PATH=$PATH" commandてrootとして実行すると、その値はその環境に保存され、その環境で実行されます。$PATHPATHenvPATHcommand

したがって、構成に応じてのPATHコンテキストを除いて特別なものはありません。適切な構成では、すべての変数をsudo同じ方法で「特殊」sudoまたはPATH「非特殊」にすることができます。よりsudoそしてsudoers詳しくはマンページをご覧ください。

おすすめ記事