Linux su與sudo的區別

奮起直追CDS發表於2016-01-28

su的用法

su命令就是切換使用者的工具。

比如我們以普通使用者dustin登入的,但要新增使用者任務,執行useradd ,dustin使用者沒有這個許可權,而這個許可權恰恰由root所擁有。解決辦法無法有兩個,一是退出dustin使用者,重新以root使用者登入,但這種辦法並不是最好的;二是我們沒有必要退出beinan使用者,可以用su來切換到root下進行新增使用者的工作,等任務完成後再退出root。我們可以看到當然通過su切換是一種比較好的辦法;通過su可以在使用者之間切換,如果超級許可權使用者root向普通或虛擬使用者切換不需要密碼,而普通使用者切換到其它任何使用者都需要密碼驗證。

su 不加任何引數

su 在不加任何引數,預設為切換到root使用者,但沒有轉到root使用者家目錄下,也就是說這時雖然是切換為root使用者了,但並沒有改變工作目錄和環境變數:
這裡寫圖片描述

su - 加了-作為引數

su 加引數 - ,表示預設切換到root使用者,並且改變到root使用者的環境:
這裡寫圖片描述

-實際上是–login的縮寫:
這裡寫圖片描述

su的優缺點

su 的確為管理帶來方便,通過切換到root下,能完成所有系統管理工具,只要把root的密碼交給任何一個普通使用者,他都能切換到root來完成所有的系統管理工作;但通過su切換到root後,也有不安全因素;比如系統有10個使用者,而且都參與管理。如果這10個使用者都涉及到超級許可權的運用,做為管理員如果想讓其它使用者通過su來切換到超級許可權的root,必須把root許可權密碼都告訴這10個使用者;如果這10個使用者都有root許可權,通過root許可權可以做任何事,這在一定程度上就對系統的安全造成了威協;想想Windows吧,簡直就是惡夢。

“沒有不安全的系統,只有不安全的人”,我們絕對不能保證這 10個使用者都能按正常操作流程來管理系統,其中任何一人對系統操作的重大失誤,都可能導致系統崩潰或資料損失;所以su 工具在多人蔘與的系統管理中,並不是最好的選擇,su只適用於一兩個人蔘與管理的系統,畢竟su並不能讓普通使用者受限的使用;超級使用者root密碼應該掌握在少數使用者手中,這絕對是真理!所以集權而治的存在還是有一定道理的。

sudo的用法

通過sudo,我們能把某些超級許可權有針對性的下放,並且不需要普通使用者知道root密碼,所以sudo 相對於許可權無限制性的su來說,還是比較安全的,所以sudo 也能被稱為受限制的su ;另外sudo 是需要授權許可的,所以也被稱為授權許可的su。

這裡寫圖片描述

sudo的執行過程是這樣的:

  1. 檢查使用者是否在/etc/sudoers的列表中
  2. 如果在,以root許可權執行命令
  3. 取消使用者的root

例如,使用者dustin是沒有檢視/etc/shadow檔案的許可權,但是我在建立dustin這個使用者時曾經賦予了他可以作為管理員的許可權,所以當用sudo執行less /etc/shadow命令時,系統會提醒我要小心操作,然後輸入dustin的密碼即可執行,而不需要使用root密碼,這樣既可以讓多人來管理系統,又減少了root密碼洩露的可能。而且此命令執行之後,獲取的管理員許可權立刻就會失去。

這裡寫圖片描述

這裡寫圖片描述

而且很容易發現,sudo和su一樣,沒有切換工作目錄和環境變數,只是賦予使用者許可權:
這裡寫圖片描述

相關文章