著者: 著者: やまねこ タグ:
Mac miniにOpenClawを安全に導入するセキュアセットアップガイドのイメージ。loopback bind、token auth、最小権限構成を図解

OpenClawを試したい。でもREADMEの手順をそのまま実行して大丈夫だろうか。

前回の記事で、OpenClawのセキュリティリスクを整理しました。CVE-2026-25253(CVSS 8.8)による1クリックRCE、ClawHubで確認された820件超のマルウェアスキル、Shodanで発見された13.5万以上の露出インスタンス。リスクの全体像は把握できたとして、次の疑問は「じゃあどうすれば安全に試せるのか」です。

この記事では、macOS / Mac miniの個人検証環境を対象に、安全設計 → 実装 → 検証 → 後始末の順でOpenClawのセキュアなセットアップ手順を解説します。READMEの最短導入ではなく、最小権限・秘密情報保護・外部通信制御を組み込んだ構成です。

なお、本記事は個人検証向けの構成であり、本番運用やマルチユーザー環境のセキュリティ設計は対象外です。OpenClawは急速に進化しているため、公式ドキュメントで最新情報を確認してください。


ざっくりまとめ

  • OpenClawは便利だが、デフォルト設定のまま使うとセキュリティリスクが高い。専用ユーザー・loopback bind・token auth・最小権限プロファイルでの導入が推奨されています
  • 「最短導入」ではなく「安全な導入」を選ぶ理由がある。READMEどおりの手順では、ポート公開・認証なし・daemon常駐といったリスクを見落としやすいためです
  • 導入前・導入後のチェックリストで安全性を自己確認できる。セットアップだけでなく、検証後のクリーンアップまでカバーしています

結論から言うと — 今回の推奨構成はこれです

まず全体像を示します。以下が個人検証向けの安全寄り初期構成です。

| 項目 | 推奨値 | 理由 | | ---------------------- | ----------------------------- | -------------------------- | | OSユーザー | 専用の非管理者ユーザー | Blast Radius の限定 | | Node.js | v24 | 最新セキュリティパッチ対応 | | OpenClaw版 | v2026.3.28(stable固定) | CVE-2026-25253以降 | | 実行モード | CLI-only | macOS app は初回不要 | | Gateway bind | loopback | 外部公開しない | | Gateway auth | token(openssl rand -hex 32) | 認証必須 | | Tailscale | off | 初回は不要 | | tools.profile | minimal | 最小権限 | | channels/skills/search | 無効(—skip-*) | 信頼境界の最小化 | | daemon | なし(—no-install-daemon) | foreground検証 | | .env | ~/.openclaw/.env(chmod 600) | repo配下に置かない |

逆に、最初はやらないことリストも明確にしておきます。

  • curl | bash でのインストール
  • daemon 常駐(LaunchAgent)
  • public / LAN バインド
  • macOS app の導入
  • plugins / ClawHub / browser / nodes / search の有効化
  • Docker にホーム全体を bind mount

OWASPが提唱するLeast Agency(最小自律性)の原則に沿った構成です。「後から足せるが、最初に削るのは大変」。この順序が安全設計の基本になります。


READMEの前に確認する3つの安全性チェック

OpenClawをインストールする前に、3つの観点から安全性を確認します。

1. リポジトリの信頼性を見る

GitHubリポジトリのREADME、SECURITY.md、LICENSEを確認してください。更新頻度とrelease channel(stableとlatest)の使い分けも重要です。

個人検証ではstable版を固定してインストールします。latestは最新機能が入る一方で、未検証の変更が含まれる場合があります。

2. 既知の脆弱性を把握する

2026年2〜3月にかけて、OpenClawには複数のセキュリティアドバイザリーが公開されました。

| CVE | CVSS | 内容 | 修正版 | | -------------- | ----------- | ------------------------------------ | ---------- | | CVE-2026-25253 | 8.8(High) | WebSocket Origin未検証 → 1-click RCE | v2026.1.29 | | CVE-2026-24763 | High | Docker PATHインジェクション | パッチ済 | | CVE-2026-25157 | High | コマンドインジェクション | パッチ済 |

CVE-2026-25253の攻撃チェーンは深刻でした。悪意のあるリンクを1回クリックするだけで、gatewayUrlパラメータの悪用 → WebSocketの自動接続 → 認証トークンの窃取 → 権限昇格 → 任意コマンド実行という流れが、ミリ秒単位で完了します。

SecurityScorecardの調査では、インターネットに露出したOpenClawインスタンスが13.5万以上、うちRCE脆弱な状態のものが5万以上確認されています。

v2026.3.28以降を使えばこれらはパッチ済みです。ただし、ClawHubでは820件超のマルウェアスキルが確認されているため、スキルの導入には引き続き注意が必要です。

CVE-2026-25253の攻撃チェーンやClawHubマルウェアの詳細は、前回のリスク概要記事で解説しています。

3. 「公式推奨」=「安全」とは限らない

OpenClawには公式のインストールスクリプト(curl | bash)が用意されています。動作はしますが、スクリプトの内容を事前にレビューしにくく、macOSにHomebrewが未インストールの場合は管理者権限を自動的に要求します。

安全性を重視するなら、npm/pnpmでバージョンを固定したインストールを選んでください。「動く」と「安全に動く」は別のことです。


検証環境をどう設計するか — ディレクトリ・ユーザー・通信

実際のコマンドに入る前に、環境の設計方針を整理します。

ディレクトリ構成

~/.openclaw/          ← state / config / secrets(chmod 700)
~/oc-workspace/       ← エージェントの作業領域(chmod 700)
~/oc-logs/            ← ログ出力先(chmod 700)

repoとsecretsを分離し、workspaceは狭く専用にしてください。sandbox無効時、workspaceの外にも到達できるため、広く設定するとリスクが増します。

実機検証でも確認しましたが、workspaceは絶対パスで指定することを推奨します。相対パスや~を使うと、embedded fallback時にworkspaceの解釈がぶれるケースがありました。openclaw.jsonsessions.jsonの両方で実効workspaceを確認してください。

OSユーザー設計

「システム設定 > ユーザーとグループ」から非管理者の標準ユーザーを作成します。名前はopenclaw-sandboxなどが分かりやすいでしょう。

管理者アカウントで直接動かさない理由は明確です。エージェントがプロンプトインジェクションで騙された場合、標準アカウントなら~/.sshやKeychainへのアクセスは制限されます。Blast Radiusが「Mac全体」から「1ユーザーのホームフォルダ」に縮小します。

加えて、FileVaultの有効化とmacOSファイアウォール(ステルスモード)の有効化も推奨されています。

通信設計

loopback bind(127.0.0.1)が最重要設定です。

ここには注意すべき落とし穴があります。loopback bindが何らかの理由で失敗した場合、Gatewayは警告やエラーを出さずに0.0.0.0にフォールバックすることがあります。起動のたびにopenclaw security auditを実行し、実際のバインド状態を確認してください。

token authは32バイト以上のランダムトークンを使います。リモートアクセスが必要な場合は、ポートを公開するのではなくSSHポートフォワーディング(ssh -L 18789:127.0.0.1:18789 user@host)を使ってください。


実際のセットアップ手順 — コピペで進める10ステップ

ここからは具体的なコマンドです。コピペで進められるように、省略せず記載します。

前提ツールの準備

Node.js 24、git、openssl、npmが必要です。以降、sudoは使いません。

# Node.js 24(Homebrew経由)
brew install node@24

環境変数とディレクトリの準備

export OC_VER="2026.3.28"
export OC_PREFIX="$HOME/.local/openclaw-cli"
export OC_STATE="$HOME/.openclaw"
export OC_WORK="$HOME/oc-workspace"
export OC_LOG="$HOME/oc-logs"

mkdir -p "$OC_PREFIX" "$OC_STATE" "$OC_WORK" "$OC_LOG"
chmod 700 "$OC_STATE" "$OC_WORK" "$OC_LOG"

OpenClawのインストール(版固定・ローカルプレフィックス)

グローバルインストール(npm install -g)はシステム全体に影響するため避けます。ローカルプレフィックス指定で、指定ディレクトリ内に環境を閉じ込めます。

npm install --prefix "$OC_PREFIX" "openclaw@$OC_VER"
export PATH="$OC_PREFIX/bin:$PATH"
openclaw --version

v2026.3.28はv2026.3.24以前のcritical advisoryより後の安定版です。

APIキーとGateway tokenの.env作成

# Gateway tokenの生成
openssl rand -hex 32
# 出力されたトークンを以下のREPLACE_WITH_LONG_RANDOM_TOKENに置き換える

umask 077
cat > "$OC_STATE/.env" <<'EOF'
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_LONG_RANDOM_TOKEN
OPENAI_API_KEY=REPLACE_WITH_OPENAI_KEY
EOF
chmod 600 "$OC_STATE/.env"

APIプロバイダー側で支出上限を事前設定してください。 検証用途なら月額$10〜$20で十分です。Anthropic Consoleなら「Settings > Billing」、OpenAI Platformなら「Settings > Limits > Monthly budget limit」から設定できます。

onboarding実行(最小構成)

set -a
. "$OC_STATE/.env"
set +a

openclaw onboard \
  --non-interactive \
  --mode local \
  --flow manual \
  --auth-choice openai-api-key \
  --secret-input-mode ref \
  --openai-api-key "$OPENAI_API_KEY" \
  --workspace "$OC_WORK" \
  --gateway-port 18789 \
  --gateway-bind loopback \
  --gateway-auth token \
  --gateway-token-ref-env OPENCLAW_GATEWAY_TOKEN \
  --tailscale off \
  --no-install-daemon \
  --skip-channels \
  --skip-skills \
  --skip-search

各オプションの意味を補足します。

  • --secret-input-mode ref: provider keyをplaintextではなくenv refとして扱います
  • --gateway-token-ref-env: Gateway tokenをenv SecretRefで保持します
  • --no-install-daemon: launchd常駐を避けます
  • --skip-channels --skip-skills --skip-search: 外部露出と依存面を減らします

初回ハードニングとAPIキー保護

インストール直後のOpenClawは、まだ「安全」とは言えません。~/.openclaw/openclaw.jsonを確認し、以下の設定になっていることを検証してください。

{
  "gateway": {
    "mode": "local",
    "port": 18789,
    "bind": "loopback",
    "auth": {
      "mode": "token",
      "token": "${OPENCLAW_GATEWAY_TOKEN}",
      "allowTailscale": false
    },
    "tailscale": { "mode": "off" }
  },
  "env": {
    "shellEnv": { "enabled": false, "timeoutMs": 5000 }
  },
  "logging": {
    "file": "/Users/YOUR_USER/oc-logs/openclaw.log",
    "level": "info",
    "consoleLevel": "info",
    "redactSensitive": "tools",
    "redactPatterns": ["sk-[A-Za-z0-9_-]+", "gsk_[A-Za-z0-9_-]+", "AIza[0-9A-Za-z_-]+"]
  },
  "tools": { "profile": "minimal" },
  "agents": {
    "defaults": {
      "workspace": "/Users/YOUR_USER/oc-workspace",
      "sandbox": { "mode": "off" }
    }
  }
}

ログ設定の注意点

デフォルトの/tmp/openclaw/*.logはそのまま使わないでください。/tmpは他のユーザーやプロセスからアクセス可能です。上記のようにprivateなログディレクトリに変更します。

もう一つ重要な点があります。redactSensitive: "tools"はconsole出力の編集(マスキング)ですが、file logにはそのまま出力されます。ログファイルにAPIキーが残る可能性があるため、ログの保管場所と削除タイミングには注意してください。

shellEnvの無効化が重要な理由

OPENCLAW_LOAD_SHELL_ENV=1またはenv.shellEnv.enabled: trueは、ログインシェルの環境変数のうち未設定のものをすべてOpenClawに取り込みます。意図しない秘密情報まで読み込まれるリスクがあるため、無効にしておくのが安全です。明示的な.envまたはSecretRefで管理してください。

APIキー保護: 3つの方式

OpenClawのSecretRefシステムは、env・file・execの3種類のプロバイダーをサポートしています。

| 方式 | 概要 | 推奨度 | | -------------- | ----------------------------------- | -------------- | | env SecretRef | ~/.openclaw/.env + chmod 600 | 初回検証に最適 | | file SecretRef | ファイルパスで参照 | envと同等 | | exec SecretRef | macOS Keychain / 1Password CLI 連携 | 上級者向け |

初回検証ではenv SecretRefが最も無難です。起動時に解決できなければfail-fastするため、設定ミスにも気づきやすい仕組みです。

exec SecretRefは--allow-execなしでは拒否されるため、初回から使う必要はありません。macOS KeychainやsopsとのCI/CD連携が必要になった段階で検討してください。

鉄則: openclaw.jsonに平文でAPIキーを書かないでください。 RedLine、Lumma、Vidarといったインフォスティーラーは、既にOpenClawのファイル構造をターゲットリストに追加していることが報告されています。


最小権限と外部通信の制御 — 後から足せるが、最初に削るのは大変

tools.profileの選び方

| Profile | 含まれるツール | 初回検証 | | ------- | ------------------------------------ | ---------------- | | minimal | session_status のみ | 推奨 | | coding | fs, runtime, sessions, memory, image | 検証後に必要なら | | full | 無制限 | 使わない |

minimalから始めて、必要なツールだけtools.allowで個別に追加するアプローチが安全です。OWASPのAI Agent Security Cheat Sheetも、「エージェントには定義されたタスクに必要な最小限の権限のみを付与し、許可ツールの明示的なリストを定義する」ことを推奨しています。

skills / plugins / channelsを無効にする理由

pluginはtrusted code扱いです。インストールするとホスト上で何でもできます。ClawHubのスキルは820件超のマルウェアが確認されており、Atomic Stealer(AMOS)によるKeychainや暗号資産ウォレットの窃取も報告されています。

MCP(Model Context Protocol)サーバーと同様、サードパーティのツールにはツールポイズニングのリスクがあります。OWASPのMCPサーバー安全利用ガイドでも、「信頼されたツールが悪意あるものにすり替えられるrug pull」への注意が喚起されています。

Docker sandboxの正しい使い方

Docker sandboxはOpenClaw全体の万能隔離策ではありません。エージェントのツール実行をコンテナ内に隔離するための仕組みです。

  • agents.defaults.sandbox.mode: “off”(初回検証)/ “non-main” / “all”
  • tools.fs.workspaceOnly: true でアクセスをworkspaceに限定

危険なマウントの禁止: ホームディレクトリ全体(~/)、~/.sshdocker.sockをコンテナにbind mountすることは、サンドボックスを迂回するのと同義です。workspaceディレクトリのみマウントし、必要なら:ro(読み取り専用)を付けてください。

外部通信のホワイトリスト化

通信先は「導入時」と「運用時」で分けて管理してください。

導入時(一時的に許可):

  • Homebrewリポジトリ(github.comformulae.brew.sh 等)
  • registry.npmjs.org(npmパッケージ取得)

運用時(常時許可):

  • api.anthropic.com / api.openai.com(AIモデルAPI)
  • registry.npmjs.org(依存関係の更新時のみ)

それ以外はdeny-by-default。 導入完了後はHomebrewの通信先をブロックに戻してかまいません。LuLu(Objective-Seeが開発したオープンソースのmacOSファイアウォール)またはLittle SnitchでNode.jsプロセスの通信を監視してください。新規の接続試行があるたびにアラートが出るため、想定外の通信先に気づけます。

テレメトリ・mDNSの無効化

# ~/.zshrc または ~/.openclaw/.env に追加
CLAWHUB_DISABLE_TELEMETRY=1
DO_NOT_TRACK=1
OPENCLAW_DISABLE_BONJOUR=1

mDNS(Bonjour)は、既定のdiscovery.mdns.mode: "minimal"でもGatewayのIPアドレスとポートをLAN内にブロードキャストします。fullモードではさらにファイルシステムパスやSSHポートまで含まれます。いずれのモードでも検証環境では無効化しておくのが安全です。

SSRF対策も忘れずに設定してください。browser.ssrfPolicy.dangerouslyAllowPrivateNetwork: falseにすることで、エージェントのブラウザツールがローカルネットワークをスキャンすることを防げます。


動作確認と依存関係の監査 — “動く”と”安全に動く”は別

Gatewayの起動(foreground)

openclaw gateway --verbose

foregroundで起動する理由は2つあります。1つ目は、--install-daemonでLaunchAgentを入れた場合に、onboarding中断時にorphan LaunchAgentが残る報告があること。2つ目は、Ctrl+Cで確実に停止できること。検証段階ではforegroundが安全です。

状態確認コマンド(すべて実行する)

openclaw status
openclaw gateway status
openclaw doctor
openclaw config validate

実機検証では、openclaw statusで以下のような出力が確認できました。

Gateway local · ws://127.0.0.1:18789 (local loopback) · reachable 34ms · auth token

127.0.0.1:18789にバインドされていること、auth tokenが有効であることを確認してください。もし0.0.0.0:18789と表示されている場合は、loopback bindが失敗しています。

重要: Gatewayを先に手動起動してからagentを実行してください。 Gateway未起動時はembedded fallbackで応答できますが、workspaceの解釈がぶれるケースがありました。~/.openclaw/workspace側にbootstrapファイルや誤書き込みが残ることがあります。

セキュリティ監査コマンド(すべて実行する)

openclaw security audit
openclaw secrets audit --check

security auditは公開ポート、不適切なファイル権限、脆弱な認証設定を網羅的にチェックします。secrets audit --checkは平文保存されたキーを検出します。

Gateway再起動のたびに実行してください。 loopback bindがサイレントに0.0.0.0にフォールバックする問題があるため、再起動後の確認が特に重要です。

source buildの場合の追加監査

pnpm install --frozen-lockfile
pnpm build
pnpm audit --prod

初回テスト

単純なメッセージ送信だけで確認します。

openclaw agent --agent main --message "2+2だけ答えて"

実機検証では4が返り、workspaceへの書き込みも正常に動作しました。

いきなりfs / exec / browserを使わないでください。「正常に動く」ことと「安全に動く」ことは別です。動作確認が済んでから、必要なツールを段階的に有効化していきます。


避けるべき設定 — 危険度別ワースト10

READMEどおりに設定しても、安全上は避けるべきものがあります。「動く」設定と「安全な」設定は違います。

| # | 設定・手順 | 危険度 | 理由 | 代替案 | | --- | ------------------------------------------------ | ------ | -------------------------------------------- | ---------------------------------------- | | 1 | curl \| bash で無監査インストール | 最高 | スクリプト改竄リスク、Homebrew管理者権限要求 | npm 版固定インストール | | 2 | gateway.bind: "0.0.0.0" | 最高 | 13.5万インスタンスがShodanで発見 | loopback 固定 + SSHトンネル | | 3 | gateway.auth.mode: "none" | 最高 | 認証なしで全操作可能 | token auth | | 4 | sudo での実行 | 最高 | root権限でシステム全域にアクセス | 専用の標準ユーザー | | 5 | tools.profile: "coding" or "full" を初期から | 高 | fs/runtime/sessions等が無制限に | minimal から開始 | | 6 | ClawHub skills/plugins の即時導入 | 高 | 820件超のマルウェア確認 | 初期は0個。入れる前にコードレビュー | | 7 | openclaw onboard --install-daemon | 高 | orphan LaunchAgent 残留の報告あり | --no-install-daemon で foreground 検証 | | 8 | Docker に ~, .ssh, docker.sock を mount | 高 | sandbox を迂回 | workspace のみ、必要なら :ro | | 9 | OPENCLAW_LOAD_SHELL_ENV=1 | 中 | 秘密の取り込み範囲が広がる | 明示的な .env / SecretRef | | 10 | /tmp/openclaw/*.log のまま放置 | 中 | file log は redaction なし | private なログディレクトリへ変更 |

特に#2(0.0.0.0バインド)は、OpenClawの公式ドキュメントでも「public internetへの直接公開を避けるように」と明記されている設定です。それでも13.5万以上のインスタンスが露出していた事実は、デフォルト設定の危険性を物語っています。これらのリスクの背景についてはOpenClawのリスク概要も参照してください。


検証が終わったら — クリーンアップと次のステップ

検証が終わったら、秘密情報を含めて確実にクリーンアップします。

停止

# foreground プロセスは Ctrl+C

# daemon を入れていた場合
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist

削除

rm -rf "$OC_PREFIX"       # npm prefix 配下
rm -rf "$OC_STATE"        # ~/.openclaw
rm -rf "$OC_WORK"         # workspace
rm -rf "$OC_LOG"          # logs

秘密情報の後始末

  • ~/.openclaw/.envを確実に削除してください
  • APIキーを失効させるか、プロバイダーの管理画面でusageを確認してください
  • ログファイルに平文キーが残っていないか精査してから削除してください

何を残し、何を消すべきか: configテンプレートは次回のベースとして残してかまいません。secretsは消してください。ログは精査してから消してください。

安全に試す上で一番重要な3点

  1. public exposureしない — loopback bindを厳守する
  2. secretsを平文で持たない — .env + chmod 600、またはSecretRef
  3. 最小権限から始める — tools.profile=minimal、channels/skills/search無効

次にやること

この記事でカバーした最小構成から、段階的に機能を拡張できます。

  • Tailscale / SSHトンネルでのリモートアクセス
  • 外部入力sessionのDocker sandbox化agents.defaults.sandbox.mode: "non-main"
  • skill導入時の審査ルール策定plugins inspect / コードレビューの義務化)

導入前チェックリスト

  • [ ] 検証専用の標準ユーザーアカウントを作成したか(管理権限なし)
  • [ ] Node.js 24 がインストールされているか
  • [ ] Docker Desktop がインストールされているか(sandbox用、任意)
  • [ ] LuLu または Little Snitch が有効になっているか
  • [ ] インストール用ディレクトリを準備したか
  • [ ] AIプロバイダーで使用上限を設定した検証専用キーを生成したか
  • [ ] 既存の ~/.openclaw ディレクトリが存在しないことを確認したか

導入後チェックリスト

  • [ ] openclaw config validate がエラーなしで通るか
  • [ ] openclaw security audit で critical が 0 か
  • [ ] openclaw secrets audit --check で平文キーが検出されないか
  • [ ] lsof -i :18789 で 127.0.0.1 にのみバインドされているか
  • [ ] ログファイルが private ディレクトリに出力されているか
  • [ ] LuLu/Little Snitch で Node.js の通信先が想定どおりか
  • [ ] tools.profile が minimal になっているか