sudoers設定檔
/etc/sudoers 設定檔
sudo 可以在不需要 root 密碼的情況下取得 root 權限,當然在正常的 Linux 系統中不可能讓所有的使用者都可以使用 sudo,它是依據 /etc/sudoers 設定檔來管控的,只有在這個檔案中有被特別設定的使用者或群組才能使用 sudo 指令。
在編輯
/etc/sudoers
的時候,請使用visudo
這個指令來開啟vi
編輯器進行編輯,系統會在編輯完成後自動檢查設定檔的語法是否正確,避免錯誤的語法導致sudo
無法使用。
1.個別使用者設定
設定格式如下:
帳號名稱 來源主機=(可切換帳號) 可執行的指令
其中四的欄位的意義為:
帳號名稱
可以使用 sudo 的帳號名稱。
來源主機
限制使用者從特定網路主機連線時,才能使用 sudo 指令,可用來防止入侵者從不明的主機登入攻擊。若指定為 ALL 則代表不限制來源主機。
可切換帳號
可以取得哪些帳號的權限。若指定為 ALL 則代表可以取得任何帳號的權限。
可執行的指令
在取得特殊權限後,可以執行的指令。若指定為 ALL 則代表可以執行任何令。
範例說明:
若要讓 gtwang 這個帳號可以使用 sudo 執行所有的指令,則在 /etc/sudoers 中加入這一行設定:
gtwang ALL=(ALL) ALL
基本上讓使用者允許使用 sudo 指令取得 root 權限,就等同於讓該使用者成為一位系統管理者了,所以別隨便開放 sudo 給一般的使用者,尤其是對於 Linux 不甚熟悉的人。
假設 accmgr 這個管理者是專門幫使用者重新這定密碼的,我們就可以透過這樣的設定限制 accmgr 這個管理者只能使用 root 權限執行 passwd 來更改使用者的密碼,而不能做其他的事情
accmgr ALL=(root) /usr/bin/passwd
上面這種寫法有一個漏洞,就是 accmgr 也可以更改 root 帳號的密碼,如果 root 的密碼可被任意更改,整個系統的管理權限也會被取得,所以我們必須防止 accmgr 更動 root 的密碼
accmgr ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
這裡我們將可執行的指令加上更多的限制,首先是不可以直接執行 /usr/bin/passwd,僅允許 /usr/bin/passwd 加上一般的使用者帳號,然後將 /usr/bin/passwd root 這個更改 root 密碼的指令也禁止。
2.群組設定
如果要對特定群組底下的所有帳號一次開放權限,可以使用這樣的群組設定語法
%群組名稱 來源主機=(可切換帳號) 可執行的指令
群組設定的語法跟個別帳號的方式相似,只不過群組的名稱在指定時前面要加上一個百分比 % 的符號,而其餘欄位則都相同。例如若要讓 wheel 群組中的所有使用者都可以使用 sudo,則加入:
%wheel ALL=(ALL) ALL
3.不用輸入密碼
如果想要讓特定的使用者可以在不需要輸入密碼的情況下,直接使用 sudo,可以加入 NOPASSWD 的設定,例如:
gtwang ALL=(ALL) NOPASSWD:ALL
讓整個群組的使用者都不需要密碼
%wheel ALL=(ALL) NOPASSWD:ALL
在沒有加入 NOPASSWD 的設定之下,如果使用者在五分鐘之內連續使用 sudo 好幾次,那麼只有在第一次使執行時需要輸入密碼,隨後再次執行 sudo 時,系統就不會要求使用者重複輸入,這樣的設計是預設五分鐘之內連續執行的指令應該都是同一人所為,所以不用再次輸入密碼,但若是超過五分鐘之後,就要重新驗證密碼。
4.使用別名
有的時候 /etc/sudoers 的設定比較複雜,例如遇到很多的使用者以及指令組合的狀況時,我們可以使用別名(alias)的方式來管理設定:
User_Alias MYACC = accmgr, gtwang, seal
Cmnd_Alias MYEXE = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
MYACC ALL=(root) MYEXE
這裡我們使用 User_Alias 建立一個帳號別名 MYACC,其內容就是等號後方的那些帳號名稱,而 Cmnd_Alias 則是建立指令的別名,若要建立來源主機的別名則可用 Host_Alias,所有的別名都要以大寫英文字母來命名,這樣的話就可以將冗長的設定簡化,並且重複使用,日後要修改也會比較方便。