哪一種比較安全? sudo dnf update 或 su - ; dnf更新

哪一種比較安全? sudo dnf update 或 su - ; dnf更新

這樣做更安全嗎:

  1. $ sudo dnf update[輸入使用者密碼]

或者

  1. $ su - [enter root password]
    # dnf update
    
    

我總是假設它們是完全相同的東西,因為 sudo 使用 setuid-root,因此作為 sudo 的第一個參數運行的進程是使用 sudo 的有效 ID(即 root)運行的。

我想我的問題是:sudo 最終會將其有效 ID 放棄給普通用戶嗎?那麼在這種情況下,上面的數字 1 會是一個更安全的選擇,因為如果 sudo 運行的程式被攻擊者破壞,那麼攻擊者有可能不是以 root 身份運行,因為特權已經被刪除了?

答案1

第一個命令(可能)需要您的正確密碼,dnf update以 root 身份運行,然後退出:

$ sudo dnf update [enter user password]

第二個指令將需要 root 的密碼,然後啟動 root shell。在該 shell 中運行dnf update

$ su - [enter root password]
# dnf update

你並不是真的在比較。您可以比較這兩個命令,它們都會啟動一個 root shell,您在其中執行(至少)該命令dnf update

sudo -s
dnf update

su -
dnf update

或者您可以比較這兩個命令,這兩個命令都啟動 root 特權實例dnf update,然後退出回呼叫者的 shell

sudo dnf update

su root -c 'dnf update'

我認為您實際上要問的是,是否最好使用 root 權限呼叫單一命令,或啟動一個 root 權限 shell 來執行一個或多個命令。

  • 如果dnf功能或其下載以某種方式受到損害,那麼它如何運作並不重要,問題在於它根本運行
  • 如果您談論的是危害您的系統,那麼這取決於使用者密碼 ( sudo) 與 root 密碼 ( su)的安全性
  • 如果您正在考慮是否可以信任該用戶,那麼您是否獲得一個運行多個命令的 root shell 或一個一次運行一個命令的 root shell 並不重要。問題是命令可以以 root 身分運行

就我個人而言,我根據需要混合搭配我的用法。我很少使用su,但我確實會用於sudo {command....}快速一次性或sudo -s需要運行多個命令的短暫會話(例如 Debian 套件管理工具,apt-get update後跟apt-get upgrade)。

答案2

sudo當子進程結束時,「是」會放棄特權。在這種情況下dnfsu當子進程結束時,as會刪除特權。在本例中是一個互動式 shell。因此,該sudo範例會更快地放棄特權。

sudo還具有此處未提及的其他優點。 (例如sudoers,該文件可用於對每個使用者可以做什麼和不能做什麼提供更多控制)。

相關內容