Debian

當您嘗試 sudo 並且 root 的 PATH 變得 kerblooey 時,您會怎麼做?

  • November 29, 2018

我有一種感覺,這台機器剛剛發生了一些不好的事情。

faheem@bulldog:/usr/local/src/mercurial$ sudo dpkg -i 
mercurial_3.0-1_amd64.deb mercurial-common_3.0-1_all.deb    
dpkg: warning: 'ldconfig' not found in PATH or not executable 
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable 
dpkg: error: 2 expected programs not found in PATH or not executable 
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin
and /sbin

這是我已經使用了一段時間的舊機器。假設它有一天會死去。看起來這可能是這一天。它更早地開始拋出錯誤,看起來有人剛剛重新啟動它。

更新:執行後

sudo -s

我檢查了路徑的值

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games

所以這裡缺少一些東西,例如sbin/usr/sbin

更新 2:

事實證明,一個或多個不知名的人從/etc/sudoers.

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

感謝安東尼的解釋。

正如輸出底部的“注意:”所sudo dpkg -i暗示的,這通常是由$PATH設置錯誤引起的。發生的一種方法是在dpkg -i沒有 root 的情況下執行;但這裡不是這樣。

確認路徑的一種簡單方法是 run sudo -s,它告訴 sudo 執行 shell 而不是其他程序。因此,您將進入 root shell 提示符。如果你echo "$PATH",你可能會找到/sbin和/或/usr/sbin失去。

sudo 的預設行為是保持使用者$PATH變數不變。該預設值通常由 Debian 的 default 更改/etc/sudoers,其中包含:

Defaults        env_reset
⋮
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

如果你錯過了這secure_path條線,那就可以解釋問題了。

兩個選項是將該行添加回來(但有人可能已將其刪除,因為他/她希望使用者路徑被延續,例如,因為它包含額外的元素/opt,例如)或添加/sbin:/usr/sbin到您的使用者的$PATH.

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