
根據手冊頁:
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 vi
和sudo vim
和sudo nano
和(sudo emacs
等等sudo pico
)。您不必這樣做,只需允許他們存取sudoedit
該文件,並選擇$EDITOR
他們喜歡的任何設定即可。 (想像你會強迫 Emacs 愛好者使用 Vim...)
另一個問題是,如果您的$EDITOR
設置為vim
,並且您在用戶的 中對其進行了自定義設置,那麼如果您使用或 ,則.vimrc
這些設置將不會被使用。但是,會保留呼叫使用者的環境,從而保留您的設定。sudo vim
sudo $EDITOR
sudoedit
也可以看看:sudoedit 有什麼好處?