Fedora

Fedora:使用 sudo 找不到命令

  • April 9, 2020

我知道 –preserve-env 或 -E 中的標誌sudo,但是,似乎這個標誌導致 sudo 在 Fedora 中表現得很奇怪。

我安裝rangerLinuxBrew,這是我which ranger以非 root 使用者身份輸入時得到的結果:

$ 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

誰能解釋這裡到底發生了什麼?

任何幫助將不勝感激!

這是 sudo 的一項安全功能。在您的/etc/sudoers文件中,您應該有一行,例如:

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

secure_path選項的含義在手冊頁中給出sudoers

**secure_path :**用於從 sudo 執行的每個命令的路徑。如果你不相信執行 sudo 的人有一個健全的 PATH 環境變數,你可能想要使用它。另一個用途是,如果您想讓“根路徑”與“使用者路徑”分開。exclude_group 選項指定的組中的使用者不受secure_path 的影響。預設情況下未設置此選項。

如果您想避免這種行為,您可以在其中與您的使用者一起定義exempt_group選項。/etc/sudoers如:

Defaults exempt_group+=jo

在一些舊的 RHEL 分佈上,您必須為此創建一個系統組:請參閱https://access.redhat.com/solutions/150783

引用自:https://unix.stackexchange.com/questions/570630