生產環境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
    英文地址,請注明出處:http://en.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類型注解 """…