CodeNomad/docs/help/ja/security.md
Pascal André 89bc69cf3b
Some checks are pending
Publish help / build (push) Waiting to run
Publish help / deploy (push) Blocked by required conditions
feat: add a Support CodeNomad page and entry points for sponsorship (#1194)
## Summary

- New **Support CodeNomad** help page (10 languages): what sponsorship
pays for, the funding policy (a contribution, not a purchase; never
required to download, use or update) and one button per funding channel
naming who receives the money.
- **Download page** ends with a short *Support development* section with
the same buttons; the help **header** gains a *Sponsor* link; the former
support page is retitled **Bug reports and source builds** (ids
unchanged) so the two are not confused.
- **App**: *Support CodeNomad* in Settings → Info (secondary button
between Updates and Diagnostics), in the Help menu after *CodeNomad
Help* (Electron and Tauri, English help-page fallback) and as a palette
command without a default shortcut. All open the localized help page.
- **Repository**: `.github/FUNDING.yml` lists the maintainer's GitHub
Sponsors profile and the Support page (the Sponsor button needs
*Settings → General → Features → Sponsorships*).

Channels live in `docs/help/funding.json` and render through a
`{{funding}}` directive allowed only on the download and sponsor pages,
so adding a channel needs no retranslation. Entries are validated (exact
keys, unique ids, `https://github.com/sponsors/<login>` only) and
escaped; a page using `{{funding}}` with no channel fails the build. CSP
unchanged.

Agreed with the co-maintainer before publishing.

## Validation

- `npm run test:help`: 31/31 (27 pages × 10 locales, funding validation
and placement).
- `node scripts/test-help-browser.mjs`: 47/47 (header overflow at 390 px
in en/he/ne/ja/zh-Hans, button geometry).
- `npm run typecheck`; unit tests help-url, hotkey-bindings,
menu-labels; browser tests help-command, server-info, view-menu-electron
(22/22); `cargo test` for the Tauri crate (291/291, including the
English sponsor fallback).
- Independent review: zero findings.
2026-10-29 18:57:45 +01:00

73 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 認証とセキュリティ
CodeNomad へのアクセスにより、OpenCode を通じてバックエンドホスト上で作業を実行できます。サーバーパスワード、ブラウザーセッション、ペアリング済み端末は、強力な認証情報として扱ってください。CodeNomad はマルチテナントの実行サンドボックスではありません。
## サーバーの認証方法を選ぶ {#authentication}
| 方法 | 寿命と範囲 |
| --- | --- |
| `--password` または `CODENOMAD_SERVER_PASSWORD` | そのバックエンドプロセスの実行時上書き。毎回の起動時に再指定が必要で、永続化されません。管理対象のパスワードファイルより優先します。 |
| 設定で指定したパスワード | アクティブな設定 YAML の隣の `auth.json` に、ソルト付き scrypt ハッシュを保存します。以後、実行時上書きがない起動で使用します。 |
| `--generate-token` | ローカルの使い捨て初期設定を有効にします。表示トークンは 60 秒有効です。再利用できる API トークンやリモートコントロールリンクではありません。 |
| リモートコントロールのペアリング | ホストから管理する独立した端末 Cookie 認証。[リモートコントロール](remote-control.md)を参照してください。 |
既定のユーザー名は `codenomad` です。保存済みの認証ファイルはそのユーザー名を保持し、`--username` だけを変更しても保存済みの識別情報は改名されません。パスワードの設定、初期設定モード、明示的な認証スキップのいずれもなければ、サーバーは起動を拒否します。
コマンド引数やシェル履歴へのパスワード埋め込みより、保護された環境変数/サービスの秘密情報を優先してください。それでも、プロセス環境や設定ディレクトリを調べられる人は、環境を侵害できる可能性があります。
## 永続パスワードを初期設定する {#bootstrap}
1. 実行時パスワード上書きなしでローカル起動します。先に証明書を設定せずループバックで初期設定するには、`codenomad --host 127.0.0.1 --https=false --http=true --generate-token --launch` を使用します。
2. バックエンドのマシンで、表示された **Local Connection URL** の `/auth/token` を開き、`CODENOMAD_BOOTSTRAP_TOKEN:` の後に表示された値を送信します。その出力を共有しないでください。
3. **設定 → リモートアクセス → 直接アクセス(ローカルネットワーク、上級者向け) → サーバーパスワード** を開きます。
4. **パスワードを設定** を選び、**新しいパスワード** と **パスワードの確認** に 8 文字以上を入力して、**パスワードを保存** を選びます。
5. 次回起動時は `--generate-token` を省き、直接接続には保存済みパスワードを使います。リモートアクセスを有効にする前に、[信頼された HTTPS](remote-access.md) を設定してください。ループバック HTTP の初期設定コマンドは、リモート配備用コマンドではありません。
初期設定は、ホスト自身のループバックリスナーからのみ受け付け、LAN クライアントやリモートコントロールの受信経路からは受け付けません。セットアップでは既定のループバックバインドを維持してください。期限切れ/使用済みトークンには、初期設定での新たな起動が必要です。永続パスワードが既にある場合、初期設定セッションでは代わりに **パスワードを変更** を選べます。
`auth.json` はアプリが管理します。ハッシュの手編集やファイルの公開はしないでください。パスワードが CLI/環境由来の場合、設定画面は置き換えを拒否します。既存の管理対象パスワードを使うには上書きなしで再起動し、新規設定にはローカル初期設定を使います。認証ファイルが読み書きできない場合は、認証無効化ではなく、OS の権限/パスを修正する必要があります。
## ブラウザーセッションと失効 {#sessions}
直接ログインは、バックエンドのメモリ内に不透明なセッションを作成し、`codenomad_session` Cookie(または設定した Cookie 名)を発行します。Cookie は `HttpOnly`、`SameSite=Lax`、範囲 `/` で、HTTPS 発行時は `Secure` です。ブラウザーセッション Cookie であり、バックエンドの再起動でメモリ内セッションは無効になります。要求されたら、その場で再認証し、失敗した変更操作を再送しないでください。
パスワード変更は、以後の認証情報チェックを変えますが、発行済みの直接セッションやリモートコントロール端末を無効化 **しません**。侵害が疑われる場合:
1. ネットワーク公開を制限し、ホストで新しいパスワードを設定するか、実行時の秘密情報を変更して再起動します。
2. バックエンドを再起動して、既存の直接セッションを無効化します。
3. **リモートコントロール → ペアリング済み端末** で、不明な端末を別途 **取り消す** 操作を行います。経路全体を即座に切断する必要があれば、リモートコントロールを停止します。
4. 影響したファイル、プロバイダーアカウント、OpenCode ネイティブのアクティビティを確認します。アクセスを止めても、受け付け済みの作業は巻き戻りません。
独自の未使用 30 日の期限切れと 5 分のペアリングリンクは、[リモートコントロール](remote-control.md)を参照してください。パスワード変更は端末失効ではなく、トンネル停止は端末削除ではありません。
## 通信とリスナーの公開を保護する {#transport}
直接リモートアクセスには、信頼された HTTPS を使用します。平文 HTTP は、その区間を観測できる人にパスワード、セッション Cookie、作業内容をさらします。リバースプロキシで TLS を終端する場合、バックエンドとの接続はループバックや保護されたネットワークに置いてください。プロキシの TLS は、公開された上流 HTTP 接続を暗号化しません。
`--dangerously-skip-auth`/`CODENOMAD_SKIP_AUTH` は、CodeNomad の直接リスナーのログインを無効にし、リクエストを認証済みと扱います。サーバーを安全に公開できるようにするもの **ではありません**。強制的な境界保護なしで到達できるリスナーは、到達できる全員にアクセスを与えます。VPN 接続だけでは、信頼できる VPN ユーザーと信頼できないユーザーを区別しません。すべてのアクセス経路を独立して設計・検証していない限り、認証を有効にしてください。このフラグを使っても、リモートコントロールにはペアリング済み端末が必要です。
[バインド表と TLS 手順](remote-access.md)、特にスタンドアロン HTTP 専用モードを確認してください。このモードは `--host` に従い、ループバック以外に平文を公開する場合があります。証明書エラーを検証の無効化で解決しないでください。
**`CODENOMAD_SKIP_AUTH=false` は、`--dangerously-skip-auth` を指定しない限り認証を有効に保ちます。** `1`、`true`、`yes`、`on` は認証のバイパスを有効にし、大文字・小文字と前後の空白は無視されます。`0`、`false`、`no`、`off`、空または空白のみの値、未定義の変数ではバイパスは無効のままです。それ以外の値では、CLI フラグを指定してもサーバーは起動しません。フラグは有効な無効化値より優先します。[CLI リファレンス](server.md#cli-reference)を参照してください。
## ホストの境界を理解する {#host-boundary}
`--workspace-root` は開けるワークスペースを制限し、`--unrestricted-root` は参照を緩和します。どちらも OS の隔離領域、コンテナー、ファイルシステムのサンドボックスではなく、許可されたネイティブツールの動作を制限しません。エージェント、シェルコマンド、プラグイン、MCP ツールは、実行ホストの権限と、それぞれ設定した認証情報で動作します。
[SideCar](browser-sidecars.md) は信頼された追加機能です。CodeNomad は自身のサインイン Cookie とペアリング済み端末の Cookie を SideCar サービスに渡しませんが、SideCar のページは CodeNomad と同じオリジンで読み込まれ、そのスクリプトはサインイン済みのセッションで操作できます。CodeNomad 自体と同程度に信頼できるサービスだけを登録してください。
実際の分離が必要なら、OS アカウント、コンテナー/VM、上流の権限設定を使用してください。1 つのタブしか見えないはずだという期待だけで、端末にアクセスを与えないでください。サーバー設定と共有 OpenCode サービスは、他の会話/プロジェクトに影響する場合があります。それぞれの境界について、[OpenCode のセットアップ](opencode.md)、[権限](permissions.md)、[拡張機能](extensions.md)を参照してください。
## 認証情報と診断情報を非公開にする {#privacy}
プロバイダー接続とグローバルな会話ストレージは OpenCode が管理します。CodeNomad は、対応する使用量連携のため、接続メタデータと選択した認証情報をサーバー側で読み取ります。ブラウザー API はプロバイダーの秘密値を返しません。外部管理の OAuth ログイン更新は管理元の責任であり、CodeNomad はその更新トークンを交換しません。[プロバイダー](providers.md)を参照してください。
| 情報 | 扱い |
| --- | --- |
| パスワード、初期設定トークン、ペアリングリンク、Cookie | Issue、スクリーンショット、シェルの記録、共有ログに貼り付けないでください。 |
| `auth.json`、TLS 秘密鍵、トンネル識別情報、設定の秘密情報 | OS 権限と暗号化バックアップで保護し、サポートのためにディレクトリ全体をアップロードしないでください。 |
| 会話テキスト、添付、ワークスペースパス、リモートアドレス | 人、プロジェクト、インフラを特定する場合があるため、共有前に確認・伏せ字にしてください。 |
| プロバイダーキーと音声の認証情報 | 意図した設定/認証管理元だけに入力し、どのプロバイダーにデータが送られるか確認します。[音声](voice.md)を参照してください。 |
| debug/trace ログとネットワークキャプチャ | 必要な分だけ収集し、ローカルで確認して報告前に伏せ字にします。下流ツールの出力に秘密がないとは想定しないでください。 |
**設定 → 情報 → バグを報告** は、リスナー、アドレス、パス、認証情報、会話内容を事前入力せず、範囲を限定した診断を準備します。自分で追加する内容も、送信前に確認してください。[不具合報告とソースビルド](support.md#report-a-bug)を参照してください。