生产环境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.pswp.cn/news/918772.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/news/918772.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    CSS动态视口单位:彻底解决移动端适配顽疾,告别布局跳动

    你是否曾被这些问题困扰&#xff1a; 移动端页面滚动时&#xff0c;地址栏收缩导致页面高度突变&#xff0c;元素错位&#xff1f;100vh在移动设备上实际高度超出可视区域&#xff1f;全屏弹窗底部总被浏览器UI遮挡&#xff1f; 这些痛点背后都是传统视口单位的局限——无法响应…

    【P27 4-8】OpenCV Python——Mat类、深拷贝(clone、copyTo、copy)、浅拷贝,原理讲解与示例代码

    P27 4-8 1 Mat结构体2 深拷贝VS浅拷贝3 代码示例1 Mat结构体 2 深拷贝VS浅拷贝 只拷贝了头部&#xff0c;header&#xff0c;&#xff0c;但是data部分是共用的&#xff0c;速度非常快&#xff1b; 缺点&#xff0c;任意一个修改&#xff0c;另一个data跟着变&#xff0c;这就是…

    容器运行时支持GPU,并使用1panel安装ollama

    前言 安装Docker请看之前博文&#xff1a;Docker实战中1panel方式安装Docker。 安装 NVIDIA 容器工具包 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html 安装 先决条件 阅读有关平台支持的部分。为您的 Linux 发行版安装…

    高并发内存池 性能瓶颈分析与基数树优化(9)

    文章目录前言一、性能瓶颈分析操作步骤及其环境配置分析性能瓶颈二、基数树优化单层基数树二层基数树三层基数树三、使用基数树来优化代码总结前言 到了最后一篇喽&#xff0c;嘻嘻&#xff01;   终于是要告一段落了&#xff0c;接下来我们将学什么呢&#xff0c;再说吧&…

    C#面试题及详细答案120道(01-10)-- 基础语法与数据类型

    《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

    机器翻译:回译与低资源优化详解

    文章目录一、机器翻译的瓶颈二、回译&#xff08;Back-Translation&#xff09;2.1 什么是回译&#xff1f;2.2 为什么回译有效&#xff1f;2.3 回译的缺点与挑战三、低资源优化详解3.1 数据层面策略3.2 模型层面策略3.3 架构层面策略四、回译与低资源优化对比4.1 回译与低资源…

    leetcode-python-344反转字符串

    题目&#xff1a; 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&#xff1a;s [“h”,“…

    【Python】新手入门:什么是python字符编码?python标识符?什么是pyhon保留字?

    🌈 个人主页:(时光煮雨) 🔥 高质量专栏:vulnhub靶机渗透测试 👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~) 🌵文章目录🌵 前言 💡一、编码 📝二、标识符 🎯三、Py…

    为什么要使用消息队列呢?

    消息队列&#xff08;Message Queue&#xff0c;MQ&#xff09;在分布式系统中扮演着 ​异步通信枢纽​ 的角色&#xff0c;其核心价值在于解决系统间的解耦、流量削峰、异步处理等关键问题。以下是它的核心价值及典型应用场景&#xff1a;⚙️ 一、核心价值&#xff1a;解决什…

    ROS机器人云实践案例博客建议和范文-AI版本

    海报图AI图1AI图2zhangrelay的博客以技术深度、跨界思考和社会洞察为特色&#xff0c;内容兼具实用性与前瞻性&#xff0c;但部分观点存在争议&#xff0c;需结合具体主题辩证看待。以下从内容特色、技术深度、社会洞察、争议点四个维度展开分析&#xff1a;一、内容特色&#…

    UE小:编辑器模式下「窗口/鼠标不在焦点」时仍保持高帧率

    要在UE编辑器模式下「窗口/鼠标不在焦点」时仍保持高帧率&#xff0c;可按下面做法&#xff1a; 关闭编辑器的后台降频选项&#xff1a;在 Edit -> Editor Preferences -> General -> Performance 中取消勾选 “Use Less CPU when in Background”。

    VS2022 + Qt 5.15.2+Occ开发环境搭建流程

    Visual Studio 2022 Qt 5.15.2 图形处理开发环境搭建流程 1. 安装 Visual Studio 2022 下载安装程序&#xff1a;Visual Studio 官网选择工作负载&#xff1a; ✔️ “使用C的桌面开发”✔️ “通用Windows平台开发”&#xff08;可选&#xff09; 安装组件&#xff1a; ✔️…

    多任务并发:进程管理的核心奥秘

    多任务&#xff08;并发&#xff09;&#xff1a;让系统具备同时处理多个任务的能力1. 多进程2. 多线程3. 进程间通信一、进程的基本概念1. 什么是进程&#xff1f;正在运行的程序&#xff0c;其运行过程中需要消耗内存和CPU。进程的特点&#xff1a;动态性&#xff1a;进程是程…

    高效TypeScript开发:VSCode终极配置指南

    ⚙️ VSCode TypeScript 专属效率设置大全 (纯 settings.json 配置) // .vscode/settings.json {/* &#x1f50d; 引用与类型追踪 */"typescript.referencesCodeLens.enabled": true, // 显示引用计数(点击查看所有引用处)"typescript.implementationsCod…

    资本的自我否定:四重矛盾中的历史辩证法

    资本自诞生以来&#xff0c;便以“增殖”为唯一使命&#xff0c;如同一个不知疲倦的扩张机器&#xff0c;在推动生产力飞跃的同时&#xff0c;也埋下了自我毁灭的种子。这种自我否定并非外部力量的强加&#xff0c;而是其内在逻辑的必然展开——从价格战的困局到经济危机的周期…

    Linux系统安装Docker及常见问题解决

    1.1 解决安装Docker问题 Linux的发行版本&#xff0c;大多数还是在用CentOS&#xff0c;虽然CentOS已经不更新了。。。。。CentOS因为不更新了&#xff0c;所以很多的yum源都失效了。导致安装Docker失败&#xff01; 只需要更新一下yum源。直接将之前默认的yum源替换为阿里的…

    CICD-Devops整合Kubernetes-4

    Devops整合Kubernetes Kubernetes部署快速安装Kubernetes **官网&#xff1a;**https://kuboard.cn/选择默认支持docker的版本1.19前置环境部署 所有节点均需执行同操作 # 配置主机名解析 [rootKubernetes-master ~]# echo "127.0.0.1 $(hostname)" >> /etc/ho…

    C/C++ 指针与内存操作详解——从一级指针到字符串转换函数的完整解析

    C/C 指针与内存操作详解——从一级指针到字符串转换函数的完整解析 本文将带你系统理解 一级指针与二级指针的区别、数组拷贝的注意事项、字符串转整数函数实现 等 C/C 编程中常见且易混淆的知识点&#xff0c;并配合详细代码示例与常见坑点分析&#xff0c;让你从入门到掌握。…

    Java -- HashSet的全面说明-Map接口的常用方法-遍历方法

    目录 1. HashSet的全面说明 2. Map接口实现类的特点 注意&#xff1a;讲的是JDK8的Map接口特点 3. Map接口的常用方法 4. Map遍历方法 1. HashSet的全面说明 1. HashSet实现了Set接口 2. HashSet实际上是HashMap 3. 可以存放null值&#xff0c;但是只能有一个null 4. H…

    【python】类型注解

    参考【为什么越来越多Python项目都在写类型注解&#xff1f;】 https://www.bilibili.com/video/BV1sW81zbEkD/?share_sourcecopy_web&vd_source9332b8fc5ea8d349a54c3989f6189fd3代码示例使用变量 : 类型名 来注解。""" python类型注解 """…