執行權限要求
clmBot 執行證書自動更新時,需要對目標證書檔案進行讀寫,並在更新後重載或重啟對應的中介軟體服務。本文說明各類中介軟體場景下建議的最小權限配置。
資訊
中介軟體 reload / restart 命令定義在 config.yaml 的 servers[].after_script 欄位中,使用者可依實際環境自行調整。clmBot 不要求以 root 或 Administrator 等高權限帳號長期執行。
最小權限原則
建議使用專用系統帳號(如 clmbot)執行 clmBot:
- 只授予該帳號讀取 clmBot 設定、日誌目錄和目標憑證安裝點所需的權限。
- 只對 clmBot 管理的憑證檔案、私密金鑰檔案及其所在目錄授予寫入權限。
- 只允許執行確認過的中介軟體 reload / restart 命令,
before_script、after_script須經人工稽核後逐條授權。
不建議:
- 讓 clmBot 長期以
root或Administrator身分執行。 - 將中介軟體設定目錄、憑證目錄或系統服務控制權限整體開放給 clmBot。
- 授予
bash、powershell.exe、systemctl無限制執行權限或NOPASSWD: ALL。
各中介軟體權限需求
| 中介軟體 | 需要的權限 | after_script 範例 |
|---|---|---|
| nginx | 證書(.crt)、CA 鏈(可選)、私密金鑰(.key)檔案及所在目錄的讀寫權限,用於寫入新證書並建立 .bak 備份 | nginx -t && nginx -s reload |
| Apache | SSLCertificateFile、SSLCertificateChainFile、SSLCertificateKeyFile 所在目錄的讀寫權限 | systemctl restart httpd.service 或 systemctl restart apache2.service |
| Tomcat | PEM 憑證/私鑰或 JKS keystore 檔案及所在目錄的讀寫權限 | JAVA_HOME + shutdown.sh + startup.sh |
| IIS | 由 clmBot 內建 PowerShell 指令碼匯入 PFX 並更新站台繫結,需要系統管理員權限;暫存 PFX 檔案的建立和清理 | 無需設定,內建指令碼自動處理 |
資訊
- 透過憑證探索功能自動產生的指令碼會使用命令的絕對路徑(如 nginx 附带
-p、-c參數,systemctl使用絕對路徑),請以實際產生的servers[].after_script為準。 - 若 Tomcat 由 systemd 管理,自動產生的指令碼為
systemctl restart <tomcat 服务名>而非shutdown.sh/startup.sh。
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/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)監聽位址和連接埠是否符合主機防火牆策略。