如何在 Linux 系統中透過啟動器以 root 使用者身分執行程式

最後更新: 十月15 2026
  • Root權限提供完全控制,但Ubuntu和其他發行版預設禁用該權限以降低風險。
  • sudo 允許您根據具體情況提升權限,並記錄每個命令的執行者。
  • 對於圖形應用程序,可以使用 kdesu、gksu、gksudo 或 pkexec 等輔助程序,這些程序可以在 .desktop 啟動器中使用。
  • 安全性取決於使用最小權限原則、避免使用不受信任的腳本以及審核提升權限的存取。

負責管理現代資料中心伺服器的系統工程師。

在 Windows 系統中,許多使用者習慣按下 Shift+Enter 或 Shift+滑鼠左鍵,從「開始」功能表以管理員權限開啟程式。但在 Linux 系統中,這並非總是那麼簡單,因為安全依賴root、sudo 和圖形輔助工具,而且每個桌面環境都有自己的工具。即便如此,仍然有一些相當簡單的方法可以從啟動器、快捷方式或應用程式選單以 root 權限啟動應用程序,但重要的是要了解這樣做所涉及的細節。

關鍵在於 root 使用者擁有系統的絕對控制權,而現代發行版,尤其是 Ubuntu 及其衍生版本,通常會停用直接登入。因此,通常不會以 root 使用者身分登錄,而是偶爾使用 `sudo` 命令或提示輸入密碼的圖形程式來提升權限。如果我們想要一個啟動器圖示以這些權限啟動應用程序,則必須修改它執行的命令或建立一個特定的啟動器。

以 root 使用者身分執行程式究竟意味著什麼?

系統管理工作站,配備多個顯示器,用於顯示 Linux 終端機。

在Linux系統中,root使用者是UID為0且擁有無限權限的帳號。它可以讀取、修改或刪除任何文件,安裝軟體,更改核心配置,並控制任何使用者的進程。這使其成為一個極其強大的工具,但如果使用不當,也會帶來巨大的風險。一個簡單的`rm`或`mv`指令拼字錯誤就可能導致系統無法使用,而以root身分執行的惡意腳本可以安裝後門、修改安全措施或竊取數據,且幾乎不留任何痕跡。

在 Ubuntu 系統中,root 帳號沒有預設密碼,也不允許直接登入。其理念是,使用者使用一般使用者帳戶進行操作,而使用`sudo` 指令執行特定任務。 `sudo` 的本質是,如果您屬於 `sudo` 使用者群組,則需要使用自己的密碼進行身份驗證,然後以其他使用者(通常是 root 使用者)的身分執行命令。這可以限制使用者暴露在外的時間,並記錄所有操作。

然而,在某些特定情況下,例如恢復損壞的系統、在受限環境中工作或設定需要持續存取的服務,您可以考慮暫時啟用 root 權限。通常建議在不再需要時立即停用 root 權限。使用 root 權限的時間越短,對機器的穩定性和安全性就越有利。

不謹慎使用root權限的風險

最明顯的危險之一是意外刪除重要文件。以 root 使用者身分操作,沒有任何權限限制;類似 `sudo rm -rf /` 的命令可以在沒有任何警告的情況下清除系統。而且通常沒有回收站來保存這些刪除的文件,因此恢復可能需要複雜的取證工具,甚至需要完全重裝系統。

另一個風險是執行不受信任的腳本。如果您以管理員權限運行從任何網站下載的程式碼,就相當於把家裡的鑰匙交給了它。即使腳本看起來無害,它也可能包含破壞性指令或以 root 權限安裝惡意軟體。因此,建議您在生產環境中執行腳本之前,先審查程式碼、使用官方來源、檢查校驗和,並在虛擬機器或容器中進行測試。

  用於高通平台 RAS 支援的 Linux 補丁

此外,還存在可追溯性問題。使用 `sudo` 指令時,系統會將指令、執行指令的使用者、執行時間記錄到`/var/log/auth.log`、`/var/log/secure` 或 `journalctl` 檔案中。如果直接以 root 使用者身分登錄,所有操作都會顯示為 root 用戶,您將無法得知每項變更是由哪個使用者執行的。在擁有多個管理員或遵循 ISO 27001、PCI DSS 或其他審計標準的環境中,這種可追溯性的缺失是一個重大缺陷。

從終端取得權限的方法

Ubuntu 終端螢幕截圖,顯示系統日誌和進程監控詳情。

最常用且推薦的方法是,在特定指令前加上 `sudo`。例如,要更新軟體包、重新啟動服務或編輯受保護的文件,`sudo` 會要求輸入您的使用者密碼,而不是 root 密碼。驗證身份後,它將以管理員權限執行命令。如果您需要以其他使用者身分執行指令,可以使用`sudo -u username command`。如果您忘記使用 `sudo`,可以使用`sudo !! ` 重複執行上一個指令。

當您需要連續執行多個管理任務時,開啟一個臨時 root shell 會很方便。 `sudo -i`會模擬完整的 root 登錄,載入 root 環境,並將您置於主目錄。 `sudo su`或`sudo su -`也有效,但 `sudo -i` 通常更可靠。要退出此會話,只需輸入 `exit` 即可。不建議讓 root shell 保持無人值守的狀態。

另一方面,`su` 指令用於切換使用者。 `su - root`或簡寫為`su -`會套用目標使用者的環境變量,而`su root`或不帶連字符的 `su` 則會保留部分先前環境變數。這種差異解釋了諸如「命令未找到」之類的錯誤:管理命令通常位於 `/usr/local/sbin`、`/usr/sbin` 和 `/sbin` 目錄下,這些路徑並非總是出現在普通用戶的 PATH 環境變數中。如果您使用不含連字符的 `su`,則必須輸入完整路徑或切換到 `su -` 才能繼承 root 使用者的 PATH 環境變數。

如果您想為 root 使用者啟用密碼,可以使用`sudo passwd root`命令。 Ubuntu 不建議這樣做,但技術上允許 root 使用者設定密碼。若要鎖定帳戶,請使用`sudo passwd -l root` 命令;要解​​除帳戶,請使用 `sudo passwd -u root` 命令。在 SSH 中,root 使用者的直接存取權由 `/etc/ssh/sshd_config` 檔案中的`PermitRootLogin` 參數控制。最安全的做法是將其設為 `no`,或最多設定為 `prohibit-password`,以僅允許使用 SSH 密碼。之後,您需要重新啟動 SSH 服務。

準確配置毛衣

`/etc/sudoers`檔案定義了哪些使用者可以使用 `sudo` 指令以及使用權限的特定用途。最好不要手動編輯此文件;正確的方法是使用`sudo visudo` 命令,該命令會鎖定文件並在保存前檢查語法。基本規則的格式為 `host user=(target_user)`。例如,`bob ALL=(ALL) ALL` 允許 `bob` 使用者以 root 使用者身分在任何機器上執行任何指令。也可以使用使用者群組,例如 `%admin ALL=(ALL) ALL`。

  Linux 中的 Liquorix 核心:針對桌面和遊戲最佳化的內核

為了授予更精細的權限,可以使用別名。 `User_Alias ADMINS = alice, bob`將使用者分組,`Cmnd_Alias LOCATE = /usr/sbin/updatedb`將指令分組。然後,使用 `ADMINS ALL = LOCATE` 來限制只有這些使用者才能執行這些指令。可以為 `route`、`ifconfig`、`ping`、`iptables` 等指令建立類似 `NETWORKING` 的別名。這遵循了最小權限原則,避免授予任何人完全的 root 權限。

NOPASSWD選項可讓您在不輸入密碼的情況下執行某些命令,例如 `pi ALL=(ALL)`。 NOPASSWD: ALL。這很方便,但如果濫用則很危險。此外,每次使用 `sudo` 都會被記錄,這有助於審計存取情況和檢查問題。如果發生故障,查看這些日誌可以確定是最近的哪個變更導致了故障。

從啟動器以 root 使用者身分啟動圖形應用程式

Linux 終端機視圖,顯示根目錄 / 的檔案清單。

對於具有圖形介面的程序,直接使用 `sudo` 通常效果不佳,因為沒有終端提示輸入密碼。這時就需要圖形輔助工具了。在 KDE 中,有`kdesu`:如果您知道啟動應用程式的命令,就可以執行 `kdesu that_command`。 KDE 選單中的「運行命令」選項也允許您透過輸入其他使用者的憑證來以該使用者身分啟動應用程式。在 GNOME 和 GTK 環境中, `gksu`和`gksudo`被廣泛使用;它們分別是 `sudo` 和 `su` 的前端。例如,`gksu synaptic` 或 `gksudo gparted` 會開啟應用程式並提示輸入密碼。

在現代系統中,gksu 要么不建議使用,要么已被棄用。其常用替代方案是基於 PolicyKit 的pkexec,它允許程式根據預先定義的政策以特定權限運行。許多目前的啟動器都使用 pkexec 來執行管理任務。其原理相同:使用者無需打開終端,系統即可以一種受控的方式驗證授權。

要在啟動器中建立快捷方式,您需要編輯.desktop檔案。關鍵在於 `Exec` 行。如果您希望程式以 root 使用者身分執行,可以使用類似 `Exec=gksu /path/to/program`、`Exec=kdesu /path/to/program` 或 `Exec=pkexec /path/to/program` 的命令。如果您直接使用 `sudo`,則需要將啟動器設為 `Terminal=true` 或設定圖形化密碼。您也可以嘗試按 Alt+F2 並輸入輔助指令和程式名稱,例如 `gksu synaptic`。在 KDE 中,`kdesu synaptic` 或以其他使用者身分執行的選項可以實現類似的功能。

還有一個經典的替代方案,叫做consolehelper,它是一個 GUI 應用程式的封裝器。您可以建立一個符號鏈接,例如 /usr/bin/xterm-root 指向 /usr/sbin/consolehelper。然後,您需要透過建立 /etc/pam.d/xterm-root 檔案來設定 PAM,並在其中包含來自 config-util 的 auth、account 和 session 設定。接下來,您需要定義 /etc/security/console.apps/xterm-root 文件,並將 USER=root 和 PROGRAM=/usr/bin/xterm 新增至其中。當您執行 xterm-root 時,consolehelper 會提示您進行 PAM 驗證,並以 root 使用者身分啟動 xterm。如果您遇到「伺服器拒絕 Xlib 連線到 :0.0」的錯誤,執行 xhost local:root 命令可能會有所幫助。

總而言之,以 root 使用者身分開啟圖形應用程式存在一些弊端:它會混淆環境變量,可能破壞會話匯流排,影響 Wayland 或 X11,並在您的主目錄中建立 root 使用者擁有的檔案。最好僅將其用於特定的管理工具,並在使用完成後立即關閉它們。切勿以 root 使用者身分瀏覽網路或開啟可疑文檔,因為任何漏洞都會使 root 使用者獲得完全權限。

需要 root 權限的常見任務範例

許多日常操作都需要提升權限。使用 apt、zypper、dnf 或 yum 管理軟體包通常需要 sudo。例如,`sudo apt update`、`sudo apt install firefox` 或 `sudo zypper install docker-ce`。系統服務也是一樣:`sudo systemctl restart apache2`、`sudo systemctl restart ssh` 或 `sudo systemctl restart nginx`。若要修改使用者帳戶,請使用 `sudo usermod`;若要變更檔案所有權,請使用 `sudo chown`。編輯關鍵配置(例如 `/etc/ssh/sshd_config`)時,如果使用 nano、vim 或 gedit 等編輯器,也需要 root 權限。

  如何在不使用 LiveCD 的情況下逐步修復 GRUB

對於僅讀取資訊或不修改系統的命令,例如 `zypper repos` 或 `systemctl status NetworkManager`,不需要使用 `sudo`。習慣性地對所有操作都使用 `sudo` 是一種不好的做法。明智的做法是僅在任務需要時才提升權限,並在任務完成後儘快切換回普通用戶。

使用提升權限時的最佳實踐

資料中心內有藍色照明的伺服器機架特寫。

最小權限原則應貫穿所有操作。盡可能使用 `sudo` 命令執行單一命令,除非絕對必要,否則避免使用持久性 root shell,並在操作完成後立即退出。不要以 root 權限執行來自未知來源的腳本;事先審查程式碼,從官方倉庫或信譽良好的專案下載,驗證校驗和,如有任何疑問,請在隔離環境中進行測試。處理具有完整權限的第三方程式碼時,保持一定的懷疑態度是美德。

此外,建議對 sudoers 進行細粒度配置,不要完全依賴 sudo 組,並保留日誌審計記錄。如果您管理伺服器,請檢查 `/var/log/auth.log`、`/var/log/secure` 或使用 `journalctl -xe` 指令來偵測濫用情況。在多用戶環境中,了解每個命令的執行者對於問責制和安全法規的合規性至關重要。

使用 head 指令啟用和停用 root 權限。

如果您決定啟用 root 權限,請使用 `sudo passwd root` 命令設定密碼,僅將其用於必要任務,然後重新鎖定帳戶。若要停用直接 SSH 登錄,請編輯 `sshd_config` 文件,並將 `PermitRootLogin no` 或 `prohibit-password` 設定為 `no`,然後重新啟動 SSH 服務。若要本機鎖定帳戶,請使用 `sudo passwd -l root` 指令。若要解鎖帳戶,請使用 `sudo passwd -u root` 指令。這些措施可以減少攻擊面,防止針對最高權限帳號的暴力破解攻擊。

大多數情況下,對於最初的問題,實際答案是肯定的:你可以使用 kdesu、gksu、gksudo 或 pkexec 等圖形化工具,或者透過建立包含相應命令的 .desktop 文件,以 root 權限從啟動器啟動程式。但是,你不應該為所有應用程式都設定這種權限。最好使用名稱清晰的特定管理啟動器,並且僅在必要時使用它們。

關鍵在於,root 權限並非兒戲,sudo 的存在正是為了賦予你強大的權限,同時避免每次點擊都帶來永久的風險。如果你需要以超級用戶身份啟動圖形應用程序,請優先考慮需要密碼的輔助程序,確認該應用程式確實需要密碼,並將其使用限制在管理任務中。這樣,你既能享受啟動器的便利性,又能保留 Linux 強大的安全性。