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


37

私が発行する場合

sudo my-command

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

これmy-commandは私のPATHにあります。問題なく呼び出すことができます。ただし、で呼び出すとsudo、が取得されcommand not foundます。興味深いことに、これを経験することはありません。克服する方法は?

編集:その「可能性のある重複」の選択された答えは間違っている、まあ、少なくともポイントに。テルドンからのこの答えは正しいものです。

回答:


48

これは通常、の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がその.exeになります$PATH


2
または、これがプロダクションマシンでなくても構わない場合は、行全体をコメントアウトします。次に、ユーザーのPATHを使用します。デフォルトでは設定されていませんが、必ずしもそうとは限りません...
Nagev

2

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.