sudoに$ PATHを保存させる方法は?

sudoに$ PATHを保存させる方法は?

/ optの下のカスタムディレクトリにプログラムがインストールされています。簡単に実行できるようにbashrcを編集して、そのディレクトリを自分のパスに追加しました。

export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin

sudoなしでプログラムを実行したい場合は、この方法が非常に効果的です。ただし、sudoを使用して実行しようとすると、「コマンドが見つかりません」というエラーで失敗します。

$ sudo godi_console
sudo: godi_console: command not found

sudo を使用した後に PATH 変数を確認すると、通常のユーザーと同じ PATH が含まれていないことがわかります。

$ sudo sh
# echo $PATH                 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

なぜパスが違うのですか?私は何が間違っていましたか?違いがある場合は、Debian Jessieを使用しています。

私が試したことの1つは、/opt/godi/sbin/godi_consoleを直接呼び出して実行可能ファイルの絶対パスを渡すことでした。残念ながら、godi_console自体が正しく設定されたPATHに依存しているため、この特別なケースでは役に立ちません。

答え1

いつでも次のことができます。

sudo env "PATH=$PATH" godi_console

Debianのセキュリティ対策として、/etc/sudoersこのsecure_pathオプションは安全な値に設定されています。

気づく:

sudo "PATH=$PATH" godi_console

sudo文字自体を含む先行引数を環境変数の割り当てとして扱い、実行にも=適用できます。godi_consoleあなたの $PATH(とは逆secure_path)はその環境にありますが、実行可能ファイルの検索パスには影響しないため、ファイルを見つけるのにsudo役立ちません。sudogodi_console

答え2

デフォルトパスを次に設定することもできます。/etc/sudoers

編集ファイルの使用visudo

その行を必要に応じて更新してください。 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

答え3

SUDOはデフォルトで環境変数をリセットします。

ドキュメントとenv_resetというオプションを確認してください。

/etc/sudoersで簡単に無効にすることができます。

答え4

sudo --preserve-env=PATH env [command]

これは私の側の secure_path をオーバーライドします。

関連情報