web-dev-qa-db-ja.com

Sudoコマンドのパスを設定する方法

発行した場合

Sudo my-command

linuxはそのmy-commandをどのように探しますか?

my-commandは私のPATHにあります。問題なく起動できます。しかし、Sudoを付けて呼び出すと、command not foundが返されます。興味深いことに、これまでに体験したことはありません。克服する方法?

EDIT:「重複する可能性がある」の選択した答えは間違っています。ポイント。 terdonからのこの答えは正しいものです。

30
xpt

これは通常secure_path/etc/sudoersオプションによって設定されます。 man sudoersから:

 secure_path   Path used for every command run from Sudo.  If you don't
               trust the people running Sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

デフォルトの$PATHにないコマンドを実行するには、

  1. フルパスを使用します。Sudo ~/bin/my-command;または

  2. コマンドを含むディレクトリをsecure_pathに追加します。 Sudo visudoを実行してセキュアパスの行を編集します。

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    ファイルを保存し、次回Sudoを実行すると、ディレクトリ~/binがその$PATHに入ります。

40
terdon

これは私が回避策に使用したものです:

Sudo cp $(which my-command) /usr/bin
...

whichコマンドはroot以外のサブシェルで実行されるため、my-commandを見つけることができます。その後、Sudoは実行可能ファイルをrootユーザーがアクセスできるパスにコピーします。セキュリティには向いていませんが、コマンドを実行した直後に破壊されていたdockerイメージを実行しても問題ありませんでした。

2
Brenden Smith