第6章: 情報エントロピーとシステム監視 - パスワードセキュリティとオブザーバビリティの計算機科学的基盤
6.1 情報エントロピーとパスワード強度
Shannonのエントロピー理論
1948年、Claude Shannonは論文"A Mathematical Theory of Communication"で情報エントロピーの概念を導入しました。エントロピーは、メッセージに含まれる「不確実性」または「情報量」を測定します。
エントロピーの数学的定義:
H = -Σ p(x) log₂ p(x)
H: エントロピー(ビット単位)
p(x): 各シンボルの出現確率
log₂: 2を底とする対数
例: コイン投げ
表: p = 0.5
裏: p = 0.5
H = -(0.5 × log₂(0.5) + 0.5 × log₂(0.5))
= -(0.5 × (-1) + 0.5 × (-1))
= 1 ビット
Shannonのエントロピーは、パスワードの強度を定量化するための基礎を提供します。
パスワードエントロピー
パスワードのエントロピーは、攻撃者がパスワードを推測するために必要な試行回数を示します:
パスワードエントロピー = log₂(可能な組み合わせの数)
文字集合:
- 数字のみ(0-9): 10文字
- 小文字のみ(a-z): 26文字
- 大文字+小文字: 52文字
- 大文字+小文字+数字: 62文字
- ASCII印刷可能文字: 95文字
例: 8文字のパスワード
数字のみ: log₂(10⁸) ≈ 26.6ビット
小文字のみ: log₂(26⁸) ≈ 37.6ビット
大文字+小文字+数字: log₂(62⁸) ≈ 47.6ビット
ASCII: log₂(95⁸) ≈ 52.6ビット
エントロピーとセキュリティの関係:
エントロピー 推定クラッキング時間(10億回/秒)
30ビット 約1秒
40ビット 約18分
50ビット 約13日
60ビット 約36年
70ビット 約37,000年
80ビット 約3,800万年
推奨: 最低60ビット以上のエントロピー
パスワード品質の多角的評価
エントロピーだけでは不十分です。実際のパスワード強度は複数の要因に依存します:
1. 辞書攻撃への耐性
弱い: "password123"(辞書に存在)
強い: "x7Km9$Lp2!" (ランダム)
2. パターン予測可能性
弱い: "qwerty", "12345678"(キーボードパターン)
弱い: "Alice1990" (名前+年)
強い: パターンのないランダム文字列
3. 文字クラスの多様性
弱い: "ALLCAPS" (1クラス)
中: "MixedCase" (2クラス)
強い: "Mix3d@Case!" (4クラス)
Born2berootのパスワード要件は、これらの要因を考慮しています。
6.2 パスワードクラッキングの理論
ブルートフォース攻撃の計算量
ブルートフォース攻撃は、すべての可能なパスワードを試行します:
時間計算量: O(n^m)
n: 文字集合のサイズ
m: パスワードの長さ
空間計算量: O(1)
メモリはほぼ不要
例: 8文字のパスワード(62文字の文字集合)
組み合わせ: 62⁸ = 218,340,105,584,896
1秒間に10億回試行: 約2.5日
10文字: 62¹⁰ ≈ 839京
1秒間に10億回試行: 約26,600年
パスワード長の重要性: 2文字追加するだけで、計算時間が約4,000倍になります。
レインボーテーブル攻撃
1980年、Martin Hellmanは時間-メモリトレードオフ攻撃を提案しました。
従来のアプローチ:
ハッシュテーブル(事前計算):
"password" → 5f4dcc3b5aa765d61d8327deb882cf99
"123456" → e10adc3949ba59abbe56e057f20f883e
...
ストレージ: O(n) - すべてのハッシュを保存
検索時間: O(1) - ハッシュ値で検索
レインボーテーブル(Philippe Oechslin, 2003):
チェーン構造:
平文₁ → ハッシュ₁ → 縮約₁ → 平文₂ → ハッシュ₂ → ... → 平文ₙ
始点と終点のみ保存:
ストレージ: O(n/m) - チェーン長mで削減
検索時間: O(m) - チェーンを辿る必要
トレードオフ:
- より多くの計算 → 少ないストレージ
- 少ない計算 → 多くのストレージ
ソルト(Salt)による防御
1976年、UNIXはソルトを導入しました。ソルトはパスワードに追加されるランダムな値です:
ソルトなし:
Hash("password") = 5f4dcc3b5aa765d61d8327deb882cf99
すべてのユーザーが同じハッシュを持つ
ソルトあり:
Salt₁ = "abc123"
Salt₂ = "xyz789"
Hash(Salt₁ + "password") = 7a68b60a...
Hash(Salt₂ + "password") = 9c3d2e1f...
同じパスワードでも異なるハッシュ
レインボーテーブルは無効化:
各ソルトに対して別のテーブルが必要
ソルト空間が大きければ、事前計算は不可能
鍵導出関数(KDF)
現代のパスワードハッシュは鍵導出関数(Key Derivation Function)を使用します。これらは意図的に計算コストを高くします:
PBKDF2(Password-Based Key Derivation Function 2, 2000):
DK = PBKDF2(Password, Salt, Iterations, KeyLength)
例: 10,000反復
1回のハッシュ: 1μs
10,000反復: 10ms
ブルートフォース: 100回/秒に低下
bcrypt(1999, OpenBSD):
特徴:
- Blowfish暗号に基づく
- コスト係数で調整可能
- メモリ使用量が一定
例: コスト10
2¹⁰ = 1,024反復
約100ms/ハッシュ
scrypt(2009, Colin Percival):
特徴:
- メモリハード
- GPUベースの攻撃に耐性
- 時間とメモリの両方を消費
パラメータ:
N: CPUコスト
r: メモリコスト
p: 並列度
Argon2(2015, Password Hashing Competition優勝):
バリアント:
- Argon2d: サイドチャネル攻撃に脆弱だがGPU耐性が高い
- Argon2i: サイドチャネル攻撃に耐性
- Argon2id: ハイブリッド(推奨)
パラメータ:
m: メモリ使用量(KB)
t: 反復回数
p: 並列度
6.3 PAMパスワード品質モジュール
pam_pwqualityの設計
第3章で学んだPAMフレームワークの一部であるpam_pwqualityは、パスワード品質を強制します。
┌─────────────────────────────────────────────────┐
│ passwdコマンド │
└────────────────────┬────────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ PAM認証フレームワーク │
│ ┌─────────────────────────────────────────┐ │
│ │ pam_pwquality.so │ │
│ │ ┌────────────────────────────────┐ │ │
│ │ │ 長さチェック (minlen) │ │ │
│ │ │ 文字クラスチェック (ucredit等) │ │ │
│ │ │ 辞書チェック (dictcheck) │ │ │
│ │ │ 類似性チェック (difok) │ │ │
│ │ │ パターンチェック (maxrepeat) │ │ │
│ │ └────────────────────────────────┘ │ │
│ └─────────────────────────────────────────┘ │
└────────────────────┬────────────────────────────┘
↓
パスワード受け入れ/拒否
クレジットシステム
pam_pwqualityは「クレジット」システムでパスワード長を評価します:
基本長: minlen = 10
クレジット(文字クラスで追加される長さ):
ucredit: 大文字のクレジット
lcredit: 小文字のクレジット
dcredit: 数字のクレジット
ocredit: 記号のクレジット
例: ucredit=-1, dcredit=-1, minlen=10
「-1」は「最低1文字必須」を意味
パスワード "Password1"(9文字):
基本長: 9
大文字クレジット: +1
数字クレジット: +1
実効長: 9 + 1 + 1 = 11 ≥ 10 → 合格
CrackLibによる辞書チェック
pam_pwqualityは内部でCrackLibを使用し、辞書攻撃に脆弱なパスワードを検出します:
辞書ファイル: /usr/share/dict/words
/usr/share/cracklib/pw_dict.*
チェック項目:
1. 辞書に完全一致
2. 大文字小文字を無視した一致
3. 逆順の一致
4. 数字の置換(a→4, e→3等)
5. 一般的な変形パターン
6.4 システム監視の理論
オブザーバビリティの三本柱
現代のシステム監視はオブザーバビリティ(Observability)の概念に基づいています。制御理論から借用された概念で、「外部出力からシステムの内部状態をどれだけ推測できるか」を示します。
三本柱:
1. メトリクス(Metrics)
- 数値で表現される時系列データ
- CPU使用率、メモリ使用量、接続数
- 例: monitoring.shで収集するデータ
2. ログ(Logs)
- イベントの記録
- タイムスタンプ付きのテキストメッセージ
- 例: /var/log/syslog, /var/log/auth.log
3. トレース(Traces)
- リクエストの経路を追跡
- 分散システムでの因果関係
- 例: SSHセッションの開始から終了まで
メトリクスの種類
Born2berootの監視スクリプトで収集するメトリクスは、以下のカテゴリに分類されます:
カウンター(Counter):
単調増加する値
例:
- sudoコマンド実行回数
- システム起動からの経過時間
- 処理されたパケット数
ゲージ(Gauge):
任意に上下する値
例:
- 現在のCPU使用率
- 現在のメモリ使用量
- 現在の接続数
ヒストグラム(Histogram):
値の分布
例:
- リクエスト応答時間の分布
- ディスクI/O遅延の分布
/procファイルシステム
Linuxカーネルはprocfsを通じてシステム情報を公開します:
/proc/
├── cpuinfo # CPU情報
├── meminfo # メモリ情報
├── loadavg # 負荷平均
├── uptime # 稼働時間
├── version # カーネルバージョン
├── net/ # ネットワーク統計
│ ├── dev # インターフェース統計
│ └── tcp # TCP接続
└── [pid]/ # プロセス情報
├── status # プロセス状態
├── fd/ # ファイル記述子
└── stat # プロセス統計
設計思想(Plan 9の影響):
"Everything is a file"
- システム情報をファイルとして公開
- 標準的なI/O操作でアクセス可能
- シェルスクリプトで簡単に利用可能
6.5 スケジューリング理論
cronデーモンの歴史
cronは1975年にAT&T Bell Labsで開発されました。名前はギリシャ語の「chronos(時間)」に由来します。
cronの動作原理:
┌─────────────────────────────────────────────────┐
│ cronデーモン │
│ ┌──────────────────────────────────────────┐ │
│ │ 1分ごとに起床 │ │
│ │ ↓ │ │
│ │ crontabファイルを読み込み │ │
│ │ ↓ │ │
│ │ 現在時刻とマッチするエントリを検索 │ │
│ │ ↓ │ │
│ │ マッチしたコマンドを実行 │ │
│ │ ↓ │ │
│ │ 次の分まで待機 │ │
│ └──────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
crontab構文
# ┌───────────── 分 (0 - 59)
# │ ┌───────────── 時 (0 - 23)
# │ │ ┌───────────── 日 (1 - 31)
# │ │ │ ┌───────────── 月 (1 - 12)
# │ │ │ │ ┌───────────── 曜日 (0 - 7, 0と7は日曜)
# │ │ │ │ │
# * * * * * コマンド
特殊文字:
* : すべての値
*/n : nごと
a-b : 範囲(aからbまで)
a,b,c : リスト
例:
0 * * * * # 毎時0分
*/15 * * * * # 15分ごと
0 9 * * 1-5 # 平日午前9時
0 0 1 * * # 毎月1日の午前0時
systemdタイマー(現代の代替)
現代のLinuxでは、systemdタイマーがcronの代替として使用されることがあります:
利点:
- ログがjournaldに統合
- 依存関係を管理可能
- より細かい制御(ランダム遅延など)
欠点:
- 設定が複雑
- 複数のファイルが必要
Born2berootでは伝統的なcronを使用
---
6.6 Born2berootパスワードポリシーの実装
理論的基盤を理解したところで、Born2berootのパスワードポリシーを実装します。
/etc/login.defsの設定
# バックアップ
sudo cp /etc/login.defs /etc/login.defs.backup
# 編集
sudo vim /etc/login.defs
# 以下の行を変更:
PASS_MAX_DAYS 30 # 最大有効日数(30日)
PASS_MIN_DAYS 2 # 最小変更間隔(2日)
PASS_WARN_AGE 7 # 警告日数(7日前)
理論的根拠:
- 30日: パスワードが漏洩した場合の被害を限定
- 2日: パスワードサイクル攻撃を防止
- 7日: ユーザーに変更の準備時間を与える
既存ユーザーへの適用
# ユーザーにパスワードポリシーを適用
sudo chage -M 30 username # 最大30日
sudo chage -m 2 username # 最小2日
sudo chage -W 7 username # 警告7日前
# rootにも適用
sudo chage -M 30 root
sudo chage -m 2 root
sudo chage -W 7 root
# 確認
sudo chage -l username
pam_pwqualityの設定
# libpam-pwqualityをインストール
sudo apt install libpam-pwquality -y
# PAM設定ファイルを編集
sudo vim /etc/pam.d/common-password
# 以下の行を変更:
password requisite pam_pwquality.so retry=3 minlen=10 ucredit=-1 dcredit=-1 maxrepeat=3 reject_username difok=7 enforce_for_root
設定の理論的根拠:
| オプション | 値 | 理論的根拠 | |-----------|-----|-----------| | minlen=10 | 10文字 | 62¹⁰ ≈ 60ビットエントロピー | | ucredit=-1 | 大文字必須 | 文字集合を拡大 | | dcredit=-1 | 数字必須 | 文字集合を拡大 | | maxrepeat=3 | 3連続まで | パターン予測を困難に | | reject_username | 有効 | 辞書攻撃対策 | | difok=7 | 7文字差 | パスワード再利用を防止 | | enforce_for_root | 有効 | rootも例外なし |
6.7 システム監視スクリプトの実装
monitoring.shの設計
第6.4節の理論に基づき、システムのメトリクスを収集するスクリプトを作成します:
sudo vim /usr/local/bin/monitoring.sh
#!/bin/bash
# =============================================================================
# Born2beroot Monitoring Script
# 理論的根拠: 第6.4節 オブザーバビリティの三本柱
# =============================================================================
# --- メトリクス収集 ---
# 1. Architecture - uname(2)システムコールの出力
# カーネルバージョンとアーキテクチャ情報
ARCH=$(uname -a)
# 2. Physical CPUs - /proc/cpuinfo からphysical_idをカウント
# SMTを考慮した物理コア数
CPU_PHYSICAL=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
# 3. Virtual CPUs - /proc/cpuinfo のprocessorエントリ数
# 論理プロセッサ数(ハイパースレッディング含む)
CPU_VIRTUAL=$(grep "^processor" /proc/cpuinfo | wc -l)
# 4. Memory Usage - /proc/meminfo から計算
# ゲージメトリクス: 現在のメモリ使用状況
RAM_TOTAL=$(free -m | awk '$1 == "Mem:" {print $2}')
RAM_USED=$(free -m | awk '$1 == "Mem:" {print $3}')
RAM_PERCENT=$(free | awk '$1 == "Mem:" {printf("%.2f"), $3/$2*100}')
# 5. Disk Usage - df(1)の出力をパース
# ファイルシステム使用量の合計
DISK_TOTAL=$(df -Bg | grep '^/dev/' | grep -v '/bootスクリプトの設定
# 実行権限を付与
sudo chmod 755 /usr/local/bin/monitoring.sh
# 所有者をrootに変更
sudo chown root:root /usr/local/bin/monitoring.sh
# テスト実行
sudo /usr/local/bin/monitoring.sh
6.8 cronジョブの設定
cronの設定
# rootのcrontabを編集
sudo crontab -e
# 以下の行を追加:
*/10 * * * * /usr/local/bin/monitoring.sh
設定の意味:
/10: 10分ごと(0, 10, 20, 30, 40, 50分)
- 残りの
: すべての時、日、月、曜日
cronの制御
# cronサービスの状態確認
sudo systemctl status cron
# cronサービスの停止(Defense時に使用)
sudo systemctl stop cron
# cronサービスの開始
sudo systemctl start cron
# cronログの確認
sudo grep CRON /var/log/syslog | tail -10
6.9 AppArmorの確認
AppArmorとMACセキュリティ
第3章で学んだMAC(強制アクセス制御)の実装として、DebianではAppArmorがデフォルトで有効です:
# AppArmorの状態確認
sudo aa-status
# 出力例:
# apparmor module is loaded.
# 15 profiles are loaded.
# 15 profiles are in enforce mode.
# AppArmorサービスの確認
sudo systemctl status apparmor
6.10 Defense準備
理論と実践の対応
Defense時に説明できるよう、各設定の理論的根拠を整理します:
1. パスワードポリシー
要件: 10文字以上、大文字・数字必須
理論: Shannonエントロピー、約60ビット以上を確保
実装: pam_pwquality.so
2. パスワード有効期限
要件: 30日で期限切れ
理論: 侵害された場合の被害期間を限定
実装: /etc/login.defs, chage
3. sudo設定
要件: ログ記録、試行回数制限
理論: 完全仲介の原則、監査とアカウンタビリティ
実装: /etc/sudoers
4. SSH設定
要件: ポート4242、rootログイン禁止
理論: 多層防御、最小権限の原則
実装: /etc/ssh/sshd_config
5. ファイアウォール
要件: ポート4242のみ開放
理論: デフォルト拒否、最小権限
実装: UFW
必須操作の確認
# 1. ユーザー管理
sudo adduser evaluator
sudo usermod -aG user42 evaluator
sudo usermod -aG sudo evaluator
sudo userdel -r evaluator
# 2. ホスト名変更
hostname
sudo hostnamectl set-hostname new-hostname42
# 3. パーティション確認
lsblk
sudo lvdisplay
# 4. sudoログ確認
sudo cat /var/log/sudo/sudo.log
sudo grep -c 'COMMAND' /var/log/sudo/sudo.log
# 5. UFW管理
sudo ufw status numbered
sudo ufw allow 8080/tcp
sudo ufw delete allow 8080/tcp
# 6. SSH確認
sudo systemctl status ssh
sudo grep Port /etc/ssh/sshd_config
# 7. cron制御
sudo systemctl stop cron
sudo systemctl start cron
# 8. 監視スクリプト実行
sudo /usr/local/bin/monitoring.sh
6.11 最終チェックリスト
システム設定
- [ ] ホスト名が
[login]42形式
- [ ] GUIなし(コマンドラインのみ)
- [ ] 暗号化パーティション(2つ以上)
- [ ] LVM使用
ユーザー・グループ
- [ ] ログインユーザーがsudoとuser42グループに所属
- [ ] ユーザーの作成・削除が可能
sudo設定
- [ ] passwd_tries=3
- [ ] logfile, log_input, log_output
- [ ] requiretty
- [ ] secure_path
SSH
- [ ] ポート4242
- [ ] PermitRootLogin no
- [ ] SSH接続可能
ファイアウォール
- [ ] UFW有効
- [ ] ポート4242のみ開放
パスワードポリシー
- [ ] PASS_MAX_DAYS 30
- [ ] PASS_MIN_DAYS 2
- [ ] PASS_WARN_AGE 7
- [ ] pam_pwquality設定済み
監視
- [ ] monitoring.sh作成済み
- [ ] cronで10分ごとに実行
セキュリティ
- [ ] AppArmor有効
6.12 理論と実践の統合
この章で学んだ概念の関係:
情報理論
├── Shannonエントロピー(1948)
│ └── パスワード強度の定量化
├── 時間-メモリトレードオフ(1980)
│ └── レインボーテーブル対策 → ソルト
└── 鍵導出関数
└── PBKDF2, bcrypt, scrypt, Argon2
システム監視
├── オブザーバビリティの三本柱
│ ├── メトリクス → monitoring.sh
│ ├── ログ → sudo.log, syslog
│ └── トレース → journalctl
├── /procファイルシステム
│ └── カーネル情報の公開
└── cronスケジューリング
└── 10分ごとの監視
Born2beroot実装
├── パスワードポリシー
│ ├── /etc/login.defs
│ └── pam_pwquality.so
├── 監視スクリプト
│ └── /usr/local/bin/monitoring.sh
└── cronジョブ
└── */10 * * * *
---
おわりに
Born2berootプロジェクトを通じて、以下の計算機科学の基礎を学びました:
仮想化理論: Popek-Goldberg要件、ハイパーバイザー
ストレージ抽象化: デバイス管理、LVM、LUKS暗号化
アクセス制御: Lampsonマトリックス、UNIX権限、PAM
暗号理論: 公開鍵暗号、SSH プロトコル
ネットワークセキュリティ: netfilter、ステートフルファイアウォール
情報理論: パスワードエントロピー、鍵導出関数 これらの知識は、将来のシステム管理やセキュリティエンジニアリングの基盤となります。
Good luck with your defense!
| awk '{ft += $2} END {print ft}')
DISK_USED=$(df -Bm | grep '^/dev/' | grep -v '/bootスクリプトの設定
___CODE_BLOCK_31___
6.8 cronジョブの設定
cronの設定
___CODE_BLOCK_32___
設定の意味:
/10: 10分ごと(0, 10, 20, 30, 40, 50分)
- 残りの
: すべての時、日、月、曜日
cronの制御
___CODE_BLOCK_33___
6.9 AppArmorの確認
AppArmorとMACセキュリティ
第3章で学んだMAC(強制アクセス制御)の実装として、DebianではAppArmorがデフォルトで有効です:
___CODE_BLOCK_34___
6.10 Defense準備
理論と実践の対応
Defense時に説明できるよう、各設定の理論的根拠を整理します:
1. パスワードポリシー
___CODE_BLOCK_35___
2. パスワード有効期限
___CODE_BLOCK_36___
3. sudo設定
___CODE_BLOCK_37___
4. SSH設定
___CODE_BLOCK_38___
5. ファイアウォール
___CODE_BLOCK_39___
必須操作の確認
___CODE_BLOCK_40___
6.11 最終チェックリスト
システム設定
- [ ] ホスト名が
[login]42形式
- [ ] GUIなし(コマンドラインのみ)
- [ ] 暗号化パーティション(2つ以上)
- [ ] LVM使用
ユーザー・グループ
- [ ] ログインユーザーがsudoとuser42グループに所属
- [ ] ユーザーの作成・削除が可能
sudo設定
- [ ] passwd_tries=3
- [ ] logfile, log_input, log_output
- [ ] requiretty
- [ ] secure_path
SSH
- [ ] ポート4242
- [ ] PermitRootLogin no
- [ ] SSH接続可能
ファイアウォール
- [ ] UFW有効
- [ ] ポート4242のみ開放
パスワードポリシー
- [ ] PASS_MAX_DAYS 30
- [ ] PASS_MIN_DAYS 2
- [ ] PASS_WARN_AGE 7
- [ ] pam_pwquality設定済み
監視
- [ ] monitoring.sh作成済み
- [ ] cronで10分ごとに実行
セキュリティ
- [ ] AppArmor有効
6.12 理論と実践の統合
この章で学んだ概念の関係:
___CODE_BLOCK_41___
---
おわりに
Born2berootプロジェクトを通じて、以下の計算機科学の基礎を学びました:
- 仮想化理論: Popek-Goldberg要件、ハイパーバイザー
- ストレージ抽象化: デバイス管理、LVM、LUKS暗号化
- アクセス制御: Lampsonマトリックス、UNIX権限、PAM
- 暗号理論: 公開鍵暗号、SSH プロトコル
- ネットワークセキュリティ: netfilter、ステートフルファイアウォール
- 情報理論: パスワードエントロピー、鍵導出関数
これらの知識は、将来のシステム管理やセキュリティエンジニアリングの基盤となります。
Good luck with your defense!
| awk '{ut += $3} END {print ut}')
DISK_PERCENT=$(df -Bm | grep '^/dev/' | grep -v '/bootスクリプトの設定
___CODE_BLOCK_31___
6.8 cronジョブの設定
cronの設定
___CODE_BLOCK_32___
設定の意味:
/10: 10分ごと(0, 10, 20, 30, 40, 50分)
- 残りの
: すべての時、日、月、曜日
cronの制御
___CODE_BLOCK_33___
6.9 AppArmorの確認
AppArmorとMACセキュリティ
第3章で学んだMAC(強制アクセス制御)の実装として、DebianではAppArmorがデフォルトで有効です:
___CODE_BLOCK_34___
6.10 Defense準備
理論と実践の対応
Defense時に説明できるよう、各設定の理論的根拠を整理します:
1. パスワードポリシー
___CODE_BLOCK_35___
2. パスワード有効期限
___CODE_BLOCK_36___
3. sudo設定
___CODE_BLOCK_37___
4. SSH設定
___CODE_BLOCK_38___
5. ファイアウォール
___CODE_BLOCK_39___
必須操作の確認
___CODE_BLOCK_40___
6.11 最終チェックリスト
システム設定
- [ ] ホスト名が
[login]42形式
- [ ] GUIなし(コマンドラインのみ)
- [ ] 暗号化パーティション(2つ以上)
- [ ] LVM使用
ユーザー・グループ
- [ ] ログインユーザーがsudoとuser42グループに所属
- [ ] ユーザーの作成・削除が可能
sudo設定
- [ ] passwd_tries=3
- [ ] logfile, log_input, log_output
- [ ] requiretty
- [ ] secure_path
SSH
- [ ] ポート4242
- [ ] PermitRootLogin no
- [ ] SSH接続可能
ファイアウォール
- [ ] UFW有効
- [ ] ポート4242のみ開放
パスワードポリシー
- [ ] PASS_MAX_DAYS 30
- [ ] PASS_MIN_DAYS 2
- [ ] PASS_WARN_AGE 7
- [ ] pam_pwquality設定済み
監視
- [ ] monitoring.sh作成済み
- [ ] cronで10分ごとに実行
セキュリティ
- [ ] AppArmor有効
6.12 理論と実践の統合
この章で学んだ概念の関係:
___CODE_BLOCK_41___
---
おわりに
Born2berootプロジェクトを通じて、以下の計算機科学の基礎を学びました:
- 仮想化理論: Popek-Goldberg要件、ハイパーバイザー
- ストレージ抽象化: デバイス管理、LVM、LUKS暗号化
- アクセス制御: Lampsonマトリックス、UNIX権限、PAM
- 暗号理論: 公開鍵暗号、SSH プロトコル
- ネットワークセキュリティ: netfilter、ステートフルファイアウォール
- 情報理論: パスワードエントロピー、鍵導出関数
これらの知識は、将来のシステム管理やセキュリティエンジニアリングの基盤となります。
Good luck with your defense!
| awk '{ut += $3} {ft+= $2} END {printf("%d"), ut/ft*100}')
# 6. CPU Load - top(1)からCPU使用率を取得
# user + system時間の合計
CPU_LOAD=$(top -bn1 | grep '^%Cpu' | cut -c 9- | xargs | awk '{printf("%.1f%%"), $1 + $3}')
# 7. Last Boot - who(1) -bオプション
# システム起動時刻
LAST_BOOT=$(who -b | awk '$1 == "system" {print $3 " " $4}')
# 8. LVM Status - lsblk(8)でLVMデバイスを検出
# 第2章で設定したLVM構成を確認
LVM_USE=$(if [ $(lsblk | grep "lvm" | wc -l) -eq 0 ]; then echo no; else echo yes; fi)
# 9. TCP Connections - ss(8)でESTABLISHED状態の接続を計数
# カウンターメトリクス
TCP_CONN=$(ss -Hn -t state established | wc -l)
# 10. User Log - users(1)でログインユーザー数
USER_LOG=$(users | wc -w)
# 11. Network - hostname(1)とip(8)からネットワーク情報
# IPv4アドレスとMACアドレス
IP=$(hostname -I | awk '{print $1}')
MAC=$(ip link show | grep "ether" | awk '{print $2}')
# 12. Sudo Commands - journalctl(1)からsudoコマンドを計数
# 第3章で設定した監査ログを使用
SUDO_CMD=$(journalctl _COMM=sudo | grep COMMAND | wc -l)
# --- 出力 ---
# wall(1)コマンドで全端末にブロードキャスト
wall " #Architecture: $ARCH
#CPU physical: $CPU_PHYSICAL
#vCPU: $CPU_VIRTUAL
#Memory Usage: $RAM_USED/${RAM_TOTAL}MB ($RAM_PERCENT%)
#Disk Usage: $DISK_USED/${DISK_TOTAL}Gb ($DISK_PERCENT%)
#CPU load: $CPU_LOAD
#Last boot: $LAST_BOOT
#LVM use: $LVM_USE
#Connections TCP: $TCP_CONN ESTABLISHED
#User log: $USER_LOG
#Network: IP $IP ($MAC)
#Sudo: $SUDO_CMD cmd"
スクリプトの設定
___CODE_BLOCK_31___
6.8 cronジョブの設定
cronの設定
___CODE_BLOCK_32___
設定の意味:
/10: 10分ごと(0, 10, 20, 30, 40, 50分)- 残りの
: すべての時、日、月、曜日
cronの制御
___CODE_BLOCK_33___
6.9 AppArmorの確認
AppArmorとMACセキュリティ
第3章で学んだMAC(強制アクセス制御)の実装として、DebianではAppArmorがデフォルトで有効です:
___CODE_BLOCK_34___
6.10 Defense準備
理論と実践の対応
Defense時に説明できるよう、各設定の理論的根拠を整理します:
1. パスワードポリシー ___CODE_BLOCK_35___
2. パスワード有効期限 ___CODE_BLOCK_36___
3. sudo設定 ___CODE_BLOCK_37___
4. SSH設定 ___CODE_BLOCK_38___
5. ファイアウォール ___CODE_BLOCK_39___
必須操作の確認
___CODE_BLOCK_40___
6.11 最終チェックリスト
システム設定
- [ ] ホスト名が
[login]42形式 - [ ] GUIなし(コマンドラインのみ)
- [ ] 暗号化パーティション(2つ以上)
- [ ] LVM使用
ユーザー・グループ
- [ ] ログインユーザーがsudoとuser42グループに所属
- [ ] ユーザーの作成・削除が可能
sudo設定
- [ ] passwd_tries=3
- [ ] logfile, log_input, log_output
- [ ] requiretty
- [ ] secure_path
SSH
- [ ] ポート4242
- [ ] PermitRootLogin no
- [ ] SSH接続可能
ファイアウォール
- [ ] UFW有効
- [ ] ポート4242のみ開放
パスワードポリシー
- [ ] PASS_MAX_DAYS 30
- [ ] PASS_MIN_DAYS 2
- [ ] PASS_WARN_AGE 7
- [ ] pam_pwquality設定済み
監視
- [ ] monitoring.sh作成済み
- [ ] cronで10分ごとに実行
セキュリティ
- [ ] AppArmor有効
- 仮想化理論: Popek-Goldberg要件、ハイパーバイザー
- ストレージ抽象化: デバイス管理、LVM、LUKS暗号化
- アクセス制御: Lampsonマトリックス、UNIX権限、PAM
- 暗号理論: 公開鍵暗号、SSH プロトコル
- ネットワークセキュリティ: netfilter、ステートフルファイアウォール
- 情報理論: パスワードエントロピー、鍵導出関数
6.12 理論と実践の統合
この章で学んだ概念の関係:
___CODE_BLOCK_41___
---
おわりに
Born2berootプロジェクトを通じて、以下の計算機科学の基礎を学びました:
これらの知識は、将来のシステム管理やセキュリティエンジニアリングの基盤となります。
Good luck with your defense!