身為程序員,你可以活在一個沒有Windows的世界益愈,當你離不開Unix(Linux,Mac。磨隘。。)顾患。而在Unix下面番捂,你離不開terminal,離不開sudo江解。
你知道sudo command设预,然后輸入密碼,就可以以root的身份執(zhí)行command犁河。如果接觸的更多一點鳖枕,你或許知道sudo給你的權限不是自動給你的。如果你在一個Linux系統(tǒng)上增加了一個用戶呼股,你需要先以root的身份做一些設置耕魄,然后才能執(zhí)行sudo命令。
這些設置彭谁,就是運行visudo吸奴,它會打開一個文件,然后我們在里面添加一些東西缠局,這個過程很簡單则奥,因為這個文件的內(nèi)容不多,而且有注釋狭园,而而且還有范例读处,你只需要copy一行,然后把“root”改成你想要添加的那個用戶名就可以了唱矛。
然而罚舱,里面的東西其實看著很奇怪井辜,我們要添加的那一行看起來大概是這樣的:
`chris ALL=(ALL:ALL) ALL`
上面的內(nèi)容取自Ubuntu 12.04,其他Unix平臺內(nèi)容也是類似的管闷。其中“chris”是用戶名粥脚,后面跟著好幾個“ALL”,是干嗎用的呢包个?
以前我一直都是實用主義刷允,解決了一個問題,那就可以了碧囊,很少去想“為什么”树灶,最近發(fā)現(xiàn),如果如果一直是這樣糯而,其實不大好天通,知其然要知其所以然。當然熄驼,如果無窮無盡的去最求所以然土砂,那就成了科學研究了,所以中間要有個度谜洽。
出于這個考慮萝映,今天就看了一下這個visudo,看看究竟是什么東東阐虚。
前面說了序臂,visudo其實是打開一個文件,讓你編輯這個文件的內(nèi)容实束,這個文件就是/etc/sudoers奥秆,用的編輯器默認是vi。你可以用任何編輯器打開編輯它咸灿。那么問題來了构订,為什么不用直接打開這個文件然后編輯其中的內(nèi)容呢?根據(jù)visudo的使用說明避矢,如果你用visudo來編輯這個文件悼瘾,那么它會幫你自動做很多事情,比如說語法檢查审胸,加鎖防止別人同時修改這個文件等等亥宿,所以,強烈建議用戶使用visudo砂沛,強烈譴責用戶直接修改這個文件烫扼。
下面,我們就運行這個命令碍庵,看看里面有什么東西:
以#開頭的行都是注釋映企,所以前面8行都是注釋悟狱,第一行注釋也說清楚了,這個文件必須用visudo來編輯堰氓。
第九行Default ?env_reset 表示重置(就是去除)用戶定義的環(huán)境變量芽淡,也就是說,當你用sudo執(zhí)行一個命令的時候豆赏,你當前用戶設置的所有環(huán)境變量都是無效的。比如說富稻,你的home目錄下面有一個bin文件夾掷邦,這個文件夾里面有一些可執(zhí)行文件,你把這個文件夾加到Path環(huán)境變量里椭赋。正常情況下抚岗,你可以在任何地方直接執(zhí)行這個文件夾里面的命令。但是你用sodu執(zhí)行這個文件夾里面的命令時哪怔,shell會提醒你"command not found". 那是因為當你用sudo執(zhí)行一個命令時宣蔚,你當前用戶設置的path環(huán)境變量已經(jīng)失效了。
下面的
root ?ALL=(ALL:ALL) ?ALL
就是我們前面提到的ALL认境。在下面一行
zouchuang ?ALL=(ALL:ALL) ALL
就是我們創(chuàng)建了一個新用戶(在這里胚委,這個新用戶名字叫zouchuang),需要添加的這一行叉信。
其中zouchuang是用戶名亩冬,接下來的第一個ALL,表示"From ALL hosts"(所有主機), 意思是硼身,zouchuang從任何機器登錄硅急,都可以應用接下來的規(guī)則。
第二個ALL佳遂,表示“run as All user”营袜,這個的意思是,zouchuang可以以任何用戶的身份運行一些命令丑罪。第三個ALL荚板,表示“run as All groups”,它的意思是吩屹,zouchuang可以以任何用戶組的身份運行一些命令啸驯。運行那些命令呢?這就是第四個ALL的意思了祟峦,這表示前面的規(guī)定適用于任何命令罚斗。總結起來宅楞,這四個ALL的含義就是针姿,zouchuang這個用戶可以從任何機器登錄袱吆,以任何用戶和用戶組的身份運行任何命令。
這四個ALL都可以用其他值來代替距淫,比如绞绒,可以將第一個ALL改成本地局域網(wǎng),或某些特定的網(wǎng)段榕暇,這樣的話蓬衡,用戶在其他機器上登陸以后,就無法使用sudo命令了彤枢。
第二個和第三個ALL是可選的狰晚,如果省略,則默認為root用戶缴啡,也就是說壁晒,可以這樣寫:
zouchuang ALL= ALL,表示zouchuang可以從任何host登錄业栅,然后以root身份運行任何命令秒咐。
接下來下面這一行
%admin ALL=(All) ALL
表示這是用戶組的權限,以%開頭碘裕,admin是用戶組的名字携取,接下來的幾個ALL表示的含義跟前面所述的一樣,其中第二個ALL表示“All users” 而不是“All groups”帮孔。
這就是這個sudoers文件中基本設置語句的含義歹茶,關于sudoers的用法太多了,這里先介紹到這里你弦,希望以后能補上其他的一些惊豺。因為我發(fā)現(xiàn)寫一篇文章所需要的時間太長了嗚嗚嗚。禽作。尸昧。