web-dev-qa-db-ja.com

`Sudo`に$ PATHを保存させるには?

/ opt/godi/sbin(カスタムディレクトリ)にインストールされているプログラムを実行する必要があります。そのディレクトリをPATHに追加する場合は、.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

PATHが同じではないのはなぜですか?私は何か間違ったことをしていますか?私はDebian Jessieを使用していますが、残念ながら、sudoにgodi_consoleへの絶対リンクを渡しても問題を回避できません。godi_console自体も、正しく設定されているPATHに依存しているためです。

132
hugomg

あなたはいつでもできます:

Sudo env "PATH=$PATH" godi_console

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

ご了承ください:

Sudo "PATH=$PATH" godi_console

Sudoは、=文字を含む先行引数をそれ自体で環境変数の割り当てとして扱い、godi_consoleの実行時にyour$PATH(asその環境ではsecure_path)とは対照的ですが、Sudoの実行可能ファイルの検索パスには影響しないため、Sudogodi_consoleを見つけるのに役立ちません。

159

/etc/sudoersでデフォルトのPATHを設定することもできます

visudoを使用してファイルを編集します

そして、行をあなたが望むものに更新してください:Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

48
michaelbn

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

マニュアルとenv_resetと呼ばれるオプションを確認してください。

/ etc/sudoersで無効にするだけです。

19
KWubbufetowicz

これは機能します:

Sudo $(which your_command)

Nvidia GPUのプロセスをリストするmy gpsスクリプトを呼び出す例:

$ Sudo gps
Sudo: gps: command not found
$ Sudo $(which gps)
  PID TTY          TIME CMD
 9922 tty7     02:42:47 Xorg

説明 :

$ set -x;Sudo $(which gps);set +x
++ which gps
+ Sudo /home/xyztuv/myScripts/shl/gps
  PID TTY          TIME CMD
 9922 tty7     02:42:39 Xorg
+ set +x
6
SebMa
Sudo --preserve-env=PATH env [command]

これは私の終わりにsecure_pathをovverrides

3
untore

これはうまくいきました:

Sudo "PATH=$PATH" [your command]

$ PATHをパスの値で変更しないでください。このように書くだけです。

例:$ Sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....

1
imane kichu

たぶん、OPが要求することは正確ではないかもしれませんが、これは役立つかもしれません:

Sudo -u the_user PATH=$PATH:/opt/godi/bin sh -c 'echo $PATH'

これにより、PATHが変更されます内部 sudoedコマンド。

編集:上記はほとんどナンセンスなので、私がこれで何を意味するのかわかりません。代わりに以下を使用してください:

Sudo -u the_user sh -c 'PATH=$PATH:/opt/godi/bin echo $PATH'
0
phil294