sudoedit:為什麼要使用它而不是 sudo vi?

sudoedit:為什麼要使用它而不是 sudo vi?

根據手冊頁:

sudoedit /etc/file

建立文件的副本,以目前使用者身分開啟它,儲存時用副本覆蓋現有文件。

然而

sudo vi /etc/file

以 root 身分開啟文件

手冊頁指出 sudoedit 與 sudo 不同,因為:

編輯器在呼叫使用者的環境未修改的情況下執行

第一種方法比較安全嗎?使用 sudoedit 而不是 sudo vi 還有其他原因嗎?

答案1

我在尋找完全不相關的東西時偶然發現了這個問題,但我想我應該添加以下重要的區別,到目前為止尚未提及:sudoedit 不會以 root 身分執行編輯器。

$ sudo vim /etc/farts.conf 

將簡單地以 root 身分執行 vim,允許它讀取檔案。缺點是編輯器現在也以 root 身份運行並且可以執行任何操作。如果您只想允許用戶編輯設定檔而沒有其他任何事情,那麼太糟糕了,您只是給了他們在整個系統上。沒有什麼可以阻止我使用:sh或從 vim 產生 shell :!command,並且由於它們是子進程,因此它們也將以 root 身份運行。

另一方面:

$ sudoedit /etc/farts.conf

實際上會以不同的方式運作。它將在 /tmp 中建立一個具有唯一名稱的副本,並且權限僅限於您的用戶,然後在該副本上正常產生編輯器,無需 root 權限。

退出編輯器後,它將比較臨時文件和原始文件,並在更改後將原始文件安全地替換為您的編輯。

在這種情況下,可以允許使用者編輯系統文件,但不允許他們以 root 身分執行隨機二進位檔案或在檔案系統上到處查看。

這主要是實際的區別,其餘​​提到的只是巧妙的副作用。

答案2

首先,sudo vim已經明確提到了您的預設編輯器,如果您在$EDITOR.sudoedit使您不必每次想要編輯某些內容時都定義編輯器,並且在多用戶系統上,它允許每個人使用他們個人喜歡的編輯器。

為何如此?考慮一個普通使用者只能獲得sudo編輯某些文件的權限的系統。sudo但他們被限制不能與其他任何東西一起跑步。你必須允許他們sudo visudo vimsudo nano和(sudo emacs等等sudo pico)。您不必這樣做,只需允許他們存取sudoedit該文件,並選擇$EDITOR他們喜歡的任何設定即可。 (想像你會強迫 Emacs 愛好者使用 Vim...)

另一個問題是,如果您的$EDITOR設置為vim,並且您在用戶的 中對其進行了自定義設置,那麼如果您使用或 ,則.vimrc這些設置將不會被使用。但是,會保留呼叫使用者的環境,從而保留您的設定。sudo vimsudo $EDITORsudoedit

也可以看看:sudoedit 有什麼好處?

相關內容