# セキュリティ設計書

## 概要

本ドキュメントは、oh-my-zsh（Zshシェルフレームワーク）のセキュリティ設計について記述する。oh-my-zshはWebアプリケーションではなく、ローカル環境で動作するシェル設定管理フレームワークであるため、シェルスクリプトおよびローカル環境のセキュリティに特化した設計となっている。

## 認証設計

### 認証方式

oh-my-zshはローカルシェルフレームワークであり、独自の認証機構は実装していない。システムへのアクセス制御はOSレベルの認証（ユーザーログイン）に委譲している。

| 項目 | 方式 | 備考 |
| --- | --- | --- |
| ユーザー認証 | OSレベル認証 | システムログインに依存 |
| 特権操作 | sudo連携 | シェル変更時等にsudo利用 |
| インストーラー権限確認 | user_can_sudo() | sudo権限の有無を確認 |

### セッション管理

| 項目 | 設定値 | 備考 |
| --- | --- | --- |
| セッション有効期限 | シェルセッション依存 | ターミナルセッションに準拠 |
| セッション固定化対策 | 該当なし | Webセッションではないため対象外 |
| コマンド履歴セキュリティ | hist_ignore_space | 先頭スペースでコマンドを履歴から除外 |

## 認可設計

### 権限体系

oh-my-zshはロールベースの認可ではなく、ファイルシステムのパーミッションに基づく権限管理を採用している。

| 権限レベル | 対象 | 説明 |
| --- | --- | --- |
| 所有者 | $ZSH ディレクトリ | oh-my-zshのインストールディレクトリ |
| 書き込み権限 | キャッシュ/カスタムディレクトリ | ユーザーカスタマイズ用 |
| 読み取り専用 | プラグイン/テーマ | システム提供コンポーネント |

### アクセス制御

**ファイル/ディレクトリ権限**

- インストール時に `umask g-w,o-w` を設定し、グループ・その他への書き込み権限を制限
- `compaudit` によるコンプリーションディレクトリのセキュリティ監査
- `ZSH_DISABLE_COMPFIX` による安全でないディレクトリからの読み込み制御

**更新権限**

- 更新処理は `$ZSH` ディレクトリの所有者かつ書き込み権限保持者のみ実行可能
- `[[ ! -w "$ZSH" || ! -O "$ZSH" ]]` による権限チェック

## 通信セキュリティ

| 項目 | 対策 |
| --- | --- |
| HTTPS | GitHubとの通信にHTTPSを使用 |
| API通信 | GitHub API呼び出し時にHTTPSを強制 |
| 非認証プロトコル移行 | git:// から https:// への自動移行 |
| 接続タイムアウト | curl/wget で2秒のタイムアウト設定 |

### リモートURL設定

```
git://github.com/* → https://github.com/* への自動変換
```

## データセキュリティ

### 暗号化

| 対象 | 暗号化方式 |
| --- | --- |
| 通信 | HTTPS/TLS（Git/GitHub通信） |
| 保存データ | 該当なし（シェル設定ファイルは平文） |

### 機密情報管理

**コマンド履歴**

- `hist_ignore_space`: 先頭にスペースを付けたコマンドは履歴に保存されない
- `HISTFILE` のデフォルト位置: `$HOME/.zsh_history`
- 履歴削除時の確認プロンプト実装

**診断ダンプの警告**

```
WARNING: This dump file contains all your zsh and omz configuration files,
so don't share it publicly if there's sensitive information in them.
```

**設定ファイルバックアップ**

- `.zshrc.pre-oh-my-zsh` として既存設定をバックアップ
- タイムスタンプ付きバックアップで上書き防止

## 入出力対策

| 脅威 | 対策 |
| --- | --- |
| XSS | 該当なし（Webアプリケーションではない） |
| SQLインジェクション | 該当なし（データベース不使用） |
| CSRF | 該当なし（Webアプリケーションではない） |
| コマンドインジェクション | 変数のクォーティング、builtinコマンドの優先使用 |
| パス・トラバーサル | 絶対パス使用、ユーザー入力の検証 |

### シェル固有のセキュリティ対策

**シェル実行環境の検証**

- Zshバージョンチェック (`$ZSH_VERSION`)
- エミュレーションモードの検証 (`[[ "$(emulate)" = zsh ]]`)
- 非Zshシェルからの実行防止

**コマンド再定義の検出**

- `compaudit` による不正なコンプリーション定義の検出
- `_omz_diag_dump_check_core_commands()` によるコアコマンド再定義チェック

**ソーシング時の保護**

- `[[ "$ZSH_EVAL_CONTEXT" = *:file ]]` によるソーシング検出
- 意図しないソーシングからの保護

## 監査ログ

| ログ種別 | 記録内容 | 保持期間 |
| --- | --- | --- |
| コマンド履歴 | 実行コマンド、タイムスタンプ | 設定による（デフォルト50000件） |
| 更新履歴 | LAST_EPOCH、EXIT_STATUS、ERROR | 永続（.zsh-updateファイル） |
| Git履歴 | コミット、更新操作 | Gitリポジトリ内 |

### 履歴設定

```zsh
HISTSIZE=50000          # メモリ上の履歴件数
SAVEHIST=10000          # ファイル保存件数
extended_history        # タイムスタンプ付き記録
share_history           # セッション間共有
```

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

### OSSF Scorecard

- GitHub Actionsによるセキュリティスキャン実装
- 定期的なサプライチェーンセキュリティ分析
- SARIFレポートの自動生成

### 依存関係管理

- Gitの安全な設定（autoCRLF、EOL設定）
- fsckエラーの制御設定
- 公式リポジトリ (`ohmyzsh/ohmyzsh`) の自動検証

## インシデントレスポンス

### 脆弱性報告

- 専用セキュリティメール: security@ohmyz.sh
- GitHub Security Advisoriesの利用
- プライベートな脆弱性報告の推奨

### 対応プロセス

1. **トリアージ**: 脆弱性の妥当性・スコープ評価
2. **緩和**: 迅速な悪用防止
3. **開示**: ユーザーへの適切な情報提供
4. **学習**: 改善点の文書化

## 更新セキュリティ

### 自動更新

| モード | 動作 |
| --- | --- |
| prompt | 更新前にユーザー確認（デフォルト） |
| auto | 自動更新 |
| reminder | 更新リマインダー表示 |
| disabled | 自動更新無効 |

### 更新の安全性

- ロックファイルによる並行更新防止 (`$ZSH/log/update.lock`)
- 24時間経過後のロック自動解除
- 更新失敗時のロールバック機能

## 備考

### セキュリティに関する制限事項

1. **ローカル実行環境**: oh-my-zshはローカルシェル環境で動作するため、ネットワークセキュリティの大部分はOSおよびネットワークインフラに依存
2. **サードパーティプラグイン**: カスタムプラグインのセキュリティはユーザー責任
3. **設定ファイル保護**: .zshrcなどの設定ファイルはファイルシステムパーミッションで保護

### 推奨セキュリティ設定

1. `ZSH_DISABLE_COMPFIX=false` を維持（セキュリティチェック有効化）
2. 機密コマンド実行時は先頭にスペースを付与
3. カスタムプラグイン導入前のコードレビュー実施
4. 定期的な `omz update` による最新セキュリティパッチの適用
