HowTo · 多プロジェクト · OpenClaw

2026 OpenClaw MeshMac 実践:共有ノードプロジェクト別設定ディレクトリログパスを切る最小権限の再現手順

2026年3月30日 Meshmac 専門チーム 読了目安 約7分

複数ユーザーと複数プロジェクトが同一MeshMacノードOpenClawを回すとき、設定とログが一箇所に集まると障害解析が長引きます。本稿はプロジェクト固有の設定ルートログのボリューム分離またはサブパス0750/0440の権限と最小スコープのトークンを、そのまま貼れるコマンドとチェックポイントでまとめたものです。環境テンプレと環境別シークレット注入マルチノードでのシークレット最小権限、全体像はマルチノードデプロイガイドと併読してください。

つまずき(共有ノード)

  1. グローバルな既定パスへ複数プロジェクトが書き込み、キャッシュとスキル状態が汚染される。
  2. 単一ログしかなく、監査でプロジェクト境界を引けない。
  3. 広いスコープのトークンを共用し、流出時の影響面が全会社・全キューに広がる。

設定・ログの判断表

先に方針を決めてからディスクに落とします。

観点 設定サブツリー ログ独立ボリューム ログ同一巻のサブパス
隔離の強さ 高(パスで明確) 高(quotaと境界) 中(権限とローテ)
運用負荷
向く場面 常に必須 マルチテナント・課金 小さめチーム・コスト重視

手順1 ディレクトリとPOSIX権限

team_alpha / proj_ios を例に、プロジェクトと同名のグループを軸にします。

sudo dseditgroup -o create proj_ios 2>/dev/null || true
sudo mkdir -p /srv/openclaw/team_alpha/proj_ios/{config,logs}
sudo chown -R root:proj_ios /srv/openclaw/team_alpha/proj_ios
sudo chmod 0750 /srv/openclaw/team_alpha/proj_ios/config
sudo chmod 0770 /srv/openclaw/team_alpha/proj_ios/logs

チェック:namei -l /srv/openclaw/team_alpha/proj_ios/config で各段が drwxr-x--- かつグループ proj_ios であること。

手順2 設定ルートと状態ディレクトリの固定

LaunchAgentやshellラッパで、実行ユーザのホーム直下へ戻らないよう明示します(変数名は既存テンプレに合わせて調整可)。

export OPENCLAW_CONFIG_ROOT=/srv/openclaw/team_alpha/proj_ios/config
export OPENCLAW_STATE_DIR=/srv/openclaw/team_alpha/proj_ios/config/state
install -d -m 0750 -g proj_ios "$OPENCLAW_STATE_DIR"

テンプレ配布や秘密の注入は環境テンプレ記事に従い、本項は実行時のルートだけを固定する層です。

手順3 ログの切り方(サブパスか別ボリューム)

サブパスの典型:

export OPENCLAW_LOG_DIR=/srv/openclaw/team_alpha/proj_ios/logs
install -d -m 0770 -g proj_ios "$OPENCLAW_LOG_DIR"
# logrotate: プロジェクト別ファイル、保持14〜30日を目安

別ボリュームでは、マウント先を上記 logs にし、chgrp proj_ios したうえでストレージ帳票でボリューム単位のquotaを取ります。

手順4 最小権限トークン

用途ごとにトークンを分割し、通知送信用ビルド状態の参照にスコープを閉じます。ローテーション手順はチャネルアラートとトークンローテーションを流用できます。

sudo install -m 0440 -g proj_ios secrets/proj_ios/notify.token \
  /srv/openclaw/team_alpha/proj_ios/config/secrets/notify.token
sudo stat -f "%Sp %g" /srv/openclaw/team_alpha/proj_ios/config/secrets/notify.token

手順5 チェックポイントと排错

リリース前後に以下を走らせ、失敗したら設定ルートと補助グループから戻します。

python3 - <<'PY'
import os
root = os.environ["OPENCLAW_CONFIG_ROOT"]
assert os.path.commonpath([root, "/Users"]) != "/Users", "home fallback"
PY
find "$OPENCLAW_LOG_DIR" -maxdepth 1 -type f -name '*.log' -ls
test -w "$OPENCLAW_LOG_DIR" && echo "log_dir_writable"

他プロジェクトのツリーにログが出る場合は OPENCLAW_LOG_DIR の継承を疑い、Permission denied ならプロセスの補助グループに proj_ios が入っているか確認します。

採用しやすい閾値

  • 設定ツリーはディレクトリ 0750、秘密ファイル 0440。サービス用ユーザは自プロジェクトのグループだけに入れる。
  • テキストログは 14〜30日保持、単一ファイル 約200MB超でローテーション。
  • トークンはメッセージ送信と状態参照に必要なscopeのみ。リポジトリ設定系は既定で閉じる。

補足FAQ

 CIと人手が同じノードのとき?
 CI用に別サブツリーと読み取り中心のトークンを用意し、Runnerラベルとパス接頭辞を一致させ、config/state への書込を避けます。

 ホームへのシンボリックリンクは?
 非推奨。namei -l が複雑化し、監査上も実体が見えにくくなります。

次の一手

チェックポイントをリリース票に貼り、キューやフェイルオーバー記事と突き合わせてください。OpenClawの目次はOpenClaw 特集ページホームヘルプブログ一覧はログイン不要で参照できます。

MeshMac · OpenClaw

共有ノードで検証しながら権限境界を固める

SSH・VNC付きノードをそのまま試せます。閲覧・購入にログイン不要ヘルプブログから手順を補完できます。

設定ルート ログ分離 最小トークン
今すぐレンタル