萬盛學電腦網

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

Linux sudo 權限精細配置:visudo 編輯 /etc/sudoers 實現特定用戶免密執行指定命令

核心原則

`sudo` 預設授予完整 root 權限,生產環境應遵循**最小權限原則**:僅允許特定用戶/組執行特定命令,且**免密僅限極少數自動化腳本/監控項目**。

sudo 配置示意

標準配置流程

  1. 唯一安全編輯方式:
    `sudo visudo` — **嚴禁直接 `vim /etc/sudoers`**,`visudo` 提供語法檢查、鎖定防衝突、儲存前驗證。
  2. 授權用戶 kk 使用 sudo:
    在 `User privilege specification` 區域新增:
    `kk ALL=(ALL:ALL) ALL` — 允許 kk 以任何身分執行任何命令 (需輸入密碼)。
  3. 允許 kk 免密執行特定命令 (如掛載網路磁碟):
    `kk ALL=(ALL) NOPASSWD: /sbin/mount.cifs`
    — 僅限 `mount.cifs` 免密,**路徑必須為絕對路徑**,建議用 `which mount.cifs` 確認。

進階語法範例

# 用戶別名
User_Alias ADMINS = alice, bob, charlie

# 命令別名 (僅限系統管理命令)
Cmnd_Alias STORAGE = /sbin/mount, /sbin/umount, /sbin/mount.cifs, /sbin/mount.nfs
Cmnd_Alias NETWORK = /sbin/ifconfig, /sbin/ip, /usr/bin/ss, /usr/bin/nmap
Cmnd_Alias SERVICE = /bin/systemctl, /usr/sbin/service

# 組授權 (輪到組名加 %)
%operators ALL=(ALL) NOPASSWD: STORAGE
%netadmins ALL=(ALL) NETWORK
%devops ALL=(ALL) SERVICE

# 主機別名 (多機器共用 sudoers 時)
Host_Alias WEBSRV = web01, web02, web03
ADMINS WEBSRV = (root) NOPASSWD: /usr/bin/systemctl restart nginx

關鍵安全設定 (建議全開)

Defaults        env_reset                 # 重置環境變數
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"  # 固定 PATH 防劫持
Defaults        timestamp_timeout=15      # 密碼快取 15 分鐘 (預設 5 分鐘,可依政策調整)
Defaults        logfile="/var/log/sudo.log"  # 獨立審計日誌
Defaults        log_input, log_output     # 記錄完整輸入/輸出 (高安全環境)
Defaults        requiretty                # 強制需 tty (防 CGI/腳本濫用,可能影響自動化)
Defaults        !lecture                  # 關閉每次講話 (可選)
Defaults        lecture_file="/etc/sudo_lecture"  # 自定義警告訊息

驗證與除錯

  • `sudo -l`:列出當前用戶可執行的 sudo 命令。
  • `sudo -l -U kk`:以 root 查看指定用戶權限。
  • `visudo -c`:僅檢查語法不儲存。

常見錯誤

  • 直接編輯 `/etc/sudoers` 導致語法錯誤鎖死 sudo → 需單用戶模式/啟動修復模式掛載根分區修復。
  • 使用相對路徑/通配符 (`/sbin/mount*`) → **嚴禁**,必須絕對路徑精確到執行檔。
  • 將 `NOPASSWD: ALL` 給予普通用戶 → **等同無密碼 root,極高風險**。

精細配置 sudo 者,方能在便利與安全間取得平衡,構建可審計、可控制的特權存取體系。

copyright © 萬盛學電腦網 all rights reserved