預設情況下,任何知道 root 密碼的使用者皆可透過 su - 取得完整 root 環境。為強化安全性,最佳實務是建立 wheel 管理群組,僅允許群組成員使用 su - 昇權。本文詳細說明 PAM、login.defs 兩層設定與驗證步驟。
pam_wheel.so:檢查呼叫者是否屬於指定群組 (預設 wheel)。/etc/login.defs 參數 SU_WHEEL_ONLY yes:強制 su 僅允許 wheel 群組。vi /etc/pam.d/su
# 找到並取消註解 (或新增) 以下行
auth required pam_wheel.so use_uid
echo "SU_WHEEL_ONLY yes" >> /etc/login.defs
groupadd -r wheel # -r 為系統群組,GID < 1000
usermod -aG wheel adminuser
# 驗證
id adminuser
# 以非 wheel 使用者登入
$ su -
Password: (輸入正確 root 密碼)
su: Permission denied # 拒絕
# 以 wheel 使用者登入
$ su -
Password:
# 成功取得 root shell
若不想用 wheel,可在 PAM 指定群組:
# /etc/pam.d/su
auth required pam_wheel.so group=sysadmin
並同步建立 sysadmin 群組、修改 login.defs (或僅靠 PAM 即可)。
login.defs 不改 PAM:舊版 su 可能不讀取該參數,雙重設定最保險。usermod -G wheel user 而非 -aG:會移除使用者原有補充群組,務必加 -a (append)。更推薦完全停用 su,改用 sudo -i:
# /etc/sudoers (visudo)
%wheel ALL=(ALL) ALL
# 或限制指令
%wheel ALL=(ALL) /bin/su - root
搭配 pam_wheel.so 於 /etc/pam.d/sudo 可雙重保障。
落實 wheel 群組機制,能有效阻擋密碼洩露後的橫向昇權,是 Linux 基礎安全加固的必做項目。