就像標題所說,這兩個命令之間有區別嗎:
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 策略中所定義。