私は次のことについて混乱しています。
[user@QVr740-11 ~]$ which ninja
/usr/local/bin/ninja
[user@QVr740-11 ~]$ sudo which ninja
which: no ninja in (/sbin:/bin:/usr/sbin:/usr/bin)
[user@QVr740-11 ~]$ sudo echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
ls -l /usr/local/bin/ninja
これは、バイナリがroot:rootによって所有され、誰もが実行できる(3つのx)を示し、$PATH
sudoの場合でもパスに存在するはずですが、実行しようとするとwhich
パスが何とか変更されたことを示しています。
sudo -E
この動作は変更されません。
何を提供しますか? $ PATHは保存されますか?他の場所でパスを探していますwhich
(このバイナリをsudoとして実行できないことに注意してください)。
答え1
ここには2つの質問があります。
この
$PATH
変数は、コマンドが実行される前に拡張されます。最終結果は次のとおりです。うまくいきますが、実際に欲しいものではありません。sudo echo /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
$PATH
通常、セキュリティ上の理由でリセットされます。sudo
これを使用して、アプリケーションが実行されているコンテキストでsudo env | grep ^PATH=
値を見つけることができます。このファイルの編集に使用されるパスを調整することで、構文チェックの利点を得ることができます。$PATH
sudo
/etc/sudoers
sudo visudo
今後ファイルを変更しました。
答え2
読むman sudo sudoers
。このコマンドは、簡単なセキュリティホールを避けるために意図的sudo
にユーザーのコマンドを無視します。$PATH