Sudo

sudo echo path 不顯示用於作為 sudo 執行的路徑

  • August 23, 2021

我對以下內容感到困惑:

[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 擁有,並且所有(三個 x)都可以執行,並$PATH表明即使是 sudo,它也應該在路徑中,但是當我去執行which時,路徑已經發生了某種變化。

sudo -E不會改變這種行為。

是什麼賦予了?$PATH 是否被保留?正在which其他地方尋找路徑(請注意,我無法將此二進製文件作為 sudo 執行)。

這裡有兩個問題

  1. $PATH變數在命令執行之前被擴展。最終結果是你得到了這個,雖然它是有效的,但並不是你真正想要的:
sudo echo /usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/user/.local/bin:/home/user/bin
  1. 出於安全原因,$PATH通常會重置sudo

您可以使用在執行應用程序的上下文中sudo env | grep ^PATH=查找值。您可以調整用於編輯此文件的路徑,以便在更改文件之前獲得語法檢查的好處。$PATH``sudo``/etc/sudoers``sudo visudo

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