目录
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 模块。