sudo,代表了Linux的絕對霸權!
su是一個Linux命令,渾身充滿了power。可以切換到其他用戶或者高權用戶去干sth。
請原諒我這外企員工中英文夾雜式的表達,reason很簡單,就是要你有很深的impression。
在很久很久之前,公司窮買不起MacBook,xjjdog只能使用用SecureCRT來遠程連接服務器。
為了增加安全性,首先需要登陸一臺跳板機,然后再在跳板機上使用ssh命令連接真正的目標機器。
其中,就有一臺服務器對環境要求非常苛刻。當服務啟動,總是發現它的環境變量不是自己所想要的那樣,即使在root用戶的??.bash_profile?
?文件里強行設置都沒用。
到最后才發現,是su命令用錯了。
那么, su, su -, sudo -i, sudo -s ,到底有什么區別?
sudo
首先,我們來看下sudo。
我們最常用的,就是 sudo -s了。它的意思是:
- 使用當前用戶的環境變量
- 不跳轉切換用戶后的目錄
- 切換到超級管理員或者目標用戶的權限
這通常會帶來一些問題,比如xjjdog用戶下設置了自己的一套環境變量,當使用 su -s 切換到超級管理員權限,依然使用的是xjjdog的環境變量。這樣,就會發生找不到命令,語言錯誤,甚至配置錯誤的結果。
相對應的, sudo -i 就干凈利索的多。它的意思是:
- 使用root或者目標用戶用戶的環境變量
- 切換到 /root或者目標用戶的home目錄
- 切換到超級管理員或者目標用戶的權限
大多數情況下,推薦使用 su -i 替代 su -s,這樣出問題的幾率會小的很。
su
與此對應的,就是su命令。
如果只運行su,它的效果和sudo -s是一樣的。如果使用了 su - ,那么它的效果就是sudo -i。
如果沒有特殊原因,任何使用,都應該使用sudo -i或者su -。
高權賬號
隨著運維工具的提升,普通開發已經很少有機會接觸這種命令了。但萬變不離其宗,在開發運維工具的時候,同樣會碰到這樣的問題。
很多時候,公司設定了嚴格的權限和分級制度,用來規范開發人員的操作。
但是,高權賬號總是必要的。這些賬號通常都會分配給leader們。
比較搞笑的是,公司的開發規范大多數開發是能夠遵守的,而帶頭破壞規范的,一般還是高權賬號。
公司的問題和社會的問題都是相似的。“管理者”設計了一套機制,用來避免風險,約束行為。但當繩子套在自己身上的時候,才體驗到它的束手束腳。
怎么辦?su來幫忙吧。效率也提升了,問題也解決了,留給一臉懵逼的后來人:“規范呢?怎么能帶頭破壞呢”?
沒辦法,誰讓別人有sudo權限呢?
作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。