当前位置: 首页 > news >正文

生产环境sudo配置详细指南

目录

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/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(推荐)

    避免影响所有用户,可以只对 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 模块。

    http://www.dtcms.com/a/331562.html

    相关文章:

  • 机器学习学习总结
  • 如何选择适合工业场景的物联网网关?
  • 相较于传统AR作战环境虚拟仿真系统,其优势体现在哪些方面?
  • Python小程序1.0版本
  • C++类与对象核心知识点全解析(中)【六大默认成员函数详解】
  • Perforce P4 Git 连接器
  • 随身 Linux 开发环境:使用 cpolar 内网穿透服务实现 VSCode 远程访问
  • Activity + fragment的页面结构,fragment始终无法显示问题
  • AI 赋能的软件工程全生命周期应用
  • 第16届蓝桥杯C++中高级选拔赛(STEMA)2024年10月20日真题
  • 【C#】PNG 和 JPG、JPEG的应用以及三种格式的区别?
  • Oracle commit之后做了什么
  • 【20-模型诊断调优】
  • BSCI认证对企业的影响,BSCI认证的重要性,BSCI审核的核心内容
  • 信息vs知识:人类学习与AI规则提取
  • 设计模式笔记_行为型_状态模式
  • Spring Boot + Redis Sentinel (一主两从)测试案例
  • Docker pull拉取镜像命令的入门教程
  • 蓝耘元生代上线 Baichuan-M2-32B,医疗推理能力卓越,高效部署,成本超低
  • Varjo XR虚拟现实军用车辆驾驶与操作培训
  • SaltStack部署应用
  • MCP入门:Python开发者的模型上下文协议实战指南
  • VSCode打开新的文件夹之后当前打开的文件夹被覆盖
  • 百度智能云x中科大脑:「城市智能体」如何让城市更会思考
  • 如何启动本机mysql数据库
  • 软件架构需求过程:构建高质量系统的基石
  • C#面试题及详细答案120道(01-10)-- 基础语法与数据类型
  • 【Android】RecyclerView复用CheckBox的异常状态
  • 容器方式安装Prometheus以及Grafana
  • 《疯狂Java讲义(第3版)》学习笔记ch4