Sudo

su vs sudo -s vs sudo -i vs sudo bash

  • November 1, 2021

以下命令有什麼區別:

su
sudo -s
sudo -i
sudo bash

我知道su我需要知道 root 密碼,而且sudo我必須在sudoers文件中,但是一旦執行,有什麼區別?

我知道 和 之間有區別susudo -s因為我的主目錄/root在我執行之後su,但我的主目錄仍然/home/mynamesudo -s. 但我懷疑這只是我遺漏的潛在差異的一個症狀。

使用su,您將成為另一個使用者 - 預設情況下為 root,但可能是另一個使用者。如果您說su -,您的環境也將替換為該使用者的登錄環境,因此您看到的內容與以該使用者身份登錄沒有區別。su系統無法通過該使用者登錄時的操作來判斷您在’d 時對另一個使用者所做的操作。

情況非常不同sudo

  • 您執行的命令sudo 目標使用者身份執行 - 預設情況下為 root,但可以更改-u- 但它會記錄您通過它執行的命令,並用您的使用者名標記它們,以便之後可以分配責任。:)
  • sudo非常靈活。例如,您可以限制允許給定使用者或使用者組執行的命令。有了su,要麼全有,要麼全無。

此功能通常用於定義角色。例如,您可以定義一個允許執行的“備份”組dumptar每個都需要 root 訪問權限才能正確備份系統磁碟。

我在這裡提到這一點是因為這意味著你可以在不給予他們或能力的情況下給予某人sudo特權。他們只有完成工作所需的權限,而他們已經執行了整個系統。但是,您必須小心:例如,如果您賦予某人說 的能力,則他們可以擺脫並實際上具有與 with 相同的權力。sudo -s``sudo bash``su``sudo vi``vi``sudo -s

  • 因為它使用 sudoer 的密碼而不是 root 密碼,所以sudo隔離了多個 sudoer 之間的權限。

這解決了 的管理問題su,即當 root 密碼更改時,必須su告知所有必須知道它才能使用的人。sudo允許 sudoers 的密碼獨立更改。事實上,在系統上使用密碼鎖定 root 使用者的帳戶是很常見的,sudo以強制所有 sysadmin 任務通過sudo. 在擁有許多受信任 sudoer 的大型組織中,這意味著當其中一個系統管理員離開時,您不必更改 root 密碼並將其分發給留下的管理員。

sudo bash和之間的主要區別在於sudo -s-s更短,並且允許您通過以下幾種方式傳遞命令以在使用者的預設 shell 中執行:

  1. 你可以說sudo -s some-command哪個some-command在你的 shell 下執行。它基本上是sudo $SHELL -c some-command.
  2. 您可以改為將命令傳遞給 shell 的標準輸入,例如sudo -s < my-shell-script. 您可以將其與heredoc一起使用,以將多個命令發送到單個sudo呼叫,從而避免sudo重複鍵入。

這兩種行為都是可選的。更常見的是,您-s單獨提供,因此它只是互動式地執行您的使用者的 shell。在該模式下,它的不同之處sudo bash在於它可能執行與 不同的 shell bash,因為它首先在SHELL環境變數中查找,然後如果未設置,則在使用者的登錄 shell 設置中,通常在/etc/passwd.

執行的 shellsudo -s繼承了您目前的使用者環境。如果您真正想要的是一個乾淨的環境,就像您在登錄後獲得的那樣,那麼您想要的是sudo -i一個相對較新的sudo. 粗略地說,sudo -i就是sudo -s原樣:它su -su重置除幾個關鍵環境變數之外的所有環境變數,並將您送回使用者的主目錄。如果您沒有通過標準輸入或 給它在該 shell 下執行的命令sudo -i some-command,它將將該 shell 作為互動式登錄 shell 執行,因此您的使用者的 shell 啟動腳本(例如.bash_profile)再次執行。

所有這些sudo -i都比sudo -s. 為什麼?因為如果之前有人可以修改您的環境sudo -s,他們可能會導致執行意外命令。最明顯的情況是修改SHELL,但它也可以不那麼直接地發生,例如 via PAGERif you say man foowhile under sudo -s

您可能會說,“如果他們可以修改PAGER,他們可以修改PATH,然後他們就可以替換一個邪惡的sudo程序”,但是一個足夠偏執的人可以說/usr/bin/sudo /bin/bash以避免這個陷阱。不過,您可能並沒有那麼偏執,以至於您也避免了所有其他易受攻擊的環境變數中的陷阱。EDITOR例如,您還記得在執行任何VCS命令之前檢查嗎?因此sudo -i

因為sudo -i還會將您的工作目錄更改為使用者的主目錄,所以您可能仍希望sudo -s用於那些您知道要保留在cd執行時所進入的同一目錄中的情況sudosudo -i不過,回到原來的位置仍然更安全cd

您有時會看到的所有這一切的另一個變體是sudo su,它大約相當於sudo -s. 同樣,sudo su -在功能上非常接近sudo -i。由於sudosu是相互競爭的命令,因此將它們像這樣配對有點奇怪,因此我建議您改用sudo標誌。

引用自:https://unix.stackexchange.com/questions/35338