認証
ログインする人間は1人。マルチユーザー認証の仕組みは不要。WordPress と同様に、メールサーバー非依存で完結させる。
| 用途 | 方式 |
|---|---|
| マイページ (Web) | パスワード → セッション Cookie (SQLite に保存) |
| CLI / API | Bearer トークン (DB に保存) |
パスワード保管
- bcrypt ハッシュは DB の
settingsテーブルに保存する(password_hashキー) - メール送信機能は持たないため、パスワード忘れのリカバリは「
murlog.resetファイル + ワンタイムトークン」方式(後述) - これにより SMTP 設定や外部メールサービスへの依存を完全に排除
パスワードリセット
メール非依存のリセットフロー。物理的なファイルアクセス(FTP / SSH)が必要なため、サーバー管理者のみ実行可能。
- VPS / Docker:
murlog resetコマンドを実行。トークン入りのmurlog.resetファイルが生成され、リセット URL が表示される - レンタルサーバー (FTP のみ):
murlog.resetファイルを手動で作成し、中身にランダム文字列を書いて FTP でアップロード - ブラウザで
https://domain/admin/reset?token=<トークン>にアクセス → 新パスワード設定画面 - 設定完了 → DB の
password_hashを更新、last_password_reset_atを記録、ファイル削除を試行
安全性:
murlog.resetファイルの中身(トークン)を知らないとリセット画面にアクセスできない- ファイルの mtime が
last_password_reset_atより古い場合は無視される(使用済みファイルの残留は無害)
レートリミット
IP 別のログイン試行制限。login_attempts テーブルで管理。
| 項目 | 値 |
|---|---|
| 閾値 | 5 回失敗 |
| ロック時間 | 5 分 |
| リセット | ログイン成功時に自動クリア |
| IP 取得 | trusted_proxy 設定で X-Forwarded-For 対応 |
ロック中は正しいパスワードでも拒否される (IP 単位)。1 人用サーバーなので NAT 巻き添えのリスクはない。
TOTP (二要素認証)
RFC 6238 準拠の TOTP。totp パッケージで自前実装 (外部依存なし)。
| 項目 | 値 |
|---|---|
| アルゴリズム | HMAC-SHA1 |
| 桁数 | 6 |
| 期間 | 30 秒 |
| 許容ウィンドウ | 前後 1 ステップ |
| 秘密鍵サイズ | 20 バイト (160 ビット) |
| 保存先 | settings.totp_secret |
セットアップフロー:
totp.setup→ 秘密鍵生成 +otpauth://URI 返却 (仮保存)- 認証アプリで QR スキャン
totp.verify→ 6 桁コード検証 → 成功で有効化 (本保存)
ログインフロー:
totp.statusで TOTP 有効か確認 (public)- 有効時:
auth.loginのtotp_codeパラメータが必須 - TOTP コード不正も失敗カウントに含まれる (レートリミット対象)
パスワード制約
| 項目 | 値 |
|---|---|
| 最小文字数 | 8 |
| 最大文字数 | 128 |
| 文字種 | 小文字・大文字・数字・記号のうち 3 種以上 |
セットアップ・パスワード変更・パスワードリセットの全箇所で ValidatePassword を適用。