萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux sudo 提權完整指南:原理、sudoers 設定、最佳實務與安全強化

sudo (superuser do) 讓一般使用者以提升權限執行特定命令,是 Linux 系統管理的核心授權機制。本文深入解析 sudo 運作原理、/etc/sudoers 設定語法、visudo 安全編輯、常用選項 (-b, -s, sudo su -) 與安全強化建議。

sudo 權限提示

為何需要 sudo?

  • 最小權限原則:日常操作用一般帳號,僅在需要時提權。
  • 審計追蹤:/var/log/secure 或 /var/log/auth.log 記錄誰、何時、執行什麼指令。
  • 避免共用 root 密碼:每人用自己的密碼驗證,人員異動只需修改 sudoers。
  • 細粒度控制:可限制特定使用者/群組僅能執行特定命令。

sudoers 設定檔 (/etc/sudoers)

核心語法

使用者/群組  主機=(切換身分)  命令清單
# 範例:
user1  ALL=(ALL) ALL                    # user1 可在任何主機以任何身分執行任何命令
%wheel  ALL=(ALL) ALL                   # wheel 群組成員享有完整 sudo 權限
user2  ALL=(root) /bin/systemctl restart httpd  # 僅能以 root 重啟 httpd
user3  ALL=(ALL) NOPASSWD: /bin/cat /var/log/*  # 免密碼讀取日誌

安全編輯:visudo

visudo
# 1. 鎖定檔案防止並發編輯
# 2. 使用 vi/vim 編輯
# 3. 存檔時自動語法檢查,錯誤則拒絕存檔

切勿直接用 vim /etc/sudoers,語法錯誤會導致所有 sudo 失效,需單人模式修復。

常用選項

選項說明
-b背景執行 (適合長時間輸出命令)
-s啟動提權 Shell (提示符變 #,輸入 exit 返回)
sudo su -切換為 root 並載入 root 環境變數 (慎用)
-u user以指定使用者身分執行 (非 root)
-g group以指定群組身分執行
-k使時間戳失效,下次需重新輸入密碼
-v延長時間戳效期 (預設 15 分鐘)
-l列出當前使用者可執行的 sudo 命令

時間戳機制

首次 sudo 需輸入密碼,成功後建立時間戳 (/var/run/sudo/ts/),預設 15 分鐘內免再輸入。sudo -k 可立即失效,sudo -v 可延長。

安全強化建議

  1. 預設拒絕:僅授予必要命令,避免 ALL。
  2. 使用群組管理:%wheel ALL=(ALL) ALL,用戶加入 wheel 群組即獲權限。
  3. 關鍵命令免密謹慎:NOPASSWD 僅限唯讀/低風險操作 (如讀取日誌)。
  4. 記錄完整命令:確保 Defaults logfile=/var/log/sudo.log 或 syslog 記錄。
  5. 限制環境變數:Defaults env_reset、Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。
  6. 要求 tty:Defaults requiretty (防止腳本/遠程無終端竄改),但會影響自動化部署,視環境權衡。

疑難排解

  • user NOT in sudoers file → 編輯 sudoers 加入該用戶/群組。
  • sudo: parse error in /etc/sudoers near line N → 語法錯誤,進入單人模式用 visudo 修正。
  • sudo: no tty present and no askpass program specified → 關閉 requiretty 或設定 SUDO_ASKPASS。

小結

sudo 是 Linux 權限管理的基石。善用 visudo 安全編輯、群組授權、命令白名單、審計日誌與環境變數隔離,即能在便利性與安全性間取得平衡。切記:「權力越大,責任越大」,每一條 sudo 規則都應經過審慎評估。

copyright © 萬盛學電腦網 all rights reserved