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