Linux

如何在 Gnu/Linux 的 GUI(和 CLI)中正確編輯系統文件(以 root 身份)?

  • April 28, 2022

系統:Linux Mint 18.1 64 位肉桂


目標:定義Bash別名以在從模擬器以root模式打開文件時啟動各種CLIGUI文本編輯器。gnome-terminal


進步

例如,以下別名似乎按預期工作:

對於CLI,在這個例子中我使用了 Nano(官方網站):

alias sunano='sudo nano'

對於GUI,在這個例子中我使用了 Xed (維基百科文章):

alias suxed='sudo xed'

他們都以root身份打開文件。


問題

我有一個gksudo問題sublime-text

alias susubl='gksudo /opt/sublime_text/sublime_text'

有時它會起作用。它只是在大多數時候什麼都不做。

如何調試這種行為不一致的東西?它不輸出任何東西。沒有錯誤資訊或類似資訊。


問題

gksudo已在 Debian 中棄用,也不再包含在 Ubuntu 18.04 Bionic 中,所以讓我將這個問題重新表述為一個仍然有效的問題:

如何在 Linux 的 GUI(和 CLI)中正確編輯系統文件(以 root 身份)?

在這種情況下,我正確地定義為安全,例如,在文件編輯期間發生斷電,另一個例子可能是失去 SSH 連接等。

除非絕對必要,否則不應以 root 身份執行編輯器;您應該使用sudoeditorsudo -esudo --edit,或您的桌面環境的管理功能。

sudoedit

一旦sudoedit設置得當,你可以做

SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit yourfile

sudoedit將檢查您是否被允許這樣做,製作一個您可以在不手動更改所有權的情況下編輯的文件的副本,啟動您的編輯器,然後,當編輯器退出時,如果文件已更改,則將其複制回來。

我建議使用函式而不是別名:

function susubl {
   export SUDO_EDITOR="/opt/sublime_text/sublime_text -w"
   sudoedit "$@"
}

儘管正如Jeff Schaller指出的那樣,您可以使用env將其放在別名中並避免更改 shell 的環境:

alias susubl='env SUDO_EDITOR="/opt/sublime_text/sublime_text -w" sudoedit'

請注意,如果或已經足夠好,則不需要使用$SUDO_EDITOR環境變數。$VISUAL``$EDITOR

-w選項確保 Sublime Text 呼叫等到文件關閉後再返回並sudoedit複製文件。

桌面環境 (GNOME)

在 GNOME(可能還有其他桌面環境)中,您可以使用任何具有GIO/GVFS 功能的編輯器,以及該admin://方案;例如

gedit admin:///etc/shells

這將提示使用 PolKit 進行適當的身份驗證,如果身份驗證成功,則打開文件進行編輯。

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