web-dev-qa-db-ja.com

Sudoとしてプログラムを実行できない

Ubuntu 18.04でSudoを使用してコマンドラインを使用してツールなどをインストールすると、完全に機能します。例:Sudo apt install ...は完全に機能します。 Sudoがまったく機能しないため、コマンドラインからツールとプログラムを実行する。通常のユーザーと同じプログラムとツールを実行すると、完全に機能します。例:start gtkwaveは通常のユーザーとしてgtkwave GUIをポップアップします。 gtkwaveをSudoとして起動し、パスワードを要求して、Sudo: gtkwave: command not foundで終了します。

Sudoとしてコマンドラインで呼び出されたいくつかのツールは問題なく動作します。たとえば、通常のユーザーとしてSudoとしてコマンドラインからAtomを起動できます。

これはおそらく、Sudoとして実行されていないツール/プログラムが/bin/usr/binなどの一般的なLinuxフォルダーにインストールされず、/optの下のプログラムとしてインストールされるためです(これらはパスに追加され、必要な環境設定)?

なぜこれが起こるのか誰にも分かりませんか?

2
defossez

デフォルトでは、Sudoは、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.

そこの最後の行にもかかわらず、デフォルトのUbuntu /etc/sudoersdoesがそれを設定することに注意してください:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

そのため、呼び出しユーザーのPATHもルートのPATHも、Sudoを使用するときにプログラムが配置されるかどうかには影響しません。

/optなどの場所にあるプログラムをSudoを介して実行可能にする場合は、次のいずれかが必要です。

  • フルパスを使用しますSudo /opt/somepath/bin/prog

  • sudoers secure_pathを変更して場所を含めます-これを行うことにした場合は、Sudo visudoを使用して構文エラーをキャッチしてください(そうでない場合は、Sudoから完全にロックアウトされます)。

ただし、先に進む前に、おそらく なぜユーザーがグラフィカルアプリケーションを起動するために通常のSudoを使用しないのか を読む必要があります。

1
steeldriver