為什麼我不能 sudo 某些指令? (例如,vim)

為什麼我不能 sudo 某些指令? (例如,vim)

我在我的朋友伺服器上有 sudo 存取權限,運行 centos-6.3,但是當我嘗試運行一些命令時,例如sudo vim /var/www/html/index.html我收到錯誤sudo: vim: command not found,我可以運行sudo su然後vim /var/www/html/index.html它按預期工作。

echo $PATH兩者sudo echo $PATH都會產生:

/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin

sudo which vim然而產量:

which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)

我嘗試過添加

export PATH=$PATH:/usr/local/bin

到它/root/.bashrc解決了使用時的問題sudo su,但不僅僅是sudo <command>

我怎樣去sudo <command>上班?

答案1

執行時sudo,許多系統配置為清除環境中所有非白名單值,並將 PATH 變數重設為經過清理的值。

您會在 中找到前者 asDefaults env_reset和幾個。後一個「安全」覆蓋被指定為– 刪除此行以在ing時刪除此行為。Defaults env_keep += "SOME_VARIABLE_NAME"/etc/sudoersPATHDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/binsudo


sudo -V當您作為運行時,會列印如何處理哪個環境變數 root


如果您不想擺脫這些預設值,您始終可以使用程式的完整路徑 ( sudo /usr/local/bin/vim) 來指定程式。

或者,您可以允許您的帳戶出現SETENVsudoers文件中,例如:

%wheel  ALL=(ALL)       SETENV: ALL

這允許您覆蓋環境預設值,如下所示:sudo PATH=$PATH which vim,因為該變數在執行命令之前由 shell 解釋,從而導致繼承PATH(但可能不包括/sbin等)。

答案2

sudo echo $PATH

不做你的想法。$PATH被(你的)shell 取代執行命令。

要完成所需的行為,您可以使用sudo -i.

曼須藤:

-i [命令]

-我模擬初始登入) 選項運行指定的 shell密碼(5) 目標使用者的入口作為登入shell。這表示shell 將讀取特定於登入的資源檔案(例如.profile或 ) 。.login如果指定了命令,則會將其傳遞到 shell 執行。

答案3

我怎樣去sudo <command>上班?

直到解決使用完整路徑名稱的路徑問題

  sudo /usr/local/bin/vim /var/www/html/index.html

相關內容