OpenClaw 2.0 を Linux VPS に入れた瞬間にチャットが返ることは、その箱を一週間放置してよいこととは別問題です。ホストインストールの初期値は控えめです。Gateway はループバック、知らない DM にはペアリングコード、グループはメンション前提。七日目に効いてくるのは、インストーラが締めてくれない三点——サンドボックスがオフ、セッションツールが Gateway 全体を見られる、モデル API キーが Agent の読めるファイルに残る——です。
今回は「一人運用・リモート API・Telegram 一本」で同じ Ubuntu を 7 日つけっぱなしにしました。一日一事:権限、SSH と待受、API キー、ブラウザ、Agent 分離。結論は先に書きます。一つの信頼域なら常駐してよい。互いに信頼しない同僚や顧客を同じ Gateway に載せてはいけない、と公式も最初に書いています。スペックの話は OpenClaw 2.0 の CPU / メモリ / ディスク実測 に任せ、ここでは「一週間後にどの口が開いたままか」だけを見ます。
結論:安全だが、契約がある
OpenClaw は Gateway 一台を一つの信頼境界として設計しています。一人、または既に信頼し合っている少人数向けです。敵対する利用者や別顧客は、Gateway と資格情報を分け、できれば OS ユーザーかホストも分けます。OpenClaw Gateway セキュリティ文書の冒頭そのものです。マルチテナント SaaS の採点表で見ると初期値は全滅に近い。「自分の当番機」で見ると、大半は持ちこたえます。
毎日 openclaw security audit を回しました。初日に目立ったのはポートの露出ではありません。ホストインストールなら 18789 は公開スキャンに出ません。うるさい指摘は、ツール実行がホストに落ちることと、セッション可視性が Gateway 全域であることです。これを放置したままブラウザ技能と「読み取り専用の家族用」人格を足すと、影響範囲は「この VPS」から「この VPS 上の全会話と秘密」に跳ねます。
「事故がなかった」を合格にしないための7日間
箱は 2 vCPU / 8 GB の Ubuntu 24.04、ネイティブの install.sh、リモート API、systemd ユーザーユニット。SSH は鍵のみ、パスワードログインはオフ。Gateway は bind: loopback のまま、Control UI は SSH ローカルフォワード、セキュリティグループに 18789 は開けていません。Telegram はペアリングのまま。Docker サンドボックスは意図的に初日オフにして、七日目の「本当の初期姿勢」を残しました。
毎朝の証拠は三つです。openclaw security audit --json、ss -lntp とクラウド側ファイアウォールの突合、~/.openclaw の権限と平文キー走査。プロンプトインジェクションが成功したかどうかは採点しません。設定が漂ったか、Agent(または自分)が世界読み取り可能なファイルを残したかだけを見ます。
点検1:権限 — exec はホストに残る
OpenClaw 2.0 のサンドボックスは任意です。Gateway は常にホストにいます。ツールが Docker / Podman に移るのは agents.defaults.sandbox を入れた後です。オフなら host=auto は gateway 本体に落ちます。自分を信頼する個人アシスタントなら快適です。リンクや転送が来る当番ボットなら、プロンプト注入の終点をデプロイユーザーのシェルに繋いだことになります。
初日の audit は二種類を安定して出します。ツールの爆発半径が広いことと、security="full"——公式が信頼オペレータ向けの初期体験だと書く項目で、CVE ではありません。切り方はこうしました。個人の主 Agent はホスト実行を残してよいが、ペアリング、ワークスペース限定のファイルツール、tools.elevated オフの三点は同時に満たす。家族や公開入口の第二 Agent は sandbox.mode: "all"、ワークスペースは ro か none、exec / browser / gateway / cron を拒否。
ディレクトリ権限は思ったより漂います。ノートからの scp、Docker ボリューム、Agent 自身による openclaw.json のコピーで 600/700 が 644/755 になります。openclaw security audit --fix は状態と設定のモードを締めます。サンドボックスはオンにしません。Gateway は専用 Linux ユーザーで動かしてください。鍵もセッション庫もワークスペースも、ubuntu や root の家に置かない。
host=auto はホストに戻ります。実行時がない host=sandbox は黙ってホストに戻らず失敗します。エラーを消すために auto へ戻して「分離した」ことにしないでください。
点検2:SSH と待受 — 制御面を公衆網に出さない
二日目は外からスキャンしました。ホストインストールでは 18789 は 127.0.0.1 だけ、セキュリティグループは 22 のみ。Gateway は見えません。これが「普通のホスト」向けの文書どおりの初期値で、一週間で一番穏やかな結果でした。コンテナイメージは別です。露出バインドが初期値で、認証必須です。Docker のポート公開をホストインストールと同じ安全だと思わないこと。
SSH は三点だけ見ました。パスワードログイン禁止、root パスワード禁止、古い鍵種別を使わない。Gateway への遠隔は SSH トンネルか Tailscale で、Control UI を 443 に出してトークンを忘れる経路は使いません。HTTP と WebSocket は同一ポートで、Control UI と Agent 製ウィジェットも乗ります。公式はウィジェットを未信頼コンテンツとして扱います。ログイン済みの管理画面と同じオリジンに置かない。
公開したコンテナポートはホストの INPUT をスキップし、Docker の転送鎖を通ります。文書は DOCKER-USER を明示しています。コンテナなら公開 IP で再測してください。内側の ss だけでは足りません。最小露出の切り方は Linux 最小露出面と SSH / HTTPS の判断 を見て、この記事では「一週間で 0.0.0.0 に書き換えられていないか」を確認します。
ノードペアリングも SSH 面です。sshVerify はオペレータ SSH で機器身分を読み返します。届くだけでは承認しません。autoApproveCidrs は初期オフで、初回かつスコープなしの node 役割にしか効きません。二日目は両方とも初期値のままにしました。確認クリックを減らすために自動承認を開けません。
点検3:API キー — 平文が残れば Agent は読める
三日目は秘密の棚卸しです。OpenClaw 2.0 には SecretRef があります。プロバイダの apiKey、Gateway トークン、一部チャネル資格情報は env / file / exec / store から解決できます。平文は今も使えます。SecretRef はフィールド単位の任意です。「2.0 にした」は「キーがディスクを離れた」ではありません。
危険なのは「当番機にキーがある」ことではありません。危険なのは read や exec が開ける場所にキーがあることです。openclaw.json、.env、生成された models.json、引退した auth-profile です。SSH を破らなくても、モデルが「設定を読んでチャットに貼れ」と動けば足ります。OpenClaw のシークレット文書 は移行完了の条件を硬く書いています。対応フィールドはすべて SecretRef、旧平文は消去、openclaw secrets audit --check がきれい。SecretRef に乗らない回転系は OS ユーザー、コンテナ、外部プロキシで隔離。
Gateway トークンは別物です。/v1/chat/completions や /tools/invoke、管理 RPC を叩ける共有秘密は、公式が全権オペレータ資格だと呼びます。ワークスペースにもスキル倉庫にも入れない。ローテーションは短い。新しいトークン、再起動、クライアント更新、旧値が死ぬことを確認。三日目にモデルキーは環境変数 SecretRef へ移し、Gateway トークンはデプロイユーザーだけが読める環境ファイルに残し、ワークスペースから sk- 行を消しました。
openclaw.json.bak や梱包したワークスペース、同期フォルダの複製は、Agent が列挙できる木から出すか削除します。
点検4:ブラウザ — オペレータの手をモデルに渡す
四日目にブラウザ技能を一度入れ、その日のうちに切りました。Chromium のメモリが理由ではありません。8 GB なら一巡は耐えます。公式がリモートブラウザ制御をオペレータアクセスと等価と書いているからです。Agent が見るページは、そのプロファイルのログイン、Cookie、保存パスワードです。日常使いの Chrome を貸してはいけません。
分離は層です。専用プロファイル、パスワードマネージャと同期はオフ、ダウンロードは別ディレクトリで未信頼扱い、制御ポートはループバックか tailnet のみ、Funnel は使わない。OpenClaw 2.0 のサンドボックスブラウザは専用コンテナと openclaw-sandbox-browser ネットワークに置け、allowHostControl は初期オフです。SSRF は初期で私網を止めます。dangerouslyAllowPrivateNetwork を自分で開けない限り、内網には行きません。四日目はオフのまま確認しました。
拡張リレーと遠隔 CDP は「タブが見えるならその人」です。既存セッションモードはより安全ではなく、よりあなたに近いだけです。デスクトップ機のノードはペアリング後に管理者です。Gateway とノードは同じ私網に置く。一週間のルール:テキスト助手にブラウザは不要。どうしても使うなら個人アカウントのないプロファイルを渡し、ローカル 7B と RAM を分け合うな。
点検5:Agent 分離 — 初期値はテナント分離ではない
五〜六日目に読み取り専用の第二 Agent を足し、セッションが分かれると思いました。分かれません。初期の tools.sessions.visibility は all、tools.agentToAgent.enabled は true です。未サンドボックスの Agent は他 Agent のセッションを列挙・検索・閲覧できます。「家族用読み取り専用」だと思っていた人格も含みます。サンドボックス側は自分の派生ツリーに閉じますが、書き起こしは隠れません。未サンドボックスの主 Agent は読めます。
一台の Gateway で人格を分けるなら、可視性を agent か self にし、agent-to-agent を切るか許可リストにし、scope: "shared" で箱を共有しない。複数人が DM できるなら session.dmScope を per-channel-peer にしないと、全部が主セッションに流れます。これは協働の柵であり、敵対テナントの壁ではありません。顧客 A と B は Gateway を分けます。
制御面ツールも Agent ごとに刈ります。gateway は設定(位相と秘密の手がかり)を読め、cron はログアウト後も残る仕事を作れます。未信頼コンテンツを見る Agent は両方を deny し、sessions_spawn と sessions_send も切る。プラグインとスキルは信頼コードです。見た出典だけ、plugins.allow、変更後は再起動。
7日目:漂ったものと漂わなかったもの
最後の一周。待受はループバックのまま、ペアリングもそのままで、セキュリティグループに 18789 は増えていません。漂ったのはワークスペースに残したデバッグ用 .env と、ブラウザ再現で残した allowHostControl のコメント——マージで本番ファイルに入りかけました。--fix 後のファイルモードはきれいです。主 Agent のサンドボックスがオフのあいだ、audit は信頼オペレータ姿勢だとラベルし続けます。多ユーザー姿勢ではありません。
| 点検 | 1日目 | 7日目 | 直すか |
|---|---|---|---|
| 権限 / サンドボックス | オフ、exec はホスト | 主はホスト、読み取り専用は隔離 | 未信頼入力があるならオン |
| SSH / 待受 | loopback + 22 のみ | 漂わず | 維持。コンテナは公開ポートを再測 |
| API キー | openclaw.json に平文 | SecretRef、ワークスペースに sk- なし | 必須。バックアップも掃く |
| ブラウザ | オフ | 専用プロファイルで確認後オフ | 初期オフ。使うなら専用 |
| Agent 分離 | visibility=all | agent、A2A オフ | 第二人格を足した日に変える |
表の読み方です。OpenClaw 2.0 は VPS で一週間でも一年でも常駐できる。条件は「Gateway 一台 = 信頼域ひとつ」を受け入れ、第二人格・ブラウザ・公開リバースプロキシの前に audit をやり直すこと。足りないのは新機能ではなく、初期の「オペレータを信頼する」物語を、自分の脅威モデルに合わせることです。
閉じ方:場面ごとの一覧
一夜でゼロトラスト全体を狙わない。今夜出す負荷で「同時に成り立つ条件」を書く。条件がぶつかるなら機械を分ける。一つの設定に例外を重ねるより、二台目の方が安い。
| 場面 | 最低限 | 推奨 | やらない |
|---|---|---|---|
| 自分用テキスト助手 | loopback + ペアリング + 600 | SecretRef とワークスペース制限 | トークンなしの 0.0.0.0 |
| 家族や同僚で一台 | per-channel-peer + visibility agent | 読み取り専用をサンドボックス、A2A オフ | 主セッション共有、ブラウザ共有 |
| ブラウザ技能が必要 | 専用プロファイル + 私網制御面 | サンドボックスブラウザ、SSRF 初期値 | 個人 Chrome、公開 Funnel |
| 顧客や事業が違う | Gateway と資格情報を分離 | OS ユーザーか VPS も分離 | RBAC をテナント分離だと思う |
運用の雑務に見えてセキュリティなものが二つあります。ログに出たトークンと、見ぬ出典のプラグインです。前者はマスキングとローテーション、後者は plugins.allow の明示。それが終わってから、Linux 当番機にオペレータ鍵を置き続けるかを決めてください。
FAQ
テキストだけ、初期値のまま。公開スキャンに Gateway は見えますか。
ホストインストールのループバックなら 18789 は公衆網に出ません。先にペアリングを閉じてください。既に DM できる他人が、nmap より先の一段です。
Docker の方が最初から安全ですか。
イメージはロールバックとファイル分離に効きます。公式コンテナは露出バインドが初期値で、公開ポートはホスト INPUT を迂回します。認証と外部再測がなければ、Docker の方が危険です。
audit --fix は手作業の代わりになりますか。
なりません。グループを許可リストに戻し、600/700 を直すだけです。サンドボックスも SecretRef もセッション可視性も変えません。
モデルは API キーを自分で読めますか。
平文が Agent の読める道に残っていれば、ファイルツールや exec で開けます。SecretRef はディスク残渣を減らします。プロセス分離ではありません。未信頼コンテンツとホスト exec を同時に開かないでください。
鍵の発行はクラウド Mac、Gateway は Linux のまま
Linux VPS は常駐 Gateway 向きです。イメージが揃い、systemd が退屈で、つけっぱなしが安い。SSH 秘密鍵、主モデルの秘密、個人ブラウザプロファイルを、Agent が既に書いたワークスペースの隣に積む場所ではありません。Apple Silicon の待機はおよそ 4W。Gatekeeper、SIP、FileVault でマルウェア面は小さく、クラッシュ率も Docker を一週間回す同価格 Linux より低い。オペレータ側の当番機です。鍵を作り、トンネルクライアントを置き、たまにデスクトップ確認をする。
七日後も崩れていない分け方は、Linux に Gateway とリモート API、クラウド Mac mini に Agent へ渡さない資格情報と macOS ツール鎖です。Homebrew も SSH も Docker も初日に使えます。ブラウザ技能一つのために権限モデルを作り直す必要はありません。
五枚の点検表が閉じたなら、次の機械は Agent と信頼域を共有しないものにしてください。VPSSpark クラウド Mac mini M4 がその席です。プランを見る。週単位の制御ノードを足す方が、監査したばかりの VPS に秘密を全部残すより筋が通っています。