コマンド例:
drush cc all
動作しますが、これは次のようになります。
sudo drush cc all
私にしてください:
sudo: drush: command not found
なぜ?この問題をどのように解決しますか?
答え1
これにより、次のように事前設定されsudo
たものが得られます。$PATH
根ユーザーのデフォルトパスです。あなたのプログラムがとして識別されたディレクトリのリストにありません$PATH
。
例を見る
sudo
$ PATHを保存する方法は?- sudoとsuを介して実行するときにPATH変数が異なるのはなぜですか?
- 須藤(5)(関連各種設定参照
PATH
) - 須藤(8)
Sudo外部コマンドを実行するときは、できるだけ安全にしてください。
環境変数を処理する方法は2つあります。基本的に、
env_reset
Sudoers オプションが有効です。これにより、以下を含む最小環境でコマンドが実行されます。TERM
、PATH
、HOME
、SHELL
、LOGNAME
、USER
そしてUSERNAME
env_check
呼び出しプロシージャーに追加および許可される変数env_keep
Sudoersオプション。実際、環境変数のホワイトリストがあります。
sudo
保存を構成できない場合の$PATH
一般的な回避策は、プログラムの絶対パス名を指定することです。 (訪問していない)ディレクトリから別の実行可能ファイルを呼び出すスクリプトでは機能しない可能性があります。
答え2
フルパスを指定する必要があります。また、より安全です。パスを指定しないと、攻撃者がroot権限で実行される別のプログラムを作成することもできます。
/etc/sudoers
また、これを許可するには1行を挿入する必要があります。man sudoers
文法のためにここに入れる内容が多すぎます。