)
1. Linux 用戶管理與 sudo 提權全景速覽這次我們來看 Linux 運維里最繞不開的一塊基礎能力用戶管理和 sudo 提權。很多剛接觸服務器的朋友第一步不是裝軟件而是要學會怎么建用戶、怎么給人授權、怎么讓普通用戶安全地執(zhí)行管理員命令。這兩個能力如果掌握得不扎實后面做腳本、做自動化、做多用戶服務器管理都會時不時卡一下。用戶管理的核心不是useradd和passwd這兩個命令本身而是理解 Linux 系統(tǒng)如何區(qū)分用戶身份、如何管理用戶組、如何通過權限模型控制文件和進程的訪問。而 sudo 提權核心也不只是“往 sudoers 里加一行”而是搞清楚提權策略、命令白名單、環(huán)境變量繼承、日志審計這些細節(jié)。本文會從以下角度展開Linux 用戶管理相關命令和配置文件。用戶、用戶組的增刪改查。sudo 提權的作用機制。sudoers 配置文件的實際寫法。從建用戶到授權的完整實戰(zhàn)案例。常見提權問題和排查思路。運維場景下的安全建議。適合的讀者剛接觸 Linux 服務器的新人、準備 Linux 面試的求職者、需要管理多用戶服務器的運維人員。這篇文章不涉及發(fā)行版之間的深層差異以通用 Linux 命令和行為為主。2. 適用場景與使用邊界Linux 用戶管理適合的場景集中在多用戶服務器、開發(fā)測試環(huán)境、生產(chǎn)環(huán)境權限隔離這幾類。多人共用一臺服務器需要給每個同事獨立賬號。需要限制不同人員能執(zhí)行的命令范圍。需要審計誰在什么時候使用了管理員權限。需要給自動化腳本創(chuàng)建專用運行賬號。需要臨時授權某個用戶執(zhí)行特定管理命令。sudo 提權適合的場景則更明確普通用戶臨時獲得 root 權限執(zhí)行管理命令但不需要把 root 密碼告訴所有人。這是生產(chǎn)環(huán)境最常見的提權方案比直接切換到 root 更安全、更可控、更可追蹤。使用邊界同樣要講清楚。不要把 sudo 授權范圍放得太寬比如sudo ALL(ALL:ALL) ALL等同于給用戶完整 root 權限這適合測試環(huán)境不適合生產(chǎn)環(huán)境。不建議直接修改/etc/sudoers文件而不做語法校驗。不要在配置里寫死所有命令白名單后就不做審計。用戶管理操作盡量用低權限賬號配合 sudo 完成不要日常使用 root 登錄操作。如果涉及敏感數(shù)據(jù)和關鍵服務建議結合日志審計和堡壘機方案一起做。3. 環(huán)境準備與前置條件用戶管理和 sudo 提權不需要額外安裝重型依賴系統(tǒng)自帶工具就夠用。但為了操作安全建議先確認以下內(nèi)容。3.1 確認當前用戶身份id輸出會包含當前用戶名、UID、GID 和所屬組。這一步很重要因為后續(xù)創(chuàng)建用戶、修改權限時要確認自己有足夠權限。3.2 確認系統(tǒng)發(fā)行版和版本cat /etc/os-release用戶管理相關命令在主流發(fā)行版上行為基本一致但個別發(fā)行版可能有細微差異。例如Debian 系默認用戶創(chuàng)建時會自動創(chuàng)建 home 目錄和用戶組需要單獨確認。3.3 確認 sudo 是否已安裝sudo --version如果提示沒有 sudo需要先用 root 身份安裝。Debian/Ubuntu 系執(zhí)行apt update apt install -y sudoCentOS/RHEL 系執(zhí)行yum install -y sudo3.4 準備一個測試環(huán)境建議在虛擬機或臨時云服務器上進行操作測試不要直接在重要生產(chǎn)環(huán)境練習??梢詼蕚湟慌_ 2 核 4G 的虛擬機磁盤 20G 以上即可對硬件沒有特別要求。4. Linux 用戶管理核心命令4.1 創(chuàng)建用戶創(chuàng)建用戶的命令是useradd但不同發(fā)行版初始行為不一樣。更推薦的做法是結合參數(shù)明確指定配置。# 創(chuàng)建用戶同時創(chuàng)建 home 目錄、指定 shell useradd -m -s /bin/bash zhangsan參數(shù)說明-m自動創(chuàng)建 home 目錄。-s指定登錄 shell。-d指定 home 目錄路徑默認是/home/用戶名。-G指定附加組可以同時加多個組用逗號分隔。-u指定 UID。-c添加備注信息。創(chuàng)建后立即設置密碼passwd zhangsan執(zhí)行后會提示輸入兩次密碼。如果密碼太短或太簡單系統(tǒng)會給出警告但依然可以設置成功運維場景建議使用足夠強度的密碼。4.2 查看用戶信息# 查看用戶 ID 信息 id zhangsan # 查看用戶 passwd 文件條目 grep zhangsan /etc/passwd # 查看用戶組文件條目 grep zhangsan /etc/group/etc/passwd每一行的格式是用戶名:x:UID:GID:備注:home目錄:登錄shell密碼字段顯示為x真正的密碼哈希存儲在/etc/shadow普通用戶無法讀取。這一點在面試中經(jīng)常被問到。4.3 修改用戶信息修改用戶使用usermod命令。# 將 zhangsan 添加進 docker 組 usermod -aG docker zhangsan # 修改用戶的 shell usermod -s /bin/zsh zhangsan # 鎖定用戶禁止登錄 usermod -L zhangsan # 解鎖用戶 usermod -U zhangsan注意-aG和-G的區(qū)別-aG是追加組不會移除用戶已有的附加組-G會覆蓋附加組列表。實際操作中追加組時盡量用-aG避免誤刪用戶權限。4.4 刪除用戶# 刪除用戶同時刪除 home 目錄和郵件池 userdel -r zhangsan如果不加-rhome 目錄會殘留需要手動清理。刪除用戶前建議確認該用戶沒有正在運行的進程ps -u zhangsan如有進程先處理進程或使用pkill -u zhangsan終止。強制刪除用戶命令是userdel -rf但仍不建議在系統(tǒng)關鍵用戶上操作。4.5 用戶組管理用戶組的作用是批量分配權限。相關命令# 創(chuàng)建組 groupadd devops # 修改組名 groupmod -n devteam devops # 刪除組 groupdel devteam查看用戶所屬組groups zhangsan常用操作場景是需要讓一批人擁有同一組文件訪問權限時把用戶追加到同一用戶組再設置目錄的用戶組權限。# 把用戶加入組之后需要重新登錄才生效 usermod -aG devteam zhangsan4.6 切換用戶# 切換到 zhangsan 用戶 su - zhangsan # 以 zhangsan 身份執(zhí)行單條命令 su - zhangsan -c whoamisu -會重新加載目標用戶的環(huán)境變量而su zhangsan不會。區(qū)分這兩者也是面試中常見考點。5. sudo 提權機制詳解sudo 的工作機制可以概括為一個普通用戶被授權后可以以 root 或其他用戶身份執(zhí)行命令同時系統(tǒng)會記錄日志。這種機制比su切到 root 更安全因為不需要共享 root 密碼并且可以精確控制能執(zhí)行什么命令不能執(zhí)行什么命令。5.1 sudo 與 su 的區(qū)別對比項susudo密碼要求目標用戶密碼通常為 root 密碼當前用戶密碼權限控制切換到目標用戶后擁有其全部權限可精細控制命令白名單命令審計默認無審計日志記錄到 /var/log/auth.log 或 journal適用場景臨時切換身份需要審計的管理操作從安全角度出發(fā)生產(chǎn)環(huán)境推薦優(yōu)先使用 sudo避免多人知道 root 密碼。5.2 sudo 執(zhí)行流程當用戶輸入sudo command時系統(tǒng)執(zhí)行以下流程檢查用戶是否存在于/etc/sudoers或/etc/sudoers.d/的配置中。驗證用戶密碼。檢查命令是否在允許執(zhí)行的命令列表內(nèi)。檢查命令參數(shù)是否匹配。通過后以指定用戶身份執(zhí)行命令。將執(zhí)行記錄寫入日志。配置在/etc/sudoers文件中的規(guī)則會在驗證階段生效。所以修改 sudoers 后如果語法錯誤登錄用戶可能無法再使用 sudo這也是為什么強烈建議使用visudo代替直接編輯。6. sudoers 配置文件精講sudoers 文件位于/etc/sudoers同時支持/etc/sudoers.d/目錄下的獨立配置文件。這為分模塊管理提供了便利。6.1 使用 visudo 編輯直接編輯/etc/sudoers可能在校驗前就引入錯誤導致普通用戶無法提權。正確方式是使用visudosudo visudo該命令會在保存前做語法檢查。如果語法錯誤會提示是否強制保存。visudo還可以編輯/etc/sudoers.d/下的文件sudo visudo -f /etc/sudoers.d/zhangsan建議將自定義授權規(guī)則放在/etc/sudoers.d/下避免與默認配置混淆也方便管理和備份。6.2 sudoers 基本語法格式sudoers 規(guī)則的基本格式為授權對象 主機名 (以誰的身份運行) 命令列表例如zhangsan ALL(ALL:ALL) ALL含義是用戶 zhangsan 可以在所有主機上以所有用戶身份執(zhí)行所有命令。這等同于給用戶完整 root 權限。實際場景很少直接這么配。更常見的做法是限制命令范圍zhangsan ALL(ALL:ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx這樣 zhangsan 只能重啟和查看 nginx 服務不能隨意執(zhí)行其他管理員命令。6.3 命令別名配置當需要授權多個命令時可通過 Cmnd_Alias 定義命令別名Cmnd_Alias SERVICE_MANAGE /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx zhangsan ALL(ALL:ALL) SERVICE_MANAGE這種寫法的好處是一處定義、多處復用適合規(guī)則較多的場景。6.4 免密碼執(zhí)行某些自動化場景不希望每次執(zhí)行 sudo 都輸密碼可使用NOPASSWDzhangsan ALL(ALL:ALL) NOPASSWD: /usr/bin/systemctl restart nginx該配置只在指定命令上跳過密碼驗證不建議對所有命令設置NOPASSWD: ALL否則存在嚴重安全風險。6.5 用戶組授權sudoers 同樣支持用戶組授權%devops ALL(ALL:ALL) /usr/bin/systemctl restart nginx%devops表示 devops 組內(nèi)的所有用戶都繼承該權限。這樣管理用戶組比逐個添加用戶更高效。6.6 限制 root 登錄與 sudo 使用在安全要求較高的環(huán)境中通常希望減少直接 root 登錄的使用同時保留 sudo 能力??刹扇∫韵麓胧┬薷?etc/ssh/sshd_config中PermitRootLogin為no。給運維人員創(chuàng)建普通用戶并授予 sudo 權限。使用密鑰登錄替代密碼登錄。修改后需要重啟 sshd 服務sudo systemctl restart sshd需要注意的是修改前要確保自己有其他登錄通道否則可能把自己鎖在服務器外面。7. 實戰(zhàn)場景從創(chuàng)建用戶到授予 sudo 權限下面用一個完整案例演示從零開始管理用戶和授權。7.1 場景需求假設服務器上有兩個運維人員需要管理 nginx 服務但不能直接 root 登錄也不能執(zhí)行其他管理命令?,F(xiàn)在需要完成以下操作創(chuàng)建兩個普通用戶。設置強密碼。讓兩個用戶都能執(zhí)行 nginx 服務的 status、reload、restart 命令。記錄操作日志。7.2 創(chuàng)建用戶先創(chuàng)建一個運維組sudo groupadd ops再創(chuàng)建用戶并加入組sudo useradd -m -s /bin/bash alice sudo useradd -m -s /bin/bash bob sudo usermod -aG ops alice sudo usermod -aG ops bob設置密碼sudo passwd alice sudo passwd bob7.3 配置 sudoers新建文件/etc/sudoers.d/ops-nginxsudo visudo -f /etc/sudoers.d/ops-nginx寫入Cmnd_Alias NGINX_MANAGE /usr/bin/systemctl status nginx, /usr/bin/systemctl reload nginx, /usr/bin/systemctl restart nginx %ops ALL(ALL:ALL) NGINX_MANAGE保存并退出。visudo會自動檢查語法出現(xiàn)錯誤時會提示。7.4 驗證權限切換為 alice 用戶su - alice執(zhí)行授權范圍內(nèi)命令sudo systemctl status nginx應該能夠直接查看 nginx 狀態(tài)。再嘗試一個未被授權的命令sudo systemctl stop nginx系統(tǒng)應該提示 alice 無權執(zhí)行該命令。這說明命令白名單已經(jīng)生效。7.5 驗證日志審計在另一終端查看日志sudo journalctl -u sudo --since today或者查看系統(tǒng)日志sudo grep alice /var/log/auth.log | tail -20日志中會記錄用戶、執(zhí)行時間、執(zhí)行的命令和終端信息。這一步對于事后審計非常關鍵。8. 權限提升的常見問題與排查問題現(xiàn)象可能原因排查方式解決方案sudo 提示用戶不在 sudoers 中用戶未加入 sudo 組或未配置 sudoers用 root 登錄執(zhí)行id 用戶名查看組將用戶加入對應組或編寫 sudoers 規(guī)則sudo 輸入正確密碼仍失敗用戶未配置密碼或密碼過期以 root 執(zhí)行passwd -S 用戶名重置密碼sudo 執(zhí)行命令提示命令不存在命令路徑不在 sudoers 白名單內(nèi)用which 命令查看實際路徑更新 sudoers 規(guī)則為完整路徑visudo 保存時報語法錯誤配置格式錯誤查看錯誤提示行號根據(jù)提示內(nèi)容修正后重新保存用戶加入組后 sudo 權限不生效當前會話環(huán)境未重新加載執(zhí)行id確認當前會話組重新登錄或使用su - 用戶名sudo 命令受 secure_path 影響環(huán)境變量路徑不同執(zhí)行sudo env查看 PATH在 sudoers 中設置secure_path或使用絕對路徑批量創(chuàng)建用戶時密碼一致腳本中密碼處理不當檢查腳本邏輯使用循環(huán)加隨機密碼并記錄到安全位置排查 sudo 問題的一般步驟是先確認用戶身份和組關系。檢查 sudoers 配置是否包含該用戶規(guī)則。確認命令是否為絕對路徑。查看/var/log/auth.log或journalctl日志。確認 NOPASSWD 配置是否生效。檢查是否存在多個 sudoers 文件造成的配置覆蓋。9. 最佳實踐與安全建議用戶管理和 sudo 提權雖然基礎但安全影響很大。這里給出工程化建議。9.1 最小權限原則授權時只給完成任務所需的最少權限。例如只需要重啟 nginx 服務就只授權 systemctl restart nginx不要順手授權systemctl stop或rm。白名單命令越短事故范圍越小。9.2 用戶生命周期管理員工離職或賬號不再使用要及時鎖定或刪除賬號sudo usermod -L 用戶名 # 或刪除用戶及 home 目錄 sudo userdel -r 用戶名鎖定與刪除的選擇取決于業(yè)務需求。如果只是臨時停用鎖定期更合適如果確定不再使用推薦刪除。9.3 使用 sudoers.d 分模塊管理將不同用途的授權規(guī)則拆分為不同文件放在/etc/sudoers.d/下。例如/etc/sudoers.d/nginx-manage/etc/sudoers.d/docker-manage/etc/sudoers.d/deploy-users這樣便于按業(yè)務模塊審計和維護也降低了直接修改/etc/sudoers的風險。9.4 密碼策略與登錄限制生產(chǎn)環(huán)境建議開啟密碼復雜度校驗并配置 SSH 密鑰登錄。修改密碼策略時可關注以下幾個配置# /etc/login.defs PASS_MAX_DAYS 90 PASS_MIN_DAYS 10 PASS_WARN_AGE 7同時可在sshd_config中啟用密鑰登錄并考慮禁止 root 密碼登錄。修改前務必確保自己有其他登錄通道。9.5 日志與審計sudo 日志是安全審計的基礎數(shù)據(jù)。建議定期檢查/var/log/auth.log或 journal 日志。對高危命令如rm、reboot、userdel單獨關注。有條件的團隊可接入集中日志平臺。9.6 自動化腳本中的用戶管理批量創(chuàng)建用戶的腳本建議使用循環(huán)加隨機密碼而不是所有用戶共用同一個密碼。#!/bin/bash USER_LISTalice bob carol for user in $USER_LIST; do if id $user /dev/null; then echo [skip] user $user already exists else useradd -m -s /bin/bash $user random_pass$(openssl rand -base64 12) echo $user:$random_pass | chpasswd echo $user - $random_pass /tmp/user_info.txt fi done隨機密碼寫入文件后需要設置嚴格權限才能保留參考副本。生產(chǎn)環(huán)境更推薦通過堡壘機或自動化運維平臺創(chuàng)建和管理用戶。9.7 避免權限繼承帶來的風險sudo 執(zhí)行時會繼承當前用戶的部分環(huán)境變量。需要考慮在 sudoers 中設置secure_path來限制命令查找路徑Defaults secure_path/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin這樣可以降低惡意篡改 PATH 導致的提權風險。9.8 測試環(huán)境的 sudo 授權策略測試環(huán)境可以適當放寬權限但不建議使用NOPASSWD: ALL。比較穩(wěn)妥的做法是保留密碼驗證同時給一個較長的 sudo 免密緩存時間。10. 總結與下一步Linux 用戶管理和 sudo 提權是運維工作里最基礎但同樣最關鍵的環(huán)節(jié)。基礎之處在于命令簡單、流程固定關鍵之處在于一旦配置不當普通用戶就可能繞過權限限制或者管理員無法審計有人執(zhí)行了什么命令。這套知識的核心是三個文件加三個命令/etc/passwd用戶基本信息。/etc/group用戶組信息。/etc/sudoers和/etc/sudoers.d/提權規(guī)則。useradd、usermod、userdel用戶管理的三個主要操作命令。visudo安全的 sudoers 編輯入口。下一步建議你完成以下驗證在虛擬機中創(chuàng)建一個普通用戶。用該用戶執(zhí)行一條 sudo 命令。在 sudoers.d 中寫一條命令白名單。嘗試執(zhí)行白名單之外的命令確認被拒絕。查看日志確認記錄存在。這套流程跑通之后你對多用戶服務器權限管理的基本框架就有了。后面可以繼續(xù)深入學習 ACL 權限控制、PAM 認證、SELinux/AppArmor 策略以及不同發(fā)行版的配置差異。建議把 sudoers 的語法規(guī)則復制一份做筆記后續(xù)配置時直接參考。