若機器是由多人共同管理,則管理者都必須知道root密碼,
但讓太多人知道root密碼會有安全性上的疑慮。
這時就可以使用sudo這支程式,他可以想像成是「有限制的su」。
Who can execute what command on which host as whom
是sudo的中心思想,「人事時地物」,
每個sudoer都有自己可以控管的權限範圍,
而各自的sudoer也不需要知道root的密碼就能擁有部分root的權限。
install: security/sudo
sudoer檔案控制
使用visudo指令,編輯/usr/local/etc/sudoers檔案。
因為這個檔案是有設定語法的,如果設定錯誤的話會無法使用sudo,
而visudo可以幫我們自動檢查語法的正確性。
使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令 root ALL=(ALL) ALL
使用者帳號:
系統的哪個帳號可以使用 sudo 這個指令的意思,預設為 root 這個帳號。
登入者的來源主機名稱:
當這個帳號由哪部主機連線到本機,意思是這個帳號可能是由哪一部網路主機連線過來的,這個設定值可以指定用戶端電腦(信任用戶的意思)。預設值 root 可來自任何一部網路主機。
可切換的身份:
這個帳號可以切換成什麼身份來下達後續的指令,預設 root 可以切換成任何人。
可下達的指令:
可用該身份下達什麼指令?這個指令請務必使用絕對路徑撰寫。預設 root 可以切換任何身份且進行任何指令之意。
Host_Alias BSD=bsd1,bsd2,alumni Host_Alias LINUX=linux1,linux2 Cmnd_Alias PRINT=/usr/bin/lpc, /usr/bin/lprm Cmnd_Alias SHELLS=/bin/sh, /bin/tcsh, /bin/csh Cmnd_Alias SU=/usr/bin/su User_Alias WWWTA=jnlin, ystseng User_Alias PRINTTA=thchen, jnlin Runas_Alias NOBODY=nobody chiahung ALL=ALL liuyh ALL=(ALL)ALL,!SHELLS,!SU printTA csduty=PRINT wwwTA BSD=(NOBODY)/usr/bin/more %wheel ALL=NOPASSWD:/sbin/shutdown
如果有多個sudoers,可以使用alias的方式方便管理。
以User_Alias為例,有點像是群組的管理,
如上例,WWWTA專門管網頁伺服器,而PRINTTA則專門做影印管理,
每個alias下再去設定有哪些使用者,
如此就可以很方便管理不同使用者擁有哪些權限。
記住本文開頭說的sudo的中心思想:
Who can execute what command on which host as whom
就能很輕易的了解sudoer的檔案寫法了。
chiahung ALL=ALL
chiahung可以在所有機器,執行所有的指令。
liuyh ALL=(ALL)ALL,!SHELLS,!SU
liuyh可以在所有機器,以所有身分,執行除了SHEELS、SU以外的所有的指令。
這邊的SHELLS、SU,
參考上方的Cmnd_Alias,其中定義了實際上代表哪些指令。
WWWTA BSD=(NOBODY)/usr/bin/more
WWWTA (User_Alias) 可以在BSD上,以NOBODY的身分,
執行 /usr/bin/more 這個指令,其餘指令無法執行。
%wheel ALL=NOPASSWD:/sbin/shutdown
%代表群組的意思,而 NOPASSWD: 代表不需要輸入密碼就可以sudo。
在這邊要特別注意一點,
盡量逐行去寫該使用者可以用哪些指令,而不要用ALL,再用!去排除。
以上面的例子中,liuyh 這位使用者為例,
看似他不能執行su指令,但別忘了su這個指令只是個程式,
只要把su這支程式copy到其他地方,就照樣可以使用su這個指令了。
(Cmnd_Alias中寫的是程式的絕對路徑)
執行sudo
假設我的帳號有「All=All」的權限,
設定好之後,就可以直接執行sudo了。
> sudo su -
接著再輸入自己的密碼,這樣就能變成root囉。
有趣的一點是,再使用sudo變成root時,
會出現如下的警告訊息:
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
如果自己的密碼不慎外洩,整個系統安全性就會有很大的問題。
因此sudoer的設定檔要好好管理,
不然可是有可能會毀了自己的系統呢。
更詳細的sudo指令用法,man sudo有很完整的說明文件。
最一般用法就是sudo後直接加上你要執行的指令。
參考資料: 鳥哥的 Linux 私房菜、2013年交大SA課堂講義
沒有留言:
張貼留言