介紹如何修改 Ubuntu Linux 系統的 sudo 設定,管理可取得 root 權限的使用者與群組。
新增可用 sudo 的使用者
由於 Ubuntu Linux 系統上預設是以 sudo 這個特殊群組在管理可用 sudo 指令的使用者,所以若要新增一位可以使用 sudo 的使用者,只要將使用者加入 sudo 群組即可。
sudo 權限的群組是 wheel。首先以 adduser 新增一個普通的 Linux 帳號:
# 新增使用者帳號
sudo adduser newuser
在設定好基本的帳號資訊之後,若要讓此帳號可以使用 sudo,只要將該帳號加入 sudo 群組即可:
# 將 newuser 加入 sudo 群組 sudo usermod -aG sudo newuser
接著切換為該使用者的權限,測試該使用者是否可以正常使用 sudo 執行指令:
# 切換為 newuser 帳號權限 sudo su - newuser # 測試 newuser 帳號是否可以使用 sudo sudo ls -la /root
撤除使用者的 sudo 使用權限
若要將指定使用者的 sudo 使用權限撤除,只要將該使用者從 sudo 群組中移除即可:
# 將 newuser 從 sudo 群組移除
sudo deluser newuser sudo
限制 sudo 執行的指令
Ubuntu Linux 預設的 sudo 群組只能設定讓使用者取的最高的 root 權限,如果需要針對特殊的使用者依據不同指令給予不同的執行權限,就需要使用 visudo 編輯 /etc/sudoers 設定檔。
設定個別使用者 sudo 執行權限的語法如下:
使用者 主機=(使用者權限:群組權限) 指令
若要指定多個不同的指令,則以逗點分隔。使用者權限與群組權限若省略的話,預設會允許以 root 權限來執行。
假設我們想讓允許 myuser 使用者使用 sudo 以 operator 使用者權限或admin 群組權限執行 /bin/ls、以 root 權限執行 /bin/kill 與 /usr/bin/lprm,可以這樣寫:
# 允許 myuser 使用者使用 sudo 以 operator 使用者權限或 admin 群組權限執行 /bin/ls, # 以 root 權限執行 /bin/kill 與 /usr/bin/lprm myuser ALL=(operator:admin) /bin/ls, (root) /bin/kill, /usr/bin/lprm
新增可用 sudo 的群組
若要讓指定群組內的所有人都可以使用 sudo 取得 root 權限,可以使用 visudo 編輯 /etc/sudoers,授權整個群組使用 sudo,其語法如下:
%群組 主機=(使用者權限:群組權限) 指令
若要允許 mygroup 群組中的使用者使用 sudo 以任何權限執行任何指令,可以加入以下設定:
# 允許 mygroup 群組中的使用者使用 sudo 以任何權限執行任何指令 %mygroup ALL=(ALL:ALL) ALL
群組亦可針對不同指令給予不同的執行權限,多個指令之間以逗點分隔:
# 允許 mygroup 群組中的使用者使用 sudo # 以 operator 使用者權限執行 /bin/ls, # 以 root 權限執行 /bin/kill 與 /usr/bin/lprm %mygroup ALL=(operator) /bin/ls, (root) /bin/kill, /usr/bin/lprm
不用密碼執行 sudo
如果希望使用者在使用 sudo 時不需要輸入密碼,可以在設定檔中加上 NOPASSWD 設定:
# 允許 myuser 使用者不需要密碼使用 sudo 執行任何程式 myuser ALL=(ALL:ALL) NOPASSWD: ALL # 允許 mygroup 群組中的使用者不需要密碼使用 sudo 執行任何程式 %mygroup ALL=(ALL:ALL) NOPASSWD: ALL
亦可設定某些指令需要密碼,某些不需要:
# 允許 myuser 使用者不需要密碼使用 sudo 以 root 權限執行 /bin/kill, # 以 root 權限執行 /bin/ls 與 /usr/bin/lprm 則需要密碼 myuser rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm
密碼有效時間
當使用者執行一次 sudo 並輸入密碼成功執行之後,預設在 15 分鐘之內若再次執行 sudo 就不需要再輸入一次密碼,若想要更改這個密碼的有效時間,可以修改 /etc/sudoers 設定檔的 timestamp_timeout 參數:
# 設定密碼有效時間為 30 分鐘 Defaults:USER timestamp_timeout=30
密碼嘗試次數
sudo 預設只讓使用者嘗試輸入密碼三次,若要更改此設定值,可以修改 /etc/sudoers 設定檔的 passwd_tries 參數:
# 設定密碼輸入嘗試次數上限值 Defaults passwd_tries=5
改用目標使用者的密碼
在預設的狀況下,使用 sudo 時所輸入的密碼是目前使用者(切換使用者權限之前的使用者)的密碼,如果要改成輸入切換目標使用者的密碼,可以設定 targetpw 參數:
# 輸入目標使用者密碼 Defaults targetpw
參考資料:Tecmint、DigitalOcean

