Fedora:sudoを使用してコマンドを見つけることができません。

Fedora:sudoを使用してコマンドを見つけることができません。

--preserve-envまたは-Eフラグを知っていますが、sudoこのフラグはsudoがFedoraで奇妙に動作するようです。

インストールしましたが、root以外のユーザーとして入力すると、次の内容が表示されrangerますLinuxBrewwhich ranger

$ which ranger
/home/linuxbrew/.linuxbrew/bin/ranger

私がsudoなら、

$ sudo -E which ranger
which: no ranger in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)

$ sudo -E echo $PATH
/usr/lib64/qt-3.3/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/david/bin:/home/david/.gem/ruby/2.6.0:/home/david/prog/flutter/bin:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/var/lib/snapd/snap/bin:/home/david/.gem/ruby/2.6.0:/home/david/go/bin:/home/linuxbrew/.linuxbrew/bin:/home/david/.local/bin:/snap/bin:/home/david/prog/flutter/bin

$ sudo -E ranger
sudo: ranger: command not found

しかし、状況はさらに奇妙になります。

sudo --preserve-env=PATH which ranger
/home/linuxbrew/.linuxbrew/bin/ranger

$ sudo --preserve-env=PATH ranger
sudo: ranger: command not found

ここで正確に何が起こっているのかを説明できる人はいますか?

どんな助けでも大変感謝します!

答え1

これはsudoのセキュリティ機能です。ファイルには/etc/sudoers次の行が必要です。

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin

このオプションの意味は、secure_pathマニュアルページに記載されていますsudoers

安全なパス:sudo で実行される各コマンドに使用されるパス。 sudoを実行している人が通常のPATH環境変数を持っていることを信頼していない場合は、この方法を使用できます。別の用途は、「ユーザーパス」から「ルートパス」を分離したい場合です。 Except_groupオプションで指定されたグループのユーザーは、secure_pathの影響を受けません。このオプションはデフォルトでは設定されていません。

この動作を回避するには、ここでユーザーのオプションを定義できますexempt_group/etc/sudoersたとえば、

Defaults exempt_group+=jo

一部の古いRHELディストリビューションでは、これを行うためにシステムグループを作成する必要があります。参考https://access.redhat.com/solutions/150783

関連情報