Debian
當您嘗試 sudo 並且 root 的 PATH 變得 kerblooey 時,您會怎麼做?
我有一種感覺,這台機器剛剛發生了一些不好的事情。
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
.