clmBot 執行權限要求
clmBot 在執行證書自動更新時,需要對目標證書檔案進行讀寫,並在更新後重載或重啟對應的中介軟體服務。本文說明各類中介軟體情境下推薦的最低權限配置。
說明
中介軟體 reload / restart 命令定義在 config.yaml 的 servers[].after_script 欄位中,使用者可依實際環境自行調整。clmBot 不要求以 root 或 Administrator 等高權限帳號長期執行。
最小權限原則
建議使用專用系統帳號(如 clmbot)執行 clmBot,並遵循以下原則:
- 僅授予該帳號讀取 clmBot 設定、日誌目錄和目標證書安裝點所需的權限。
- 僅對 clmBot 管理的證書檔案、私鑰檔案及其所在目錄授予寫入權限。
- 僅允許執行確認過的中介軟體 reload / restart 命令,不授予
NOPASSWD: ALL或完整 root 權限。 before_script、after_script必須經過人工稽核,腳本裡需要的權限應逐條授權。
不建議做法:
- 讓 clmBot 長期以
root或Administrator身分運行。 - 將中介軟體配置目錄、證書目錄或系統服務控制權限整體開放給 clmBot。
- 給
bash、powershell.exe、systemctl授予無限制執行權限。
各中介軟體權限要求
nginx
clmBot 需要以下權限:
- 證書目錄讀寫權限:對目標證書檔案(
.crt)、CA 鏈檔案(可選)和私鑰檔案(.key)所在目錄具有讀寫權限,以便寫入新證書並建立.bak備份。 - 執行 reload 命令:
after_script預設產生以下指令碼,用於在證書更新後重新載入 nginx:
nginx -t && nginx -s reload
最小授權建議:
- 只開放目標證書目錄,不授予整個
/etc/nginx讀寫權限。 - 透過 sudoers 精確授權
nginx -t和nginx -s reload,不授予完整 root shell。
Apache HTTP Server
clmBot 需要以下權限:
- 證書目錄讀寫權限:對
SSLCertificateFile、SSLCertificateChainFile、SSLCertificateKeyFile所在目錄具有讀寫權限。 - 執行服務重啟命令:
after_script預設生成以下腳本之一(取決於發行版):
systemctl restart httpd.service
systemctl restart apache2.service
最小授權建議:
- 只開放目標證書目錄,不授予整個 Apache 配置目錄。
- 透過 sudoers 只對當前系統實際使用的 Apache 服務名授予
restart權限。
Tomcat
clmBot 需要以下權限:
- 證書目錄讀寫權限:對 PEM 證書/私鑰檔案或 JKS keystore 檔案所在目錄具有讀寫權限。
- 執行停止和啟動腳本:
after_script預設生成以下腳本:
export JAVA_HOME="<java_home>" && "<catalina_base>/bin/shutdown.sh" && "<catalina_base>/bin/startup.sh"
最小授權建議:
- 優先讓 clmBot 與 Tomcat 使用同一業務組,只授予目標 keystore 或證書目錄讀寫權限。
- 只允許執行對應 Tomcat 實例的
shutdown.sh和startup.sh,不授予整個/opt目錄權限。 - 多實例 Tomcat 環境應按實例拆分授權。
IIS
IIS 場景依賴 Windows PowerShell 指令碼匯入 PFX 並更新 HTTPS 繫結,需要管理員權限。
clmBot 需要以下權限:
- 管理員帳號執行:執行
powershell.exe -NoProfile -ExecutionPolicy Bypass匯入臨時 PFX 並更新 IIS 站點繫結。 - 證書目錄讀寫權限:臨時 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_script、after_script是否已經人工稽核。- sudoers 是否僅包含精確命令,而非
ALL、bash或完整systemctl。 - nginx / Apache / Tomcat 的 reload 或 restart 權限是否僅覆蓋目標實例。
- 服務模式(
clm-bot server)監聽位址和連接埠是否符合主機防火牆策略。