跳至主要内容

clmBot 執行權限要求

clmBot 在執行證書自動更新時,需要對目標證書檔案進行讀寫,並在更新後重載或重啟對應的中介軟體服務。本文說明各類中介軟體場景下推薦的最小權限配置。

說明

中介軟體 reload / restart 命令定義在 config.yamlservers[].after_script 欄位中,使用者可根據實際環境自行調整。clmBot 不要求以 rootAdministrator 等高權限帳號長期執行。


最小權限原則

推薦使用專用系統帳號(如 clmbot)執行 clmBot,並遵循以下原則:

  • 只授予該帳號讀取 clmBot 設定、日誌目錄和目標證書安裝點所需的權限。
  • 只對 clmBot 管理的證書檔案、私鑰檔案及其所在目錄授予寫入權限。
  • 只允許執行確認過的中介軟體 reload / restart 命令,不授予 NOPASSWD: ALL 或完整 root 權限。
  • before_scriptafter_script 必須經過人工審計,指令碼裡需要的權限應逐條授權。

不推薦做法:

  • 讓 clmBot 長期以 rootAdministrator 身分執行。
  • 將中介軟體設定目錄、憑證目錄或系統服務控制權限整體開放給 clmBot。
  • 授予 bashpowershell.exesystemctl 不受限制的執行權限。

各中介軟體權限要求

nginx

clmBot 需要以下權限:

  1. 憑證目錄讀寫權限:對目標憑證檔案(.crt)、CA 鏈檔案(選用)和私鑰檔案(.key)所在目錄具有讀寫權限,以便寫入新憑證並建立 .bak 備份。
  2. 執行 reload 指令after_script 預設會產生以下指令碼,用於在憑證更新後重載 nginx:
nginx -t && nginx -s reload

最小授權建議:

  • 僅開放目標證書目錄,不要授予整個 /etc/nginx 讀寫權限。
  • 透過 sudoers 精確授權 nginx -tnginx -s reload,不要授予完整 root shell。

Apache HTTP Server

clmBot 需要以下權限:

  1. 證書目錄讀寫權限:對 SSLCertificateFileSSLCertificateChainFileSSLCertificateKeyFile 所在目錄具有讀寫權限。
  2. 執行服務重啟命令after_script 預設會產生以下其中一個指令碼(取決於發行版):
systemctl restart httpd.service
systemctl restart apache2.service

最小授權建議:

  • 僅開放目標證書目錄,不授予整個 Apache 設定目錄權限。
  • 透過 sudoers 僅針對目前系統實際使用的 Apache 服務名稱授予 restart 權限。

Tomcat

clmBot 需要以下權限:

  1. 證書目錄讀寫權限:對 PEM 證書/私密金鑰檔案或 JKS keystore 檔案所在目錄具備讀寫權限。
  2. 執行停止與啟動指令碼after_script 預設會產生以下指令碼:
export JAVA_HOME="<java_home>" && "<catalina_base>/bin/shutdown.sh" && "<catalina_base>/bin/startup.sh"

最小授權建議:

  • 優先讓 clmBot 與 Tomcat 使用同一業務組,只授予目標 keystore 或證書目錄讀寫權限。
  • 只允許執行對應 Tomcat 實例的 shutdown.shstartup.sh,不授予整個 /opt 目錄權限。
  • 多實例 Tomcat 環境應按實例拆分授權。

IIS

IIS 場景依賴 Windows PowerShell 指令碼匯入 PFX 並更新 HTTPS 繫結,需要管理員權限

clmBot 需要以下權限:

  1. 管理員帳號執行:執行 powershell.exe -NoProfile -ExecutionPolicy Bypass 匯入臨時 PFX 並更新 IIS 站台繫結。
  2. 證書目錄讀寫權限:臨時 PFX 檔案的建立和清理。

最小授權建議:

  • 使用專用 Windows 服務帳號,只授予管理目標 IIS 站台繫結所需的權限。
  • PowerShell 執行原則和模組權限應依主機安全基準單獨稽核。

Linux sudoers 配置範例

以下範例僅表達授權粒度,實際路徑請依目標主機調整。

nginx:

clmbot ALL=(root) NOPASSWD: /usr/sbin/nginx -t
clmbot ALL=(root) NOPASSWD: /usr/sbin/nginx -s reload

Apache:

clmbot ALL=(root) NOPASSWD: /bin/systemctl restart apache2.service

Tomcat:

clmbot ALL=(tomcat) NOPASSWD: /opt/apache-tomcat/bin/shutdown.sh
clmbot ALL=(tomcat) NOPASSWD: /opt/apache-tomcat/bin/startup.sh

證書目錄權限範例:

chown -R root:clmbot /etc/ssl/example
chmod 0750 /etc/ssl/example
chmod 0640 /etc/ssl/example/site.crt /etc/ssl/example/ca.crt
chmod 0640 /etc/ssl/example/site.key

如需允許 clmBot 寫入和備份上述檔案,可使用 ACL 進行精確授權:

setfacl -m u:clmbot:rwx /etc/ssl/example
setfacl -m u:clmbot:rw- /etc/ssl/example/site.crt
setfacl -m u:clmbot:rw- /etc/ssl/example/ca.crt
setfacl -m u:clmbot:rw- /etc/ssl/example/site.key

上線前權限核對表

提示

部署 clmBot 前,建議逐項確認以下權限配置。

  • clmBot 是否使用專用帳號執行,而非 root 或管理員。
  • config.yaml 是否僅允許必要帳號讀取和寫入。
  • 每個 servers[].format 指向的憑證檔案是否只開放必要讀寫權限。
  • 憑證檔案所在目錄是否允許建立和清理 .bak 備份檔案。
  • before_scriptafter_script 是否已經人工稽核。
  • sudoers 是否僅包含精確命令,而非 ALLbash 或完整 systemctl
  • nginx / Apache / Tomcat 的 reload 或 restart 權限是否僅覆蓋目標執行個體。
  • 服務模式(clm-bot server)的監聽位址和連接埠是否符合主機防火牆原則。