Linux 使用者群組設定、透過 group 來給 sudo 權限 (比改 sudoer 方便!)

一般要透過 sudo 的機制給使用者 root 權限比較常看到的好像是編輯 sudoer 這個檔案 、直接把對應的使用者帳號加入列表的作法,不過每次有新帳號需要 sudo 權限的時候都要做 visudo 自己編輯 sudoer 很麻煩,不小心可能還會改壞檔案(如果這時候沒有 root 的密碼可能就只能透過 single-user mode 進行救援了!),量大的時候用群組來管理 sudo 權限會簡單一點,而且透過群組的方式還可以更容易地進行權限控管,未來要移除使用者時也不必再次編輯 sudoer 的紀錄手動將使用者移除!

sudoer (Ubuntu 上的套件版本 1.8.9p5-1ubuntu1) 裡面部份的設定及說明:

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

可以看的出有預設的群組可以用 (admin, sudo、不同的系統可能會有略有出入),如果不合用的話(例如預設的這兩個群組權限太高、什麼事情都能做),也可以另外自己建立群組、加新規則限制能執行的命令,不過一般自己在使用的主機、甚至一些學校或中小企業沒有嚴格進行權限控管時,權限通常會直接開到最大(比較省事),所以直接把使用者加入 sudo 群組會最方便快速

修改使用者群組可以透過直接編輯 /etc/group 這個紀錄群組資訊的檔案,也可以透過簡單的命令操作來把使用者加入群組,以下是一些使用 usermod / useradd 指令把使用者加至群組的範例(這邊不考慮使用 nis/yp 控管使用者帳號的情況)

把現有的使用者加入某群組:

$ sudo usermod -a -G groupname username

or

$ sudo adduser username groupname

( groupname 代表群組名稱、username 代表使用者名稱,注意上下兩種用法的參數順序)

把現有的使用者加入某”些”群組:

$ sudo usermod -a -G groupname,groupname2,groupname3 username

調整某使用者的主要群組:

$ sudo usermod -g groupname usernam

也可以在新增使用者的時候就把某使用者加入某群組:

$ sudo useradd -G groupname username
$ sudo useradd -G groupname,groupname2,groupname3 username

或是在新增使用者的時候就指定主群組:

$ sudo useradd -g groupname username

比較要注意的地方:參數小寫 g 是指主群組,大寫 G 是指副群組

另外就是 sudoer 檔案更改後基本上是馬上生效,因為 sudo 每次執行都會去檢查該設定,但透過 group 加群組之後使用者要重新登入才能讓群組生效,這是比較不一樣的地方。

如果在 FreeBSD 上要把某個 user 加入某個群組該怎麼做呢?

$ sudo pw groupmod groupname -M username

恩,大概就這樣吧XD