目錄
1. 語法格式
2. 配置示例
3. 使用?/etc/sudoers.d/?目錄管理(推薦)
4. 基礎配置:用戶權限管理
4.1 ??添加用戶到sudo組
??4.2 驗證用戶組信息
5. sudo日志配置
5.1 修改sudoers配置文件
5.2 創建日志目錄與權限設置
6. Sudoreplay回放?sudo?記錄
6.1 列出可回放的?sudo?記錄
6.2 回放指定的?sudo?操作
?7. 配置MFA令牌
7.1 安裝 Google Authenticator PAM 模塊
7.2?用戶配置 MFA
7.3?配置 PAM 以支持 sudo MFA
7.3.1 僅對特定用戶組啟用 MFA(推薦)
7.3.2 配置組內用戶必須 MFA
sudo
(Super User DO)是 Linux/Unix 系統中授權普通用戶以特權身份執行命令的核心工具。它通過精細的權限控制,避免直接使用 root 賬戶,大幅提升系統安全性。以下為全面解析:
1. 語法格式
<用戶/用戶別名> <主機/主機別名>=(<運行身份>) <命令/命令別名>
<用戶>
:被授權的普通用戶(如alice
)。<主機>
:允許執行命令的主機(ALL
表示所有主機)。<運行身份>
:允許切換到的用戶(root
表示超級用戶,ALL
表示所有用戶)。<命令>
:允許執行的具體命令(需寫絕對路徑,如/bin/ls
)。
2. 配置示例
-
示例 1:允許用戶
alice
在web1
主機上以root
身份執行nginx
相關命令alice web1=(root) /usr/bin/systemctl restart nginx, /usr/bin/nginx -t
-
示例 2:通過別名簡化配置(允許
ADMINS
組在WEBSERVERS
主機上執行NGINX_CMD
命令)User_Alias ADMINS = alice, bob Host_Alias WEBSERVERS = web1, web2 Cmnd_Alias NGINX_CMD = /usr/bin/systemctl restart nginx, /usr/bin/nginx -t ADMINS WEBSERVERS=(root) NGINX_CMD
-
示例 3:允許用戶
bob
無需輸入密碼執行指定命令(謹慎使用)bob ALL=(root) NOPASSWD: /usr/bin/rsync /data/backup/ /remote/backup/
注:
NOPASSWD
會跳過密碼驗證,僅建議用于自動化腳本場景(如cron
任務),且命令需嚴格限制范圍。
3. 使用?/etc/sudoers.d/
?目錄管理(推薦)
# 創建模塊化配置
echo 'DBA ALL=(ALL) /usr/bin/mysql, /bin/systemctl restart mysqld' | sudo tee /etc/sudoers.d/dba
sudo chmod 440 /etc/sudoers.d/dba
4. 基礎配置:用戶權限管理
4.1 ??添加用戶到sudo組
usermod -aG wheel yq # 將用戶加入wheel組(默認sudo授權組)
??4.2 驗證用戶組信息
groups yq # 確認用戶已加入wheel組
5. sudo日志配置
5.1 修改sudoers配置文件
visudo # 使用安全編輯器修改配置
在文件末尾添加以下配置:
# 指定獨立日志文件
Defaults logfile=/var/log/sudo.log
# 啟用命令輸入輸出記錄(會話回放功能)
Defaults log_input, log_output
# 記錄環境變量(可選)
Defaults env_keep += "PATH"
log_input
:記錄輸入(鍵盤輸入)。log_output
:記錄命令輸出(需配合?sudoedit
?或?script
)。
5.2 創建日志目錄與權限設置
mkdir -p /var/log/sudo-io # 創建會話記錄目錄
chown root:root /var/log/sudo.log
chmod 600 /var/log/sudo.log
chown -R root:root /var/log/sudo-io
6. Sudoreplay回放?sudo
?記錄
6.1 列出可回放的?sudo
?記錄
sudo sudoreplay -l
[root@centos79-20251123 ~]# sudoreplay -l
8月 13 22:36:09 2025 : yq : TTY=/dev/pts/7 ; CWD=/home/yq ; USER=root ; TSID=000001 ; COMMAND=/bin/systemctl status nginx
8月 13 22:36:34 2025 : yq : TTY=/dev/pts/7 ; CWD=/home/yq ; USER=root ; TSID=000002 ; COMMAND=/bin/systemctl restart nginx
8月 13 22:36:38 2025 : yq : TTY=/dev/pts/7 ; CWD=/home/yq ; USER=root ; TSID=000003 ; COMMAND=/bin/systemctl status nginx
8月 14 19:06:48 2025 : root : TTY=/dev/pts/3 ; CWD=/root ; USER=root ; TSID=000004 ; COMMAND=/bin/grep -E log_output|iolog_dir /etc/sudoers
8月 14 21:17:11 2025 : root : TTY=/dev/pts/5 ; CWD=/root ; USER=root ; TSID=000005 ; COMMAND=/bin/cp /etc/pam.d/sudo /etc/pam.d/sudo.bak
8月 14 21:17:18 2025 : root : TTY=/dev/pts/5 ; CWD=/root ; USER=root ; TSID=000006 ; COMMAND=/bin/cp /etc/sudoers /etc/sudoers.bak
8月 14 21:19:30 2025 : yq : TTY=/dev/pts/5 ; CWD=/home/yq ; USER=root ; TSID=000007 ; COMMAND=/bin/systemctl restart nginx
每條記錄包含時間、用戶、終端、命令等信息,用于定位需要回放的操作。
6.2 回放指定的?sudo
?操作
[root@centos79-20251123 ~]# sudoreplay 00/00/03root@centos79-20251123 ~]# ll /var/log/sudo-io/00/00/03
總用量 28
-rwxr-xr-x 1 root root 75 8月 13 22:36 log
-rwxr-xr-x 1 root root 20 8月 13 22:36 stderr
-rwxr-xr-x 1 root root 20 8月 13 22:36 stdin
-rwxr-xr-x 1 root root 20 8月 13 22:36 stdout
-rwxr-xr-x 1 root root 57 8月 13 22:36 timing
-rwxr-xr-x 1 root root 21 8月 13 22:36 ttyin
-rwxr-xr-x 1 root root 425 8月 13 22:36 ttyout
?7. 配置MFA令牌
7.1 安裝 Google Authenticator PAM 模塊
# Ubuntu/Debian
sudo apt-get install libpam-google-authenticator# CentOS/RHEL
sudo yum install google-authenticator
7.2?用戶配置 MFA
每個需要 sudo
權限的用戶運行 google-authenticator
命令,生成密鑰并綁定到身份驗證應用(如 Google Authenticator、Microsoft Authenticator 等)。
7.3?配置 PAM 以支持 sudo MFA
編輯 /etc/pam.d/sudo
文件,添加 Google Authenticator 模塊:
7.3.1 僅對特定用戶組啟用 MFA(推薦)
避免影響所有用戶,可以只對 wheel
或 sudo
組啟用:
# /etc/pam.d/sudo
auth [success=ignore default=1] pam_succeed_if.so user ingroup wheel
auth required pam_google_authenticator.so
auth include system-auth
解釋:
- 如果用戶在?
wheel
?組,跳過下一行(即不強制 MFA)。 - 否則,執行下一行(要求 MFA)。
- 實際上是“不在組內才要求 MFA”,邏輯需根據需求調整。
7.3.2 配置組內用戶必須 MFA
auth required pam_google_authenticator.so secret=${HOME}/.google_authenticator
auth required pam_succeed_if.so user ingroup wheel quiet_success
注意:若sudo
不觸發 MFA,最可能的原因是 PAM 配置順序錯誤,導致 pam_unix.so
先通過認證,跳過了后面的 MFA 模塊。