运行权限要求
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)监听地址和端口是否符合主机防火墙策略。