這樣做更安全嗎:
$ sudo dnf update
[輸入使用者密碼]
或者
$ 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
當子進程結束時,「是」會放棄特權。在這種情況下dnf
。su
當子進程結束時,as會刪除特權。在本例中是一個互動式 shell。因此,該sudo
範例會更快地放棄特權。
sudo
還具有此處未提及的其他優點。 (例如sudoers
,該文件可用於對每個使用者可以做什麼和不能做什麼提供更多控制)。