実行権限要件
clmBot が証明書の自動更新を実行する際、対象の証明書ファイルの読み書きと、更新後に対応するミドルウェアサービスのリロードまたは再起動が必要です。本文では、各種ミドルウェアのシナリオにおける推奨最小権限設定について説明します。
情報
ミドルウェアの reload / restart コマンドは config.yaml の servers[].after_script フィールドに定義されており、実際の環境に応じてユーザーが調整できます。clmBot は root や Administrator などの高権限アカウントでの常時実行を必須としていません。
最小権限の原則
専用システムアカウント(例:clmbot)で clmBot を実行することを推奨します。
- そのアカウントには、clmBot の設定、ログディレクトリ、および対象証明書インストールポイントの読み取りに必要な権限のみを付与します。
- clmBot が管理する証明書ファイル、秘密鍵ファイル、およびそれらが存在するディレクトリに対してのみ書き込み権限を付与します。
- 確認済みのミドルウェア reload / restart コマンドのみ実行を許可し、
before_script、after_scriptは人手による監査を経て 1 件ずつ許可する必要があります。
推奨しません:
- 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)のリスンアドレスとポートがホストのファイアウォールポリシーに準拠しているか。