# セキュリティ設計書

## 概要

本ドキュメントは、space-vim（Vim/NeoVim設定フレームワーク）のセキュリティ設計について記載する。space-vimはWebアプリケーションではなくローカル環境で動作するVimエディタの設定管理ツールであるため、従来のWebセキュリティ（認証・認可・暗号化等）とは異なる観点でのセキュリティ設計を行う。

### プロジェクト概要

- **プロジェクト名**: space-vim
- **バージョン**: 0.9.0
- **ライセンス**: MIT License
- **対象プラットフォーム**: Linux, macOS, Windows
- **動作環境**: Vim/NeoVim エディタ

## 認証設計

### 認証方式

本プロジェクトはローカルで動作するVim設定フレームワークであり、ユーザー認証機能は実装されていない。システムへのアクセス制御は、オペレーティングシステムのファイルシステム権限およびユーザーアカウント管理に依存する。

### セッション管理

| 項目 | 設定値 | 備考 |
| --- | --- | --- |
| セッション有効期限 | N/A | ローカルツールのため該当なし |
| セッション固定化対策 | N/A | ローカルツールのため該当なし |

## 認可設計

### 権限体系

| ロール | 権限 | 説明 |
| --- | --- | --- |
| ユーザー | フルアクセス | Vimの設定ファイルを読み書き可能。OSユーザー権限に依存 |
| システム | 読み取り専用 | インストールスクリプトの実行時にシステムディレクトリへアクセス |

### アクセス制御

space-vimのアクセス制御は以下のディレクトリおよびファイルに対するOSレベルのパーミッションに依存する:

1. **インストールディレクトリ**: `~/.space-vim/` または任意のインストール先
2. **設定ファイル**: `~/.spacevim`（ユーザーカスタマイズファイル）
3. **Vimrc symlink**: `~/.vimrc` または `~/.config/nvim/init.vim`
4. **プラグインディレクトリ**: `~/.vim/plugged/` または `~/.local/share/nvim/plugged/`
5. **プライベート設定**: `private/` ディレクトリ（.gitignoreで除外）

## 通信セキュリティ

| 項目 | 対策 |
| --- | --- |
| HTTPS | プラグインダウンロード時にGitHub（HTTPS）を使用。vim-plugのダウンロード元: `https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim` |
| HSTS | GitHubのHSTS設定に依存 |

### 外部通信

本プロジェクトは以下の場面で外部通信を行う:

1. **インストール時**: vim-plugのダウンロード（curl経由HTTPS）
2. **プラグインインストール時**: GitHubリポジトリからのクローン（git経由）
3. **アップデート時**: space-vimリポジトリからのpull（git経由）

すべての外部通信はHTTPSまたはSSH経由で行われ、平文通信は使用されない。

## データセキュリティ

### 暗号化

| 対象 | 暗号化方式 |
| --- | --- |
| 通信 | HTTPS/TLS（GitHubとの通信） |
| 保存データ | 暗号化なし（ローカル設定ファイルは平文） |

### 機密情報管理

1. **privateディレクトリ**: ユーザーのプライベート設定を格納。`.gitignore`で除外されており、バージョン管理対象外
2. **.gitignore設定**: 以下のファイル・ディレクトリが除外される:
   - `private/*`（プライベート設定）
   - `plugged/*`（ダウンロードしたプラグイン）
   - `tags`（タグファイル）
   - `*.pyc`（コンパイル済みPythonファイル）
3. **GitHub Secrets**: CI/CDでは`secrets.github_token`を使用し、トークンは直接コードに含まれない

## 入出力対策

| 脅威 | 対策 |
| --- | --- |
| XSS | N/A（Webアプリケーションではないため該当なし） |
| SQLインジェクション | N/A（データベースを使用しないため該当なし） |
| CSRF | N/A（Webアプリケーションではないため該当なし） |
| コマンドインジェクション | シェルスクリプトで`set -eo pipefail`を使用し、エラー時に停止 |
| パストラバーサル | シンボリックリンク作成時に明示的なパスを使用 |

### シェルスクリプトセキュリティ

1. **install.sh**:
   - `set -eo pipefail`: エラー発生時にスクリプトを停止
   - ShellCheckによる静的解析（CI/CD）
   - 明示的なパス指定でコマンドインジェクションを防止

2. **ci/script.sh**:
   - vintによるVimScriptの静的解析
   - shellcheckによるシェルスクリプトの検証

## コード品質とセキュリティ検証

### 静的解析ツール

| ツール | 対象 | 用途 |
| --- | --- | --- |
| vim-vint | *.vim | VimScriptの構文・品質チェック |
| ShellCheck | *.sh | シェルスクリプトの脆弱性・バグ検出 |
| reviewdog | Pull Request | GitHubプルリクエストでの自動レビュー |

### CI/CDセキュリティ

GitHub Actionsを使用した継続的インテグレーション:

```yaml
# .github/workflows/ci.yml
- vint: VimScriptの構文チェック
- shellcheck: シェルスクリプトの検証
- install-script: インストールスクリプトのテスト
```

## 監査ログ

| ログ種別 | 記録内容 | 保持期間 |
| --- | --- | --- |
| インストールログ | インストール結果（成功/失敗） | コンソール出力のみ（保存なし） |
| プラグインインストールログ | vim-plugによるプラグインインストール結果 | Vimの`:messages`で確認可能 |

### ログ機能の制限

本プロジェクトは永続的なログ機能を持たない。操作結果はコンソールおよびVimのメッセージバッファに出力される。

## インストール時のセキュリティ考慮事項

### ワンライナーインストール

```bash
bash <(curl -fsSL https://raw.githubusercontent.com/liuchengxu/space-vim/master/install.sh)
```

**セキュリティ注意点**:
- リモートスクリプトを直接実行するため、信頼できるネットワーク環境での実行を推奨
- インストール前にスクリプト内容を確認することを推奨

### Windowsインストール

- `install.cmd`は管理者権限での実行が必要
- PowerShellの実行ポリシーをバイパスして実行

## サプライチェーンセキュリティ

### 依存関係

| 依存 | ソース | セキュリティ考慮 |
| --- | --- | --- |
| vim-plug | GitHub (junegunn/vim-plug) | HTTPSでダウンロード |
| 各種Vimプラグイン | GitHub (各リポジトリ) | git clone経由 |

### 依存プラグインの信頼性

- プラグインは`.spacevim`で明示的に指定されたもののみインストール
- 除外機能（`exclude`オプション）により不要なプラグインを除外可能

## 備考

### 本プロジェクトの特性

space-vimはWebアプリケーションではなく、ローカル環境で動作するVimエディタの設定フレームワークである。そのため:

1. 従来のWebセキュリティ（認証・認可・セッション管理・XSS・CSRF等）は適用対象外
2. セキュリティはOSレベルのファイルシステム権限に依存
3. 外部通信はプラグインダウンロード時のみ発生し、すべてHTTPS/SSH経由

### 推奨セキュリティプラクティス

1. インストールスクリプトを実行する前に内容を確認する
2. 信頼できないVimプラグインを有効化しない
3. `private/`ディレクトリに機密情報を含む設定を配置する場合は適切なパーミッションを設定する
4. 定期的に`make update`でセキュリティ修正を含む更新を適用する
