3

Fabricを使用して、Fabricを使用してApacheサーバーをリモートでデプロイしようとすると、問題が発生しました。最初にsudo()を使用してPATH変数に新しいパスを追加しようとしましたが、次にsudo()を使用して$PATHをエコーし​​ようとしました。ただし、新しいパスがPATHにまったく追加されていないように見えます。その結果、sudo()を介してそのパスのビンを実行できません。

[name@IP:port] Executing task 'reboot'
[name@IP:port] sudo: export PATH=$PATH:/new/path/to/add/install/bin
[name@IP:port] out: sudo password: 

[name@IP:port] sudo: echo $PATH
[name@IP:port] out: sudo password:
[name@IP:port] out: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

誰かがFabricのsudoコマンドにパス変数を追加する方法を教えてもらえますか?前もって感謝します。

4

2 に答える 2

2
  1. トロイの木馬が PATH にプッシュされるのを避けるために、root として実行する場合は常に実行可能ファイルへのフル パスを指定することを習慣にする必要があります。

  2. 経由での環境変数の設定は、現在のシェル セッション (によって呼び出されたもの)exportに対してのみ機能します。コマンド (この場合は ) が実行されると、シェルが終了し、環境変数が取得されます。次に を実行すると、以前の.sudoexportsudoexport

  3. 構成ファイル/etc/sudoersには通常、 のようなエントリが含まれています。その結果、呼び出し元の環境Defaults env_resetで設定された環境変数がによって呼び出された環境にコピーされないため、現在の環境で呼び出してから実行しても機能しません。これは、セキュリティ上の理由から行われます (上記の参照 1))。sudoexportsudo

  4. /etc/sudoersで3) の例外を設定することができenv_keepます。詳細は を参照しman sudoersてください。ただし、1) を参照してください。これはお勧めできません。

  5. には、呼び出し元の環境 (たとえば、拡張された を含む) を保持できるようにする-Eオプションがありますが、これはで設定する必要があります。繰り返しますが、詳細については を参照し、1) に注意してください。sudoPATHSETENV/etc/sudoersman sudoers

于 2012-11-19T11:49:55.313 に答える
-1

使用する

sudo('PATH=$PATH:/new/path/to/add/install/bin commad')
于 2015-11-28T12:49:32.853 に答える