2013-12-22

sudo

一般變成root的方式是用su指令,
若機器是由多人共同管理,則管理者都必須知道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.

All=All,代表可以用自己的密碼變成root,
如果自己的密碼不慎外洩,整個系統安全性就會有很大的問題。
因此sudoer的設定檔要好好管理,
不然可是有可能會毀了自己的系統呢。

更詳細的sudo指令用法,man sudo有很完整的說明文件。
最一般用法就是sudo後直接加上你要執行的指令。



參考資料: 鳥哥的 Linux 私房菜、2013年交大SA課堂講義

沒有留言:

張貼留言