
Ubuntu 14.04を使用しています。sudoを使用して$PATHでコマンドを取得できません。これを/root/.profileファイルに追加しました。
# ~/.profile: executed by Bourne-compatible login shells.
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
export PATH=$PATH:/usr/local/rvm/rubies/default/bin
mesg n
ログアウトして、sudo 権限を持つユーザーとして再度ログインしました。その後、$PATH 内でコマンドを実行しようとしましたが、「コマンドが見つかりません」というメッセージが表示されます...
daveuser@mymachine:/home/rails/myproject$ sudo gem pristine --all
sudo: gem: command not found
daveuser@mymachine:/home/rails/myproject$ sudo echo $PATH
/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/ bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin
daveuser@mymachine:/home/rails/myproject$ sudo which gem
daveuser@mymachine:/home/rails/myproject$ which gem
/usr/local/rvm/rubies/ruby-2.3.0/bin/gem
$PATH を echo すると、“gem” コマンドが存在する PATH が正確に取得されることに注意してください。sudo ユーザーとしてコマンドを実行するときに “gem” コマンドが認識されるようにするには、他に何をする必要がありますか?
編集:preserve-env が機能しませんでした。何が起こったか見てみましょう...
remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser:
sudo: gem: command not found
編集2:sudo -lの出力
remoteuser@rtemotemachine:/home/rails/myproject$ sudo -l
Matching Defaults entries for remoteuser on rtemotemachine:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User remoteuser may run the following commands on rtemotemachine:
(ALL : ALL) ALL
答え1
デフォルトでは、sudoはセキュリティ上の理由から環境変数をリセットします。/etc/sudoersの次の行を確認してください。
Defaults env_reset
PATH 変数は「secure_path」値にリセットされます。
e.g. Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
あなたが試すことができます
sudo env "PATH=$PATH" [command]
sudo -E のパスを保存しても機能しませんでした。
より良い説明が見つかるここ
答え2
使用
sudo --preserve-env
-E, --preserve-env は、ユーザーが既存の環境変数を保持することをセキュリティ ポリシーに示します。ユーザーに環境を保持する権限がない場合、セキュリティ ポリシーはエラーを返すことがあります。