sudo su - root 和 sudo -u root -H /bin/bash 之間有區別嗎?

sudo su - root 和 sudo -u root -H /bin/bash 之間有區別嗎?

就像標題所說,這兩個命令之間有區別嗎:

sudo su - root
sudo -u root -H /bin/bash

我正在使用 GNU/Linux,如果這有什麼區別的話。

答案1

如果您想成為 root,最好的方法是sudo -i模擬初始登入(為您提供與 root 登入關聯的所有路徑和變數)。如果你想在沒有root使用者的情況下登入.文件,您可以直接使用sudo su(無需指定root使用者)。

答案2

su - # causes the user to run a login shell aka bash --login
     # the same as if the user had logged in as the root from the login prompt

與指定 rootsudo su -相同是多餘的。sudo su - root

sudo -u root -H /bin/bash同樣-u root是多餘的,sudo預設以 root 身分運行,但-H /bin/bash以 sudoer 執行,環境變數 SUDO_USER、SUDO_UID 和 SUDO_COMMAND 分別設定為呼叫者名稱/uid 和 bash。

但在這種情況下,bash 不會作為登入 shell 運行。

答案3

顯然,如果root shell 不是/bin/bash,它們可能會有所不同- 這對於微型或嵌入式Linux 環境是可能的,或者對於root 用戶更喜歡/bin/[t]csh 的傳統BSD 系統來說是可能的。另外,「su -」會刪除除與終端相關的一些變數之外的所有環境。 sudo 在環境中的行為是可設定的(請參閱 /etc/sudoers 中的 env_reset)。所以,一定要注意細節...

答案4

您列出的兩個命令之間最大的區別是運行su -將導致 shell 成為登入 shell。這表示 root 的 shell 的登入腳本將被執行(例如 .bash_profile,如果是 bash),PWD 將被設定為 $HOME,並且使用者環境的某些部分將被初始化。 sudo bash只是執行一個新的 shell 作為目標使用者的 shell,而 -H 只是將一個變數 $HOME 初始化為目標使用者的主目錄。其他變數將不會被設置,並且一些變數將轉移到新 shell,如 sudo 策略中所定義。

相關內容