愛伊米

Linux 命令 su 和 sudo 的區別?

地址:https://tanjuntao。github。io/

之前一直對 和 這兩個命令犯迷糊,最近專門搜了這方面的資料,總算是把兩者的關係以及用法搞清楚了,這篇文章來系統總結一下。

1。 準備工作

2。 命令介紹及主要用法

首先需要解釋下 代表什麼意思。

之前一直以為 是 ,查閱資料之後才知道原來表示。

知道 是由什麼縮寫來的之後,那麼它提供的功能就顯而易見了,就是

切換使用者

2。1 引數

的一般使用方法是:

或者

兩種方法只差了一個字元 ,會有比較大的差異:

光解釋會比較抽象,我們看一個例子就比較容易理解了。

我們首先從 ubuntu 使用者以 的方式切換到 root 使用者,比較兩種使用者狀態下環境變數中 的值( 命令不跟任何 ,預設切換到 root 使用者):

我們的確是切換到 root 使用者了,但是 shell 環境中的變數並沒有改變,還是用之前 ubuntu 使用者的環境變數。

接著我們從 ubuntu 使用者以 的方式切換到 root 使用者,同樣比較兩種使用者轉檯下環境變數中 的值:

可以看到用 的方式切換使用者的話,shell 中的環境變數也跟著改變了。

總結

:具體使用哪種方式切換使用者看個人需求:

如果不想因為切換到另一個使用者導致自己在當前使用者下的設定不可用,那麼用 的方式;

如果切換使用者後,需要用到該使用者的各種環境變數(不同使用者的環境變數設定一般是不同的),那麼使用 的方式。

2。2 切換到指定使用者

前面已經介紹了,如果 命令後面不跟任何 ,那麼預設是切換到 root 使用者:

因為我們在 部分已經新建了一個 test_user 使用者,並且我們也知道 test_user 使用者的登入密碼(root 使用者設定的),我們就能從 ubuntu 使用者切換到 test_user 使用者:

2。3 引數

前面的方法中,我們都是先切換到另一個使用者(root 或者 test_user),在哪個使用者的狀態下執行命令,最後輸入 返回當前 ubuntu 使用者。

還有一種方式是:不需要先切換使用者再執行命令,可以直接在當前使用者下,以另一個使用者的方式執行命令,執行結束後就返回當前使用者。這就得用到 引數。

具體使用方法是:

我麼看個例子:

這種執行方式和後面要介紹的 很像,都是臨時申請一下 root 使用者的許可權。但還是有差異,我們接著往後看。

3。 命令介紹及主要用法

首先還是解釋下 命令是什麼意思。

的英文全稱是 ,即以超級使用者(root 使用者)的方式執行命令。這裡的 和之前 表示的 是不同的,這點需要注意,很容易搞混。

我們先介紹 命令能做什麼事情,然後說明為何能做到這些,以及如何做到這些。

我們開始。

3。1 主要用法

我們在 Linux 中經常會碰到 這種情況,比如以 ubuntu 使用者的身份檢視 的內容。因為這個檔案的內容是隻有 root 使用者能檢視的。

那如果我們想要檢視怎麼辦呢?這時候就可以使用 :

例項中,我們使用了 這個小技巧,表示重複上面輸入的命令,只不過在命令最前面加上 。

因為我已經設定了 命令不需要輸入密碼,所以這裡 就能直接輸出內容。如果沒有設定的話,需要輸入當前這個使用者的密碼,例如本例中,我就應該輸入 ubuntu 使用者的登入密碼。

兩次相鄰的 操作,如果間隔在 之內,第二次輸入 不需要重新輸入密碼;如果超過 ,那麼再輸入 時,又需要輸入密碼。所以一個比較省事的方法是設定 操作不需要密碼。後面介紹如何設定。

除了以 root 使用者的許可權執行命令外,還有其它幾個用法,這裡做簡單介紹。

切換到 root 使用者:

這種方式也能以 的方式切換到 root 使用者,但是它和 方法是由區別的:

前者輸入 後,需要提供當前使用者的登入密碼,也就是 ubuntu 使用者的密碼;

後者輸入 後,需要提供 root 使用者的登入密碼。

還有一個命令:

這個命令和 效果一致,也是切換到 root 使用者,也是需要提供當前使用者(ubuntu 使用者)的登入密碼。

我們現在切換到 test_user 使用者,嘗試顯示 檔案的內容:

我們會看到倒數第二行中的錯誤提示資訊,我們無法檢視 的內容,這是為什麼?為什麼 ubuntu 可以使用 但是 test_user 不行呢?

這就涉及到 的工作原理了。

3。2 工作原理

一個使用者能否使用 命令,取決於 檔案的設定。

從 3。1 節中我們已經看到,ubuntu 使用者可以正常使用 ,但是 test_user 使用者卻無法使用,這是因為 檔案裡沒有配置 test_user。

也是一個文字檔案,但是因其有特定的語法,我們不要直接用 或者 來編輯它,需要用 這個命令。輸入這個命令之後就能直接編輯 這個檔案了。

需要說明的是,只有 root 使用者有許可權使用 命令。

我們先來看下輸入 命令後顯示的內容。

3。3 思考

我們已經看到了,如果一個使用者在 檔案中,那麼它就具有 許可權,就能透過 或者 等命令切換到 root 使用者了,那這時這個使用者就變成 root 使用者了,那這不對系統造成很大的威脅嗎?

實際上的確是這樣的。所以如果在編輯 檔案賦予某種使用者 許可權時,必須要確定該使用者是

可信任

的,不會對系統造成惡意破壞,否則將所有 root 許可權都賦予該使用者將會有非常大的危險。

當然,root 使用者也可以編輯 使使用者只具備一部分許可權,即只能執行一小部分命令。有興趣的讀者可以參考 Reference 部分第二條,這篇文章不再贅述。另外,Linux 系列面試題和答案全部整理好了,微信搜尋Java技術棧,在後臺傳送:面試,可以線上閱讀。

4。 二者的差異對比

我們已經看到:

使用 ,提供 root 賬戶的密碼,可以切換到 root 使用者;

使用 ,提供當前使用者的密碼,也可以切換到 root 使用者

兩種方式的差異也顯而易見:如果我們的 Linux 系統有很多使用者需要使用的話,前者要求所有使用者都知道 root 使用者的密碼,這顯然是非常危險的;後者是不需要暴露 root 賬戶密碼的,使用者只需要輸入自己的賬戶密碼就可以,而且哪些使用者可以切換到 root,這完全是受 root 控制的(root 透過設定 實現的),這樣系統就安全很多了。

References

https://www。rootusers。com/the-difference-between-su-and-sudo-commands-in-linux/

《鳥哥的 Linux 私房菜》13。4 節:使用者身份切換

https://github。com/ustclug/Linux101-docs/blob/master/docs/Ch05/index。md

https://www。maketecheasier。com/differences-between-su-sudo-su-sudo-s-sudo-i/

https://stackoverflow。com/questions/35999671/whats-the-difference-between-sudo-i-and-sudo-su?r=SearchResults

https://www。zhihu。com/question/51746286

https://www。linuxidc。com/Linux/2017-06/144916。htm