su vs sudo -s vs sudo -i vs sudo bash
以下命令有什麼區別:
su sudo -s sudo -i sudo bash
我知道
su
我需要知道 root 密碼,而且sudo
我必須在sudoers
文件中,但是一旦執行,有什麼區別?我知道 和 之間有區別
su
,sudo -s
因為我的主目錄/root
在我執行之後su
,但我的主目錄仍然/home/myname
在sudo -s
. 但我懷疑這只是我遺漏的潛在差異的一個症狀。
使用
su
,您將成為另一個使用者 - 預設情況下為 root,但可能是另一個使用者。如果您說su -
,您的環境也將替換為該使用者的登錄環境,因此您看到的內容與以該使用者身份登錄沒有區別。su
系統無法通過該使用者登錄時的操作來判斷您在’d 時對另一個使用者所做的操作。情況非常不同
sudo
:
- 您執行的命令
sudo
以目標使用者身份執行 - 預設情況下為 root,但可以更改-u
- 但它會記錄您通過它執行的命令,並用您的使用者名標記它們,以便之後可以分配責任。:)sudo
非常靈活。例如,您可以限制允許給定使用者或使用者組執行的命令。有了su
,要麼全有,要麼全無。此功能通常用於定義角色。例如,您可以定義一個允許執行的“備份”組
dump
,tar
每個都需要 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 中執行:
- 你可以說
sudo -s some-command
哪個some-command
在你的 shell 下執行。它基本上是sudo $SHELL -c some-command
.- 您可以改為將命令傳遞給 shell 的標準輸入,例如
sudo -s < my-shell-script
. 您可以將其與heredoc一起使用,以將多個命令發送到單個sudo
呼叫,從而避免sudo
重複鍵入。這兩種行為都是可選的。更常見的是,您
-s
單獨提供,因此它只是互動式地執行您的使用者的 shell。在該模式下,它的不同之處sudo bash
在於它可能執行與 不同的 shellbash
,因為它首先在SHELL
環境變數中查找,然後如果未設置,則在使用者的登錄 shell 設置中,通常在/etc/passwd
.執行的 shell
sudo -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
,但它也可以不那麼直接地發生,例如 viaPAGER
if you sayman foo
while undersudo -s
。您可能會說,“如果他們可以修改
PAGER
,他們可以修改PATH
,然後他們就可以替換一個邪惡的sudo
程序”,但是一個足夠偏執的人可以說/usr/bin/sudo /bin/bash
以避免這個陷阱。不過,您可能並沒有那麼偏執,以至於您也避免了所有其他易受攻擊的環境變數中的陷阱。EDITOR
例如,您還記得在執行任何VCS命令之前檢查嗎?因此sudo -i
。因為
sudo -i
還會將您的工作目錄更改為使用者的主目錄,所以您可能仍希望sudo -s
用於那些您知道要保留在cd
執行時所進入的同一目錄中的情況sudo
。sudo -i
不過,回到原來的位置仍然更安全cd
。您有時會看到的所有這一切的另一個變體是
sudo su
,它大約相當於sudo -s
. 同樣,sudo su -
在功能上非常接近sudo -i
。由於sudo
和su
是相互競爭的命令,因此將它們像這樣配對有點奇怪,因此我建議您改用sudo
標誌。