Linux云計算基礎篇(5)

一、sudo是什么?

定義:sudo(SuperUserDO)是一個Linux/Unix系統命令,允許被授權的普通用戶以另一個用戶(通常是超級用戶root)的身份執行命令。

核心目的:

1.最小權限原則:避免讓用戶長期擁有root權限或直接使用root賬戶登錄,減少因誤操作或惡意軟件造成的系統破壞風險。

2.權限委派:精確控制哪些用戶可以執行哪些特定的特權命令。

3.審計追蹤:sudo默認會記錄誰在什么時候執行了什么命令(通常記錄在/var/log/auth.log或/var/log/secure),便于事后審計。

工作原理:

sudo本身是一個設置了SetUID(SUID)位的程序(通常位于/usr/bin/sudo,權限為-rwsr-xr-x)。

當普通用戶執行sudocommand時:

1.系統檢查該用戶是否有權使用sudo以及是否有權執行command(依據/etc/sudoers文件)。

2.如果授權通過,系統會提示用戶輸入自己的密碼(除非配置為免密碼)。

3.密碼驗證通過后(或配置免密碼),sudo進程會以root用戶(或指定的其他用戶)的身份啟動command。

4.執行完成后,權限恢復為原用戶。

二、sudo的基本使用規則

1.基本語法:

bash

sudo[選項]command[參數]

-uusername:以指定用戶身份執行命令(默認為root)。例如:sudo-ualicetouchfile.txt(以用戶alice身份創建文件)。

-l:列出當前用戶被允許執行的sudo命令。

-v:刷新用戶的sudo身份驗證時間戳,延長免密碼時間(通常默認5分鐘)。

-k:立即終止用戶的sudo身份驗證時間戳,下次使用sudo需要重新輸入密碼。

-s:啟動一個新的shell(通常是root的shell)。sudo-s

-i:模擬root登錄環境(類似于su-或sudosu-)。sudo-i

2.典型使用場景:

安裝軟件:sudoaptinstallpackage_name(Debian/Ubuntu)/sudoyuminstallpackage_name(CentOS/RHEL)

管理系統服務:sudosystemctlrestartapache2

編輯系統配置文件:sudonano/etc/nginx/nginx.conf

查看系統日志:sudotail-f/var/log/syslog

管理用戶/組:sudouseraddnewuser/sudousermod-aGgroupnameusername

掛載文件系統:sudomount/dev/sdb1/mnt/data

3.重要規則:

密碼:默認情況下,用戶需要輸入自己的密碼(不是root密碼)來驗證身份。輸入密碼時光標不會移動,也不會顯示星號,這是正常現象。

時間戳:輸入密碼驗證成功后,系統會記錄一個時間戳(通常保存在/run/sudo/ts/或/var/run/sudo/ts)。在默認配置(通常是5分鐘)內再次使用sudo通常不需要重新輸入密碼。

授權限制:用戶只能執行/etc/sudoers文件中明確允許的命令。嘗試執行未授權的命令會被拒絕并記錄。

三、/etc/sudoers文件詳解

文件位置:/etc/sudoers

重要性:這是sudo權限系統的核心配置文件。定義了哪些用戶/組可以在哪些主機上以哪些用戶的身份運行哪些命令,以及相關的選項(如是否免密碼)。

編輯規則:

絕對不要使用普通文本編輯器(如nano,vim)直接編輯/etc/sudoers!

必須使用visudo命令編輯!

bash

sudovisudo

為什么必須用visudo?

1.語法檢查:visudo在保存文件時會進行嚴格的語法檢查。如果發現錯誤,它會警告你并詢問如何處理(通常是恢復或重新編輯)。直接編輯如果寫錯語法,可能導致sudo完全失效,甚至無法用sudo修復,只能用root用戶或單用戶模式修復。

2.文件鎖:visudo會鎖定文件,防止多人同時編輯導致配置丟失。

3.安全:使用安全的環境編輯。

/etc/sudoers文件結構解析

文件通常包含以下部分(順序可能略有不同):

1.Defaults(默認設置):

設置影響所有sudo操作的全局選項。

語法:Defaults后跟選項名,可以指定用戶、主機、命令別名等目標。

常用Defaults選項:

Defaultsenv_reset:重置環境變量到一個安全的最小集(推薦)。防止用戶通過環境變量影響特權命令。

Defaultsmail_always:每次用戶使用sudo時都發送郵件通知。

Defaultsmail_badpass:當用戶輸入錯誤密碼時發送郵件通知。

Defaultssecure_path:設置sudo執行命令時的PATH環境變量(非常重要!防止用戶路徑下的惡意程序被以root執行)。例如:Defaultssecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

Defaultstimestamp_timeout=分鐘數:設置密碼驗證成功后sudo免密碼的時間窗口(默認通常是5或15)。設置為0表示每次都需要密碼,設置為負數(如-1)表示永不超時(危險!)。

Defaultspasswd_timeout=分鐘數:設置輸入密碼提示的超時時間。

Defaults!lecture:首次使用sudo時不再顯示警告信息("Wetrustyouhavereceivedtheusuallecture...")。

Defaultslogfile="/path/to/log":指定自定義的sudo日志文件路徑。

Defaultslog_input,log_output:記錄命令的輸入(stdin)和輸出(stdout/stderr),用于高級審計(謹慎使用,數據量大)。

Defaultstargetpw:要求輸入目標用戶(通常是root)的密碼,而不是執行sudo用戶的密碼(非常不推薦,破壞了sudo的核心安全模型)。

Defaults!authenticate:允許特定用戶/命令免密碼執行sudo(通常結合具體的用戶規則使用更安全)。

示例:

sudoers

全局設置

Defaultsenv_reset

Defaultsmail_badpass

Defaultssecure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

對管理員組免去首次使用警告

Defaults:%admin!lecture

設置超時為10分鐘

Defaultstimestamp_timeout=10

2.UserAliases(用戶別名):

定義一組用戶的別名,方便在規則中引用。

語法:User_AliasALIAS_NAME=user1,user2,user3,%group1,%group2,...

%group表示系統用戶組。

示例:

sudoers

User_AliasADMINS=jsmith,mjones,%sysadmin

User_AliasWEBMASTERS=bob,%webdev

3.HostAliases(主機別名):

定義一組主機的別名(在多主機環境中配置sudoers時有用)。

語法:Host_AliasALIAS_NAME=hostname1,hostname2,ip-address,...

示例:

sudoers

Host_AliasWEBSERVERS=www1,www2,192.168.1.10

Host_AliasDBSERVERS=db-primary,db-replica

4.RunasAliases(身份別名):

定義sudo可以切換到的目標用戶的別名。

語法:Runas_AliasALIAS_NAME=user1,user2,%group1,...

示例:

sudoers

Runas_AliasDB_ADMINS=postgres,mysql

Runas_AliasSERVICE_ACCOUNTS=%service

5.CommandAliases(命令別名):

定義一組命令(或帶路徑的命令)的別名,是配置的核心。

語法:Cmnd_AliasALIAS_NAME=/path/to/command1,/path/to/command2,/path/to/command3args,...

關鍵點:

必須使用絕對路徑指定命令!這是防止命令注入攻擊的關鍵。

可以在命令后添加參數來限制使用方式(如/usr/bin/aptinstall只允許安裝,不能刪除)。

通配符:

:匹配任意字符序列(小心使用!/usr/bin/允許該目錄下所有命令)。

?:匹配單個字符。

[]:字符集合。

!:取反(如!/usr/bin/passwdroot禁止修改root密碼)。

示例:

sudoers

Cmnd_AliasSOFTWARE=/usr/bin/aptinstall,/usr/bin/aptremove,/usr/bin/aptupdate

Cmnd_AliasSHUTDOWN_CMDS=/sbin/shutdown,/sbin/reboot,/sbin/halt

Cmnd_AliasPROC_MGMT=/bin/kill,/usr/bin/killall,/bin/nice,/bin/renice

Cmnd_AliasNETWORKING=/sbin/route,/sbin/ifconfig,/bin/ping,/sbin/dhclient,/usr/bin/net,/sbin/iptables

Cmnd_AliasSERVICES=/usr/bin/systemctlstart,/usr/bin/systemctlstop,/usr/bin/systemctlrestart,/usr/bin/systemctlstatus

允許不帶參數執行updatedb

Cmnd_AliasLOCATE=/usr/bin/updatedb""

允許運行/usr/bin/less查看任何日志文件

Cmnd_AliasVIEW_LOGS=/usr/bin/less/var/log/.log,/usr/bin/less/var/log/syslog,/usr/bin/less/var/log/auth.log

禁止修改root密碼

Cmnd_AliasNO_ROOT_PASSWD=!/usr/bin/passwdroot

6.用戶規范(權限規則):

這是文件的核心部分,定義了實際的權限規則。

語法:

whowhere=(runas_user[:runas_group])[NOPASSWD:][TAG:]command_list

各字段解釋:

who:哪些用戶/組/別名可以使用這條規則。可以是:

用戶名(e.g.,jsmith)

組名(前面加%,e.g.,%admin)

用戶別名(e.g.,ADMINS)

系統保留字ALL

where:在哪些主機上這條規則有效。可以是:

主機名(e.g.,webserver1)

主機別名(e.g.,WEBSERVERS)

ALL(所有主機)

(runas_user[:runas_group]):允許sudo切換到的目標用戶(和可選的組)。可以是:

用戶名(e.g.,root)

用戶別名(e.g.,DB_ADMINS)

組名(前面加%,e.g.,%service)

ALL

省略括號和內容時,默認(root:root)

NOPASSWD:(可選):如果指定,執行command_list中的命令時不需要輸入密碼。這是可選的標記,放在command_list前面。PASSWD:是默認行為(需要密碼)。

TAG:(可選):更精細地控制命令行為(較少用):

SETENV::允許用戶在sudo環境中保留或設置環境變量(需謹慎)。

NOEXEC::阻止被執行的命令自身再exec其他程序(防止某些shell逃逸)。

command_list:允許執行的命令列表。可以是:

絕對路徑的命令(e.g.,/usr/bin/apt)

命令別名(e.g.,SOFTWARE)

ALL(允許所有命令-極度危險!)

可以在命令或別名前加!表示禁止執行。

多個命令/別名用逗號,分隔。

規則示例與解釋:

sudoers

1.用戶jsmith在任何主機上可以以root身份運行任何命令(需要密碼)-等同于給root權限(危險!)

jsmithALL=(ALL:ALL)ALL

2.用戶webadmin在主機webserver1上可以以root身份運行/usr/bin/systemctl管理nginx和apache2(需要密碼)

webadminwebserver1=(root)/usr/bin/systemctlstartnginx,/usr/bin/systemctlstopnginx,/usr/bin/systemctlrestartnginx,/usr/bin/systemctlstatusnginx,\

/usr/bin/systemctlstartapache2,/usr/bin/systemctlstopapache2,/usr/bin/systemctlrestartapache2,/usr/bin/systemctlstatusapache2

3.組admin的成員在任何主機上可以以任何用戶身份運行任何命令(需要密碼)

%adminALL=(ALL:ALL)ALL

4.用戶deploy在任何主機上可以以用戶www-data的身份運行/usr/bin/git(免密碼)

deployALL=(www-data)NOPASSWD:/usr/bin/git

5.用戶backup在任何主機上可以以root身份運行/usr/bin/rsync和/bin/tar(需要密碼)

backupALL=(root)/usr/bin/rsync,/bin/tar

6.用戶auditor在任何主機上可以以root身份只讀查看所有日志文件(免密碼)

auditorALL=(root)NOPASSWD:/usr/bin/less/var/log/,/usr/bin/tail/var/log/,/bin/cat/var/log/

7.用戶dba在主機dbserver1上可以以用戶postgres或mysql的身份運行數據庫管理命令(需要密碼)

dbadbserver1=(DB_ADMINS)/usr/bin/psql,/usr/bin/mysql,/opt/dbadmin/bin/

8.用戶limited可以運行SOFTWARE別名中的命令(aptinstall/remove/update)和查看進程(PROC_MGMT),但禁止修改root密碼(免密碼)

limitedALL=(root)NOPASSWD:SOFTWARE,PROC_MGMT,NO_ROOT_PASSWD

9.用戶helper可以重啟網絡服務(NETWORKING)和關機命令(SHUTDOWN_CMDS),但必須輸入密碼

helperALL=(root)NETWORKING,SHUTDOWN_CMDS

10.別名WEBMASTERS中的用戶在主機WEBSERVERS上可以以root身份管理WEB_SERVICES別名中的服務(需要密碼)

WEBMASTERSWEBSERVERS=(root)WEB_SERVICES

關鍵注意事項與最佳實踐

1.visudo是唯一編輯方式:再強調一遍,永遠使用sudovisudo編輯/etc/sudoers。

2.最小權限原則:只授予執行特定任務所必需的最小權限。避免使用ALL=(ALL:ALL)ALL這種寬泛規則,除非對特定管理用戶且確有必要。

3.使用絕對路徑:命令列表中必須使用命令的絕對路徑。

4.善用別名:大量使用User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias來組織規則,使文件更清晰、更易管理。

5.謹慎使用NOPASSWD:免密碼雖然方便,但大大降低了安全性。僅在自動化腳本或非常信任且命令風險極低的情況下使用。

6.限制命令參數:在Cmnd_Alias中通過指定參數來限制命令的使用范圍(如只允許aptinstall不允許aptremove)。

7.避免sudo運行Shell:規則如ALL=(ALL:ALL)/bin/bash或ALL=(ALL:ALL)/bin/sh等同于給予用戶完全的rootshell訪問權限,破壞了sudo的細粒度控制優勢。盡量指定具體的命令。

8.組管理優先:盡量將權限賦予組(%groupname),然后通過管理用戶組成員來管理權限,比單獨管理每個用戶更方便。

9.定期審計:定期檢查/var/log/auth.log(或/var/log/secure)中的sudo日志,以及使用sudo-l查看用戶權限。

10.測試規則:添加新規則后,切換到相應用戶(su-username)并使用sudo-l驗證規則是否按預期生效,再測試執行具體命令。

總結

sudo是實現安全、可控的特權命令執行的核心工具。

/etc/sudoers文件是配置sudo權限的核心,必須通過visudo安全編輯。

配置的核心在于定義誰(who),在哪里(where),可以以誰的身份((runas_user)),是否需要密碼(NOPASSWD:),運行哪些命令(command_list)。

充分利用別名(User_Alias,Host_Alias,Runas_Alias,Cmnd_Alias)組織復雜配置。

嚴格遵守最小權限原則和使用絕對路徑的要求。

謹慎授予ALL權限和NOPASSWD選項。

通過合理配置/etc/sudoers,可以極大地增強Linux系統的安全性、可管理性和審計能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87251.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87251.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87251.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Postgresql通過pgpool進行高可用部署主從,災備(單機版)

1、bitnami/postgresql-repmgr:15 (鏡像名) Bitnami 的 PostgreSQL-Repmgr 鏡像是一個預配置的 Docker 鏡像,集成了 PostgreSQL 數據庫和 repmgr(Replication Manager)工具,用于快速搭建高可用&#xff08…

Flink-1.19.0源碼詳解-番外補充3-StreamGraph圖

1.StreamGraph圖: StreamGraph是Flink流處理作業的第一個計算調度流圖,它是從用戶編寫的 DataStream API程序轉換而來的邏輯圖。StreamGraph由StreamNode與StreamEdge組成,StreamNode為記錄數據處理的節點,StreamEdge為連接兩個StreamNode的邊…

linux系統---Nginx反向代理與緩存功能

目錄 正向代理和反向代理 正向代理的作用 反向代理可實現的功能 反向代理客戶端ip透傳 1.初始訪問192.168.235.139 結果 2.編輯代理服務器的配置文件 3、重載nginx服務 4、訪問代理服務器 實現反向代理負載均衡 1.先啟用已用另一臺服務端 2.使用192.168.235.140 …

U+平臺配置免密登錄、安裝Hadoop配置集群、Spark配置

文章目錄 1、免密登錄2、安裝hadoop3、Spark配置 具體詳細報告見資源部分,全部實驗內容已經上傳,如有需要請自行下載。 1、免密登錄 使用的配置命令: cd ~/.ssh/ssh-keygen -t rsaEnter鍵回車y回車回車出現如上所示 cat ./id_rsa.pub >…

GitHub vs GitLab 全面對比報告(2025版)

從技術架構到金融估值,深度解析兩大代碼托管平臺的差異化競爭策略 一、技術架構對比 維度GitHub (Microsoft旗下)GitLab (獨立上市公司)關鍵差異核心架構- 分布式Git倉庫 Issues/Projects- 全棧DevSecOps平臺GitLab集成CI/CD、安全、監控部署模式- SaaS為主 - Git…

Python 數據分析與可視化 Day 14 - 建模復盤 + 多模型評估對比(邏輯回歸 vs 決策樹)

? 今日目標 回顧整個本周數據分析 & 建模流程學會訓練第二種模型:決策樹(Decision Tree)掌握多模型對比評估的方法與實踐輸出綜合對比報告:準確率、精確率、召回率、F1 等指標為后續模型調優與擴展打下基礎 🪜 一…

本周大模型新動向:KV緩存混合精度量化、個體時空行為生成、個性化問答

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入! 01 KVmix: Gradient-Based Layer Importance-Aware Mixed-Precision Quantization for KV Cache 大型語言模型(LLMs)在推理過程中,鍵值(KV)緩存的高內…

在 Spring Boot 中使用 WebMvcConfigurer

WebMvcConfigurer 是 Spring MVC 提供的一個擴展接口,用于配置 Spring MVC 的各種功能。在 Spring Boot 應用中,通過實現 WebMvcConfigurer 接口,可以定制和擴展默認的 Spring MVC 配置。以下是對 WebMvcConfigurer 的詳細解析及其常見用法。…

w-筆記:uni-app的H5平臺和非H5平臺的拍照識別功能:

uni-app的H5平臺和非H5平臺的拍照識別功能&#xff1a; <template><view class"humanVehicleBinding"><view v-if"warn" class"shadow"></view><view class"header"><uni-nav-bar left-icon"l…

TCP 半連接隊列和全連接隊列(結合 Linux 2.6.32 內核源碼分析)

文章目錄 一、什么是 TCP 半連接隊列和全連接隊列二、TCP 全連接隊列1、如何查看進程的 TCP 全連接隊列大小&#xff1f;注意 2、TCP 全連接隊列溢出問題注意 3、TCP 全連接隊列最大長度 三、TCP 半連接隊列1、TCP 半連接隊列溢出問題2、TCP 半連接隊列最大長度3、引申問題 一、…

linux下fabric環境搭建

參考教程&#xff1a; https://devpress.csdn.net/cloudnative/66d58e702045de334a569db3.html?dp_tokeneyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MjA2MzY4NywiZXhwIjoxNzQwMzY4MDc0LCJpYXQiOjE3Mzk3NjMyNzQsInVzZXJuYW1lIjoiaHVhbmd0dXBpIn0.oh8e4F6Sw_A4SV2ODQ5W0pYK0…

Redis Pipeline介紹:提高操作Redis數據庫的執行效率

Redis Pipeline是一種用于提高Redis執行效率的技術&#xff0c;通過減少客戶端與服務器之間的通信開銷&#xff0c;顯著提升批量操作的性能。本文將詳細介紹Redis Pipeline的概念、使用場景、實現方式及其優勢。 一、Redis Pipeline的概念 Redis Pipeline是一種批處理機制&am…

linux長時間鎖屏無法喚醒

是的&#xff0c;您這么理解很直接&#xff0c;抓住了要點。 簡單來說&#xff0c;就是這樣&#xff1a; 電腦睡覺有兩種方式&#xff1a; 打個盹&#xff08;掛起/Suspend&#xff09;&#xff1a; 把工作狀態保存在內存里。這個一般和 Swap 分區沒關系。睡死過去&#xff…

STM32F103_Bootloader程序開發11 - 實現 App 安全跳轉至 Bootloader

導言 想象一下&#xff0c;我們的單片機 App 正在穩定地運行著&#xff0c;突然我們想給它升級一下&#xff0c;添加個新功能。我們該如何安全地通知它&#xff1a;“嘿&#xff0c;準備好接收新固件了” ? 這就需要 App 和 Bootloader 之間建立一個可靠的"秘密握手"…

Explain解釋

參考官方文檔&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/explain-output.html explain關鍵字可以分析你的查詢語句的結構和性能。 explain select查詢&#xff0c; 執行會返回執行計劃的信息。 注意&#xff1a;如果from中有子查詢&#xff0c;仍然會執行該子查詢…

選擇 PDF 轉 HTML 轉換器的 5 個關鍵特性

市面上有很多 PDF 轉 HTML 的轉換器&#xff0c;每一款產品都有不同的功能組合。要理清并理解每個功能可能會讓人感到困惑。那么&#xff0c;真正重要的是什么呢&#xff1f; 這篇文章將介紹我們認為在選擇最佳 PDF 轉 HTML 轉換器時最重要的 5 個關鍵特性&#xff1a; 1. 轉換…

使用堡塔在服務器上部署寶塔面板-linux版

使用堡塔在服務器上部署寶塔面板-linux版 使用堡塔多機管理登錄服務器 進入寶塔官網&#xff0c;獲取安裝腳本 wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh ed8484bec3. 在堡塔多機管理中&#xff0c;…

【Unity高級】Unity多界面游戲場景管理方案詳解

引言&#xff1a;游戲界面管理的挑戰 在Unity游戲開發中&#xff0c;尤其是包含多個功能界面&#xff08;如主菜單、關卡選擇、游戲頁面、設置和商城&#xff09;的游戲&#xff0c;如何高效管理場景與界面是架構設計的核心挑戰。本文將深入探討三種主流實現方案&#xff1a;單…

WINDOWS最快布署WEB服務器:apache2

安裝JDK下載 https://tomcat.apache.org/ Index of /dist/tomcat/tomcat-9 安裝測試 http://localhost:8080/ 替換自己的文件 把自己的文件復制到&#xff1a; C:\Program Files\Apache Software Foundation\Tomcat 9.0\webapps\ROOT

Microsoft Edge 打開無反應、打開后顯示兼容性問題、卸載重裝 解決方案。一鍵卸載Microsoft Edge 。

背景&#xff1a;網絡上的瀏覽器修復、重裝、恢復默認應用測試后無用&#xff0c;以下卸載重裝方案經實測可以正常使用Microsoft Edg。 卸載軟件在資源里&#xff0c;請自取。 一、卸載軟件&#xff1a;Remove-Edge_GUI.exe 雙擊卸載等待即可。 二、在微軟商店重新安裝Micro…