是否有充分的理由執行 sudo su?
要在禁用 root 帳戶的機器上啟動 root shell,您可以執行以下之一:
sudo -i
: 執行一個互動式登錄 shell(讀取/root/.bashrc
和/root/.profile
)sudo -s
: 執行一個非登錄的互動式 shell (reads/root/.bashrc
)在 Ubuntu 世界中,我經常看到
sudo su
建議作為獲取 root shell 的一種方式。當一個可以執行時,為什麼要執行兩個單獨的命令?據我所知,sudo -i
等價於sudo su -
和sudo -s
相同sudo su
。唯一的區別似乎是(比較
sudo -i
左側和sudo su -
右側):並比較
sudo -s
(左)和sudo su
(右):主要區別(忽略
SUDO_foo
變數和LS_COLORS
)似乎是版本XDG_foo
中的系統變數sudo su
。是否存在這種差異需要使用相當不雅的情況
sudo su
?我可以安全地告訴人們(就像我經常說的那樣)跑步沒有任何意義,sudo su
或者我錯過了什麼嗎?
正如您在問題中所述,主要區別在於環境。
sudo su -
對比sudo -i
如果
sudo su -
它是一個登錄 shell,那麼/etc/profile
,.profile
和.bashrc
被執行,你會發現自己在 root 的主目錄和 root 的環境中。
sudo -i
與 (simulate initial login) 選項幾乎相同,sudo su -
將-i
目標使用者的密碼數據庫條目指定的 shell 作為登錄 shell 執行。這意味著特定於登錄的資源文件,例如.profile
,.bashrc
或.login
將由 shell 讀取和執行。
sudo su
對比sudo -s
sudo su``sudo
用命令呼叫su
。Bash 被稱為互動式非登錄 shell。所以bash
只能執行.bashrc
。可以看到切換到root後你還在同一個目錄下:user@host:~$ sudo su root@host:/home/user#
sudo -s
讀取$SHELL
變數並執行內容。如果$SHELL
包含/bin/bash
它呼叫sudo /bin/bash
,這意味著它/bin/bash
作為非登錄 shell 啟動,因此所有點文件都不會被執行,但bash
它本身會讀取 .bashrc
主叫使用者。您的環境保持不變。你的家不會是根的家。所以你是root,但是在呼叫使用者的環境中。結論
該
-i
標誌是sudo
在2004年添加的,以提供與 類似的功能sudo su -
,因此sudo su -
它的模板也是如此,sudo -i
並且旨在像它一樣工作。我認為你使用哪個並不重要,除非環境不重要。添加
這裡必須提到的一個基本點是,它
sudo
被設計為只執行一個具有更高權限的命令,然後將這些權限降低到原始權限。它從來沒有打算真正切換使用者並打開一個root shell。隨著時間的推移,sudo
這種機制得到了擴展,因為人們對為什麼要sudo
在每個命令前面使用感到惱火。所以 的意思
sudo
被濫用了。sudo
旨在鼓勵使用者盡量減少 root 權限的使用。我們現在擁有的是
sudo
變得越來越流行。它集成在幾乎所有知名的 linux 發行版中。切換到另一個使用者帳戶的原始工具是su
. 對於一個老派 *nix 的老手來說,這樣的事情sudo
似乎是不必要的。它增加了複雜性並且表現得更像我們從微軟作業系統系列中知道的機制,因此與 *nix 系統的簡單性理念相反。我不是一個真正的老手,但在我看來,我一直是我的眼中釘,從被介紹的那一刻起,如果可能的話
sudo
,我總是在使用.sudo
我最捨不得用sudo
。在我所有的系統上,都啟用了 root 帳戶。但是事情會發生變化,也許時間會到來,什麼時候su
會被棄用並完全sudo
取代su
。因此我認為,最好使用
sudo
’s 內部機制(-s
,-i
)而不是依賴於su
.