dsh-login:dsh-web 登錄門禁插件

前言

DSH 採用“一切皆插件”的架構。本地開發或部署時,若直接暴露 dsh-web 端口,訪問者無需認證即可操作。dsh-login 是一個純主機側 Cordis 插件,通過攔截請求和校驗會話,爲 dsh-web 提供全量請求門禁。

插件簡介

  • 名稱: dsh-login
  • 所有者: ravenli059
  • 類別: admin-security
  • 許可證: MIT

dsh-login 爲 dsh-web 加一道登錄門:打開端口時先輸入用戶名和密碼。賬號信息不落明文:密碼用 scrypt(隨機鹽)哈希,整個憑據文件再用 AES-256-GCM 加密後寫入本地配置文件($DSH_HOME/dsh-login.json,默認 ~/.dsh/dsh-login.json)。

核心功能

  1. 全量請求門禁
    包住 webserver 的 register / registerUpgrade / registerFallback:SPA 回退、/api 傳輸、WebSocket/SSE 升級全部先過會話校驗。
  2. 會話管理
    內存會話 + HttpOnly; SameSite=Strict Cookie(默認 24h,可配置)。
  3. 加密存儲
    憑據文件 AES-256-GCM 加密;密鑰來自環境變量 DSH_LOGIN_SECRET(64 hex 或口令)→ 密鑰文件 $DSH_HOME/dsh-login.key(自動生成)。
  4. 口令安全
    scrypt(N=2^14, r=8, p=1)隨機鹽哈希;用戶名不存在時燒一次假哈希防枚舉。
  5. 爆破防護
    每用戶名+IP 滑動窗口限速(默認 5 次/30s → 429)+ 失敗延時。
  6. 多用戶與 CLI
    支持任意多賬號,登錄按用戶名獨立校驗。自帶獨立 CLI (dsh-login),支持 status, set-user, list-users 等命令。

安裝與啓用

在本地 web profile 下執行以下命令:

# 1) 把本插件加入 web profile
dsh plugin --profile web add link:D:\code\dsh\dsh-login-plugin

# 2) 重啓 dsh web
# 下次打開 http://127.0.0.1:3080 會先看到登錄頁;首次訪問創建管理員賬號。

插件通過 dsh.bundle.patch 掛載,依賴列表只有 cordis / dsh-host-webserver / schemastery 三個 peer。

配置

在 profile 的用戶層給插件行加配置(dsh plugin --profile web add 後會自動把 dsh-login 行插入組合;改配置就編輯 ~/.dsh/profiles/web/cordis.patch.yml 的 - insert: 裏那行 dsh-login):

- id: dsh-login
  config:
    sessionTtlHours: 12        # 會話有效期(小時),默認 24
    bootstrap: denied          # 禁止網頁自助建號,只用 CLI 管賬號
    maxAttempts: 10            # 爆破限速:10 次/30s

主要配置項包括 enabled、storeFile、keyFile、sessionTtlHours、cookieName、bootstrap、maxAttempts 等。主密鑰優先級:環境變量 DSH_LOGIN_SECRET → 密鑰文件 → 明文模式(警告)。

典型用法

登錄後可訪問 /accounts 進行賬號管理(網頁端增刪改改名改密)。CLI 提供更多管理能力:

# 查看狀態
dsh-login status

# 創建或重置用戶
dsh-login set-user --user admin

# 列出所有用戶
dsh-login list-users

運行中改賬號會被 mtime 輪詢熱加載。

部署與安全注意

  1. 純主機側插件:不修改任何 dsh 源碼。
  2. 網絡綁定:默認只綁 127.0.0.1。
  3. 局域網/公網部署:需自行架設 nginx 服務,把服務映射到局域網內使用;建議加 TLS 反向代理並設置強口令。
  4. 密鑰安全:DSH_LOGIN_SECRET 環境變量用於主密鑰派生,建議配置。

目錄與鏈接

  • 目錄頁: https://www.skillhub.cn/plugins/ravenli059/dsh-login
  • GitHub 倉庫: https://github.com/ravenli059/dsh-login
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜