生产环境sudo配置详细指南

Linux sudo配置与MFA设置指南

目录

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


sudoSuper User DO)是 Linux/Unix 系统中授权普通用户以特权身份执行命令的核心工具。它通过精细的权限控制,避免直接使用 root 账户,大幅提升系统安全性。以下为全面解析:

1. 语法格式

<用户/用户别名>    <主机/主机别名>=(<运行身份>)     <命令/命令别名>

  • <用户>:被授权的普通用户(如alice)。
  • <主机>:允许执行命令的主机(ALL表示所有主机)。
  • <运行身份>:允许切换到的用户(root表示超级用户,ALL表示所有用户)。
  • <命令>:允许执行的具体命令(需写绝对路径,如/bin/ls)。

2. 配置示例

  • 示例 1:允许用户aliceweb1主机上以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/03
    
    root@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(推荐)

    避免影响所有用户,可以只对 wheelsudo 组启用:

    # /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 模块。

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值