對話摘要 2026-09-09
description: 1 note(s) today. name: ‘2026-09-09’
2026-09-09
🔐 每日安全審查(cron 90fda464,13:00)
執行完整審查,結果正常,1 個中風險項(reboot pending)。
✅ 正常項目
- QwenPaw 2.2.0:最新 stable(09-03 release),無已知 CVE;tool_guard enabled(auto_denied_rules 含 SAFETY_CHECKS_DESTRUCTIVE_COMMAND)、sandbox fallback→ASK、MCP whitelist 原生支援、24h 無 governance deny 事件
- 依賴:cryptography 50.0.1(已修 CVE-2026-69247,影響 <50.0.0)、starlette 1.6.0>=1.0.1 floor ✅、crawl4ai 0.9.3 最新
- Host:暴露面 22/443(tcp+udp)/51820/51821 符合預期;fail2ban active、Currently banned 0、Total banned 0;dnf-automatic.timer enabled;SSH PasswordAuthentication=no、PermitRootLogin=without-password
- 容器:80 個 running 無 restarting/unhealthy(cadvisor/openhands 手動停用正常;erpnext-configurator/create-site 係一次性 init Created,正常);無 privileged container;
0.0.0.0host mapping 只有 syncthing 22000/21027 同 wg-easy 51820/udp,無 Web port 映射 host - Cloudflare:oracle-ampere-tunnel healthy(4 conns,fra08/fra12/fra13,client 2026.8.1);Access apps 全部 Authentik IdP(0abce3f9);✅ DNS:benhoweb.com CNAME 全部 tunnel/pages/oracleemail、A 只有 wire(AmneziaWG)、TXT SPF/DKIM/DMARC 正常;(shinggo.xyz A 403 = token 無該 zone DNS 權限,非異常)
⚠️ 發現問題
- [中] Host kernel security update pending reboot:dnf-automatic 已自動安裝 kernel-uek-core 6.12.0-206.104.3.3(security update),但 running kernel 仍係 6.12.0-205.92.4.2 → 需排期 reboot 生效。建議:低流量時段 reboot。
ℹ️ 觀察項(非風險)
- QwenPaw 升 2.2.0 後舊 custom patch 檔案(patch_source.py / secret_redaction.py 等)唔存在,但 2.2.0 內建 governance/tool_guard/secret_store 已覆蓋大部分功能;qwenpaw-upgrade skill 嘅 patch 清單(5 items)係針對舊版,需確認對 2.2.0 仲有冇適用
/sys/kernel/security/lsm喺容器內讀唔到(securityfs 無 mount)→ ResourceGovernor SANDBOX_FALLBACK escalate ASK,已知行為- audit.db 0 bytes(~/.qwenpaw/audit.db 無 table)— qwenpaw.log 無 deny/forbidden events,無攻擊跡象
💡 建議
- 排期 host reboot 令 kernel security update 生效(例如 wiki-weekly-review 之後)
- 其餘照舊:每日審查、R2 備份、fail2ban 監控
- memory/2026-09-09/matrix-selfhost-research.md name: matrix-selfhost-research description: 2026-09-09 Matrix 自架 + MindRoom(兩者均已部署上線):非聯邦 Tuwunel(Rust ~150MB)首選拍板並完成部署——stack 83(tuwunel .86:8008,ghcr.io/matrix-construct/tuwunel:main 1.9.0,repo push a0cde84)、server_name matrix.benhoweb.com(改唔郁要 DB wipe)、https://matrix.benhoweb.com/_matrix/client/versions E2E 200、logs 確認 Listening 8008。Secrets 走 Infisical MATRIX_REGISTRATION_TOKEN(完整值 3f1f8fe269f85368e4a97f2b3f64bb630d5ee96e6fa3d1bf)+ Dockhand 3 步綁定(stack_environment_variables 加 DOCKHAND_SECRET_SELECTOR=/ 並補 environment_id=1 + stack_sources 綁 secret_provider_id=1)——新 git stack secrets 唔會自動注入,係坑位。healthcheck 因 distroless 鏡像冇 shell 改 [“NONE”]。CF Tunnel ingress v104 matrix.benhoweb.com→tuwunel:8008(冇加 Access);DNS CNAME + AdGuard client(.86,count 77)+ list-site(aa90ebf)+ ip-map + MEMORY 全完成。驗證通過:.well-known discovery 200(Element 自動偵測)、測試賬號 test_benho 註冊成功並係首用戶 admin(PL 100)、Admin Room 自動建好(matrix.benhoweb.com Admin Room,id !7oveB9QjSoUi12I9SJ:matrix.benhoweb.com)、管理 bot @conduit(69420)、!admin 指令 E2E 正常。無 Web UI,手機用 Element 經典版/FluffyChat 連 custom server;真賬號 @shinggo:matrix.benhoweb.com 已由 Admin 直接建好(pw 123456 待用戶自改)+ make-user-admin 升 admin + 自動入 Admin Room,用戶喺 fluffychat.im/web 登入成功(FluffyChat 對 token 註冊模式唔顯示「註冊」選項,繞過 UI 直接建號)。用戶清理完成:@test_benho 已 deactivate(token 即時失效 M_UNKNOWN_TOKEN,users list 淨返 @shinggo,server 正式 ready)。MindRoom 已部署(stack 84,容器 .87:8765 dashboard,鏡像 ~700MB 包 chromium):首次 deploy log 混亂只係 docker pull 噪音,但真正問題係「著咗但冇腦」——MATRIX_HOMESERVER/SERVER_NAME、OPENAI_API_KEY(LiteLLM)、MINDROOM_API_KEY 全空;根因 = DOCKHAND_SECRET_SELECTOR environment_id=NULL(Tuwunel 同款坑,MEMORY 有記錄);DB UPDATE environment_id=1 + redeploy 後 5 個 secrets 全部注入成功(LiteLLM key、Matrix homeserver、註冊 token、API key、加密 key)、零 env warning、container healthy;config 重點:allow_federation=false、allow_registration=true+token、allow_encryption=true、grant_admin_to_first_user+create_admin_room;RAM 結算 Tuwunel ~150MB + MindRoom ~300–600MB,Oracle ARM free 1.7GB + swap 4GB 滿係最大 constraint。同晚排查 Dockhand 1.0.46 (09-02) + Infisical latest secrets 機制並更新 container-deploy skill + MEMORY.md:secret provider binding 已產品化——POST/PUT git stacks 正式收 secretProviderId(PATCH 語義,建/改 stack 唔使再手動 UPDATE DB,舊手動綁定只做 fallback);DOCKHAND_SECRET_SELECTOR 仍係保留 special var(source code 證實,未變);🔴 實測 PUT env 新加 variable 後 environment_id 依然 NULL(1.0.43 fix 只保唔 drop 已有、唔 bind 新加;MindRoom 中招根因)——「加 env var 必查 + UPDATE environment_id=1」仍然唔可以慳;PUT env 係全量替換({“variables”:[]} 會清晒)、env var 有 is_secret、secrets 正規全部放 Infisical deploy 時 shell env 注入永不寫 disk(stack_sources.injected_secret_keys 記錄);provider 擴充 1Password/Vault/Doppler、Bitwarden SM、Proton Pass、Azure Key Vault、KeePassXC(1.0.45)、Infisical {{KEY}} 引用 1.0.44 起 resolve 成值。MindRoom dashboard 設定完成(用 MINDROOM_API_KEY 由 Default 做,2026-09-09 晚):/v1 OpenAI-compatible endpoint 全通,兩個坑——① models[].host 對 openai provider 冇效(照打 api.openai.com 撞 401「API keys are not configured」,官方 knob 係 env OPENAI_BASE_URL);② /v1 要 OPENAI_COMPAT_API_KEYS(comma-separated Bearer,冇設任何 key 入唔到)。做咗:Infisical 新增 secret OPENAI_COMPAT_API_KEYS(sk-mindroom-0A1tydtYM0naPblIiuIE7twMGbn0spVX9VgEkGJr_OQ)+ compose 加 OPENAI_BASE_URL=http://litellm:4000/v1(字面值非 secret,照 TZ/LOG_LEVEL 寫法);2 次 deploy commit 266d0e4+f0f4f4 零 env warning、container healthy。E2E 通過:/v1/models 返 auto+assistant、/v1/chat/completions model=assistant 經 LiteLLM free-first 真實回覆(CF Llama-3.1-8B→retry Llama-3.3-70B/Gemini-3-flash)、embedding nemotron-3-embed-1b 正常、Matrix 連接 Tuwunel 未受影響(/api/health healthy,assistant join Lobby)。使用資料:Base URL http://172.21.0.87:8765/v1、Bearer key 見上(已存 Infisical OPENAI_COMPAT_API_KEYS)、Dashboard UI http://172.21.0.87:8765(MINDROOM_API_KEY 登入)。免費 model(CF Llama 8B)間中吐 tool-call artifact(例答「4」多咗句 🔧 schedule [1])係 agent+免費 model 行為非設定問題,想乾淨可關 tools 或轉強 model group。MindRoom domain+Access 收編完成(2026-09-09 晚):mindroom.benhoweb.com CNAME(proxied)+ tunnel config v105 插 mindroom.benhoweb.com→mindroom:8765 rule(catch-all 404 前,tunnel efd0b6f2)+Access app a9847cfc/policy 9f448c9d(Authentik IdP 0abce3f9,登入用統一 auth.benhoweb.com 帳號);用 qwenpaw env Cloudflare_api_key 全權限操作;E2E 未登入 302→shinggo.cloudflareaccess.com login(有別於 homeserver——MindRoom dashboard 有 Access);MEMORY.md 已更新。list-site MindRoom card + AdGuard client 收編完成(2026-09-09 晚,用戶提出嘅最後可選項):AdGuard
mindroomclient .87 實測 deploy 當日已加(fastmcp clients list 確認,MEMORY 之前寫「未做」唔準確已修正,無需重複);list.benhoweb.com 加 MindRoom card(🌐 其他 section、Matrix/Tuwunel card 之後、文字🧠 MindRoom|Matrix 多智能體 AI 助手|mindroom.benhoweb.com、footer → 2026-09-09 更新)repo commite62388c→ CF Pages deploymenteff9e4b9success(13:24),用 deployment JSON url 驗證內容 ✅。教訓:list-site repo private 要 host 流程攞 Infisical GITHUB_PAT_LIST_SITE 先 clone(python 要行 curl,urllib 403);host git 冇設 identity 首次 commit 失敗(push 空轉誤報 PUSH-OK)set repo-localbenho解決;list.benhoweb.com 有 Cloudflare Access 302、curl 無 cookie 拎唔到內容、pages.dev alias 404——驗證一律用 CF Pages API deployment JSON url。⚠️ qwenpaw env 嘅 Github_API_Key(ghp_SCev…)喺 clone error 洩過頭幾個字元(純自己環境記錄),建議輪換;Infisical GITHUB_PAT_LIST_SITE 專用 token 唔受影響。
MindRoom domain + Access 收編(13:20 HKT)
用戶要求:mindroom.benhoweb.com + Cloudflare Access 保護。完成:
- DNS:CNAME
mindroom.benhoweb.com→efd0b6f2-…cfargotunnel.com(proxied,record78cd0762) - Tunnel:remote-managed config v104→v105,insert
{"hostname":"mindroom.benhoweb.com","service":"http://mindroom:8765"}(catch-all 404 前);cloudflared auto reload - Access:app
a9847cfc-0f33-4153-8ff2-d144b7f73890(self_hosted,app_launcher_visible=false)+ app-scoped policy9f448c9d-7acf-4676-aa05-9d76859bb0f7(mindroom-policy,include login_method Authentik IdP0abce3f9,reusable:false 正確) - E2E:未登入 curl → 302
https://shinggo.cloudflareaccess.com/cdn-cgi/access/login/mindroom.benhoweb.com(Access active);內部 originhttp://mindroom:8765/→ 307/login?next=%2F(MindRoom 自身 login,正常) - 用 token:qwenpaw env
Cloudflare_api_key(idb08bb6c6…,同時被 fastmcp CF tools 使用)有 account 全權限(tunnel config GET/PUT + Access apps/policies),唔使經 Infisical - 未做(可選):list-site card + AdGuard client(MEMORY 已記低)
MindRoom list-site card + AdGuard client 收編(09-09 下午)
- AdGuard client:fastmcp adguard_clients 實測
mindroom172.21.0.87 已存在(deploy 當日已加,MEMORY「未做」記錄唔準確)→ 無需再加 - list-site card:repo
shinggo8000/list-site係 private(raw/API 無 auth 讀唔到);clone 失敗教訓——qwenpaw envGithub_API_Key(ghp_SCev…)無權限/無效,要用 InfisicalGITHUB_PAT_LIST_SITE(host/home/opc/scripts/oci-vault-get.sh INFISICAL_SERVICE_TOKEN→ curl infisical.benhoweb.com API,urllib 會 403 但 curl 得——Access UA 差異,要用 subprocess curl) - card 插喺 🌐 其他 section Matrix(Tuwunel)card 之後:
🧠 MindRoom|Matrix 多智能體 AI 助手|mindroom.benhoweb.com;footer 日期 →2026-09-09 更新 - commit
e62388c(host git 要 setuser.name benho/user.email ben.ho@live.hkrepo-local,否則 commit 失敗但 push 空轉返 PUSH-OK 假陽性);CF Pages deploymenteff9e4b9success;aliashttps://eff9e4b9.list-benho.pages.dev驗證 MindRoom card + 日期存在 - ⚠️ list.benhoweb.com 有 Cloudflare Access(curl 302 login)→ 驗證 content 要用 pages.dev deployment alias 或 Pages API;host temp scripts 已清
GitHub PAT 補同步:qwenpaw agent env(21:30 HKT)
用戶:「輪換 PAT, 由你決定點做咧」。
背景:8/14 已輪換 PAT(舊 ghp_SCev… 由用戶 revoke,新 ghp_R8M1… 入 Infisical GITHUB_API_TOKEN/GITHUB_PAT_LIST_SITE + host oracle-arm-stacks remote + n8n credential M2jPuWKjhvOgynvm),但 qwenpaw agent env Github_API_Key(/app/working.secret/envs.json)一直殘留已 revoke 嘅死 token ghp_SCev…——今次 clone list-site 時 error 彈出佢 prefix 先發現;MEMORY 自動精簡 cron(f6cf4ccf)step 3a 每次用佢都 401,8/16 起靠 host git remote fallback 先 backup 到。
決定(唔需要生成新 PAT):洩漏嗰個已 revoke 冇風險;Infisical 兩個 PAT 實測都有效(HTTP 200)。做法 = 清理 + 統一引用:
- 驗證:host script 實測 Infisical
GITHUB_API_TOKEN200 +GITHUB_PAT_LIST_SITE200(token 唔出 stdout)。 - 更新 agent env:
qwenpaw.envs.store.set_env_var("Github_API_Key", <Infisical GITHUB_API_TOKEN 值>)——script 內 ssh host 攞 service token → curl Infisical → set_env_var(全程 token 唔 print)。驗證:prefixghp_R8(確認唔係舊ghp_SCev)+ GitHub /user 200。- ⚠️ envs.json 係 canonical store(restart 時
load_envs_into_environ先 sync 入主 process environ)——QwenPaw restart 前 cron 讀到嘅$Github_API_Key仍係舊值,但有 fallback 兜底,無需特登 restart。
- ⚠️ envs.json 係 canonical store(restart 時
- 加固 cron prompt:
qwenpaw cron update f6cf4ccf --text …step 3a 加 fallback 指引(PUT 401 時用 host oracle-arm-stacks remote 內嵌 PAT 或 Infisical GITHUB_API_TOKEN 重試),驗證 prompt 已含 fallback。 - MEMORY.md:GitHub PAT 行更新為「08-14 輪換;09-09 補同步 qwenpaw env」。
教訓:輪換 PAT 時引用位盤點要包括 qwenpaw agent env(/app/working.secret/envs.json)——8/14 漏咗佢,令死 token 殘留一個月、cron 每次 401。envs.json 加密(ENC:gAAAA…Fernet),唔好手改,用 qwenpaw.envs.store.set_env_var(單 key 更新,atomic + encrypted)。