對話摘要 2026-08-15


description: 9 note(s) today. name: ‘2026-08-15’

2026-08-15 每日安全審查

結果:⚠️ 有異常(3 高 2 低,已推 Telegram 619760664)

正常

  • QwenPaw 2.1.0 最新 stable;n8n MCP whitelist 6 tools 生效
  • cryptography 48.0.1(Snyk 0 漏洞)、requests/urllib3/certifi 都新版本
  • audit 日誌 24h 無攻擊跡象;fail2ban active;dnf-automatic enabled
  • 70 容器全 Up,無 privileged、無 crash loop
  • CF Tunnel healthy(4 conn);Access 全 Authentik OIDC;DNS 無異常
  • fastmcp 3.4.6 最新、crawl4ai 0.9.2(過 0.8.0 RCE 修復線)

⚠️ 風險項

  1. 【高】QwenPaw sandbox 失效:容器讀唔到 /sys/kernel/security/lsm → audit「sandbox unavailable, running unsandboxed」;agent.json sandbox_enabled: false。建議 compose mount /sys/kernel/security(ro)。
  2. 【高】Custom patches 缺失(2.1.0 升級覆蓋):progressive_disclosure.py、QP_SECRET_REDACTION、task_tracker last_event_at 全唔喺 code。建議 qwenpaw-upgrade skill re-apply + restart,或確認上游原生收錄。
  3. 【高】3x-ui 佔 host 443(0.0.0.0:443→443,Up 44h):MEMORY 記為手動停用容器,依家 Up 兼違反 Web Port 映射政策。建議停用/移除映射。
  4. 【中】syncthing 映射 host 22000/21027(tcp+udp)+ host 原生 syncthing 都聽 22000。建議移除 host port 映射。
  5. 【低】SSH PasswordAuthentication / firewall 規則未能確認(無權限讀);host 見 111/22000 綁 0.0.0.0。建議 root 確認。

跟進(下輪審查對比)

  • 3x-ui / syncthing host port 有冇收返
  • patches 有冇 re-apply(grep -rl QP_SECRET_REDACTION /app --include="*.py")
  • sandbox_enabled 有冇變 true
  • memory/2026-08-15/cloudflare-access-idp-saml-to-oidc-migration-complete.md name: cloudflare-access-idp-saml-to-oidc-migration-complete description: Cloudflare Access IdP 從 SAML 遷移到 Authentik OIDC 已於 2026-08-15 完整完成:修復 blocker(PUT body 缺 type 字段致 12130)、25 個 apps 的 allowed_idps + 19 條 app policies + 2 條 reusable policies(Allow-Portal 被 7 apps 共用 + 1 孤兒)全部 flip 去 OIDC IdP 0abce3f9;App Launcher 額外加返 OIDC;headless browser 實測 Hindsight 登入走 Authentik;清理 Authentik SAML application/provider(pk=2)+ CF SAML IdP b4a79d81;最終 CF 只剩 onetimepin、cloudflare、Authentik (OIDC) 三個 IdP,SAML 零殘留,Warp Login 保留 Email OTP policy 做後備;MEMORY.md 已更新。重要操作細節:reusable policy 要行專用 endpoint /access/policies/{id};Authentik application DELETE 用 slug 而非 pk(pk 會 404);CF Access API 更新 app 要 GET 完整物件改完成個 PUT。
  • memory/2026-08-15/disk-cleanup-survey.md name: disk-cleanup-survey description: 2026-08-15 磁碟清理調查與監控,包括SWAP狀態分析、磁盘清理(已释放大约10GB)、Loki日志管理和QwenPaw安全修復進度。SWAP健康但全满,不建议清理;完成Docker build缓存、临时文件、旧ERPNext卷等共10GB+的磁盘空间释放;调整Loki保留策略(30到7天),日志减至2.3GB;已重启启动QwenPaw Sandbox模式。
  • memory/2026-08-15/infra-ops-notes.md name: infra-ops-notes description: 2026-08-15 記錄:① Documenso 郵件管線測試成功(SPF/DKIM 生效);sign.benhoweb.com 暫停,容器已停止(顯示 502),pg-main 數據庫與證書保留,日後 docker start documenso 即可恢復。② Nextcloud 維護模式修復:34.0.2→34.0.3 更新後 DB 升級未跑(upgrade.disable-web=true)進入維護模式;升級時因全部 131 張表 owner 係舊 user nextcloud_user 而 config 用 oc_admin 卡住(must be owner of table),已將全部表 owner 改返 oc_admin(跳過 sequence)後 occ upgrade 成功(dav 1.40.0),maintenance:mode —off 解除;現版本 34.0.3.2,next.benhoweb.com 正常。③ Infisical Agent Proxy PoC 完成(E2E 驗證通過):credential broker 概念(Agent Vault 後繼,2026-07-30 推出);backend v0.162.19 確認支援(DB 有 proxied_services 表);發現 8/5 已部署好 proxied service github-api(api.github.com,folder /,env Development)+身份 agent-proxy/agent-hermes-1+standalone proxy container(cf_network .64,Up 2 days);E2E 實測成功:agent-hermes-1 經 proxy 打 api.github.com/user 完全唔帶 token,proxy 自動注入 GITHUB_API_TOKEN 返回 200,login=shinggo8000,scopes repo,workflow;關鍵坑:官方 docs 話 Bearer 但源碼實為 Proxy-Authorization: Basic base64(projectId:env/path:jwt)(照 docs 會 407),已寫入 MEMORY.md;部署架構:proxy container 用 AGENT_PROXY_CLIENT_ID + agent container 用 AGENT_CLIENT_ID 行 agent-proxy connect。④ Infisical Agent Proxy 全面收編至 18 services 全部 E2E 通過:第一輪 +4(Hindsight 返回 bank benho 999 facts、Nextcloud WebDAV PROPFIND 207 + X-User-Id shinggo、Cloudflare verify active、Alist WebDAV 207),Nextcloud 將內部 hostname nextcloud-app 加入 trusted_domains(只接受 Host next.benhoweb.com);第二輪盤點 114 secrets 後 +11(AdGuard/Dockhand/Karakeep/ERPNext/Qdrant/Browserless/Grafana/Authentik/Crawl4AI/ntfy/FNS);最終清單:GitHub、LiteLLM、Telegram、Hindsight、Nextcloud、Cloudflare、Alist、AdGuard、Dockhand、Karakeep、ERPNext、Qdrant、Browserless、Grafana、Authentik、Crawl4AI、ntfy、FNS;修正 KARAKEep_API_TOKEN(e 細楷);新增預編碼 secrets NEXTCLOUD_BASIC_AUTH/ALIST_BASIC_AUTH/ADGUARD_BASIC_AUTH/ERPNEXT_API_AUTH;WebDAV 需預先 base64 存 Infisical 再以 prefix 注入;唔適合 broker:OCI/R2(簽名認證)、Azure/LLM keys(經 LiteLLM)、n8n(MCP 已 cover)、Infisical(循環)。⑤ n8n bot 只註冊 /backup 一個指令,/start 無處理屬正常;/compact 有回應(確認壓縮,記憶保留喺 conversation history 可隨時 recall);助手身份為 QwenPaw;晚間澄清 /compact@n8n_shinggo_bot 無反應(n8n bot 冇 /compact),要 QwenPaw 壓縮直接講 /compact 即可。⑥ 新服務收編 Agent Proxy 長期政策確立(用戶指示「以後有新 Service 都要咁做」):任何新部署服務 credential 適合 header 注入一律建 proxied service + E2E 實測先算完成;三層落地=MEMORY.md 政策 + container-deploy skill checklist step 6(插 DB、預編碼 secret、E2E 測試命令)+ AGENTS.md 紀律;標準流程=部署新服務→加 credential 入 Infisical→自動收編 Agent Proxy→E2E 驗證,唔適合嘅(如 OCI signature auth)記錄原因。⑦ Infisical v0.162.19(8/10 發佈,已係最新)新功能研究:DB 證實功能 tables 齊全但 rotation/scanning/dynamic/PKI 全部未用(0 條);🔴最有價值=Secret Rotation V2(CF/R2 token 自動輪換,建議先試 set CF token)、Machine Identity 到期提醒(agent-proxy/agent-hermes-1)、proxied services last-used 監控(18 services 全有 tracking)、版本更新提示;🟡有潛力=Secret Scanning/PKI/Dynamic Secrets/Alerts/Honey Tokens;⚪唔適合=PAM/SCEP/Intune/ADCS/Google Workspace。⑧ 新功能三項行動結果(同日):Secret Rotation 決定唔需要做(CF token never expire——verify 無 expires_on,且 Infisical CLOUDFLARE_API_TOKEN 同 host /home/opc/.cloudflare/api_token 係同一個 token,rotate 會整壞 host;R2 已停用 backup 轉 GDrive;GitHub PAT 唔喺 rotation 名單;將來開新 expiry token 先啟用);Machine identity 無 expiry(JWT TTL 30 日自動續)→ 無嘢做;Proxied services 使用監控已建(host cron 每週日 09:00 + ntfy,零依賴,超過 30 日冇用自動通知,測試通過全部 services 30 日內用過);Secret scanning/PKI/Dynamic 暫無迫切需求;MEMORY 已記錄決策。⑨ Hermes Agent 升級完成(晚):v0.20.0→v0.20.1(官方 8/13 release,固定 tag v2026.8.13 避免 latest 漂移,同 cloudflared 教訓一致);規模 1,444 commits/656 PRs 穩定化 rollup 修 ~481 issues;compose 固定 tag、commit 065a5cf push oracle-arm-stacks + Dockhand stack 62 forceRedeploy deploy 成功;Telegram polling(21:52:37 Connected、60 commands 註冊)、API server 8642、Dashboard 9119、3 platforms 正常;data volume /opt/data 未動;bot @hermes_agent_shinggo_bot;errors.log 有 Hindsight MCP keepalive 間歇 TimeoutError(舊 log 已有非今次引起)待查。
  • memory/2026-08-15/litellm-headroom-investigations.md name: litellm-headroom-investigations description: 2026-08-15 調查結果:(1) QwenPaw 報 MODEL_EXECUTION_ERROR(openai.APIError: Failed to connect to upstream API)根因係 Headroom proxy→litellm 之間約 80 秒(02:06:37–02:07:22)嘅暫時性連接/DNS 解析失敗窗口,與 Oracle Docker DNS timeout 同類問題,已自動恢復、非 QwenPaw 或模型 provider 問題。(2) Headroom 壓縮 proxy 一直有生效:156 個請求全部經 Headroom 轉發 litellm、節省 26,640 tokens、輸入 950 萬 tokens、節省比例僅 0.28%;數據存於 Headroom 自己嘅 ccr_store.db + proxy_savings.json(非 LiteLLM spend logs);節省低因 99.8% 係 deepseek 側 cache hit(cache_hit_pct=100),Headroom 唔壓縮 cache hit 內容、壓縮後反而 token 變多會自動 revert;compression_savings_usd 顯示 0 因 deepseek-first 係 LiteLLM router group 名非標準 provider/model 格式,LiteLLM 解析唔到(LLM Provider NOT provided)。下一步:如需 USD 統計需喺 Headroom config 手動定義 deepseek-first pricing。(3) LiteLLM 設定頁嘅 HashiCorp Vault 選項:實際環境完全冇配置 Vault(冇 env、冇容器;vaultwarden 係 Bitwarden 與之無關);結論唔建議啟用——Infisical(8 月中定為 credential 標準)+ OCI Vault 已夠,避免第三套 secret 系統,除非將來要幫第三方托管 secret;LiteLLM provider key 本身已加密存 DB。(4) LiteLLM vision_router 修復完成並全面驗證(commit 77f3ed9,已寫入 MEMORY.md):/app/vision_router.py 改為 5352B 新版 module-level instance + call,解決 callbacks 註冊 failed to resolve 問題(0 次失敗);pre_call_hook 每個請求觸發 VISION_ROUTER_HOOK_FIRED;實測 image→deepseek-first 正確路由到 vision-first 由 nvidia VL 答「Orange」(prompt_tokens 3361 含圖像 token)、text-only 唔改路由答 OK-TEXT、direct vision-first hook 正確 skip;順帶發現實際 fallback chain 係 vision-first→free-first→deepseek-first,nvidia VL 拒 Wikimedia 240px thumbnail(「Use thumbnail sizes listed」)需 full-size URL 先答啱,之前答「Unknown」唔係路由問題;臨時測試 key(***)已刪;剩餘可選:移除 debug prints(改 host repo→push→sync→docker restart litellm)。
  • memory/2026-08-15/memory-slimming-archive-20260815.md
  • memory/2026-08-15/pydantic-ai-upgrade-evaluation.md name: pydantic-ai-upgrade-evaluation description: 对 Pydantic AI 从版本 2.25.0 升级到 2.30.0 的评估,重点内容包括安全修复、实际影响、风险低以及功能改进,如 DeepSeek V4 Flash 支持和 MCPToolset 的更新可能性。
  • memory/2026-08-15/qwenpaw-sandbox-bwrap-fix-complete.md name: qwenpaw-sandbox-bwrap-fix-complete description: QwenPaw sandbox 安全修復完成:用戶批准後採用 bwrap + CAP_SYS_ADMIN 方案(放棄 host reboot + landlock),SandboxMode 由 NONE 升級為 BUBBLEWRAP。容器內 apt 裝 bubblewrap 0.8.0(Debian 12 bookworm 原生),compose 加 cap_add: SYS_ADMIN(commit eadeb82 已 push GitHub)。過程關鍵插曲:首次 git push 撞 non-fast-forward(local 落後 origin)導致 sync 攞舊 compose、deploy 冇真正 recreate(CapAdd=[]、Created=8/14),修正係 pull —rebase 再 push 後重新 deploy,容器 recreate 後 CapEff bit 21 set 先成功。診斷路徑:有 SYS_ADMIN 後 unshare 全部 OK,bwrap 一度喺 pivot_root / mount —bind / / 失敗(疑似 overlayfs/SELinux),最終 strace 顯示 pivot_root=0 成功。容器 19:46 HKT 重啟後 detect_platform_mode()=BUBBLEWRAP 生效(probe 有 cache,需 restart 先生效)。4 個 custom patches 全數驗證齊備:progressive_disclosure=7、secret_redaction=4、task_tracker stale-run reset=3、MCP whitelist=1(QP_PROGRESSIVE_TOOLS=on)。Host 無需 reboot(uptime 2 日,LSM 仍無 landlock)。bwrap 隔離(mount+pid namespace)比 Landlock 更強,且避開 host reboot 影響全部容器的排期問題。
  • memory/2026-08-15/qwenpaw-security-authentication.md name: qwenpaw-security-authentication description: QwenPaw 安全認證討論記錄:1) QwenPaw v2.0 僅支持用戶名+密碼 Web 登入(加鹽 SHA-256 哈希、HMAC-SHA256 Token 7天有效、127.0.0.1/::1 免認證、僅作用於 /api/),無 Passkey/2FA/TOTP/MFA,官方 security.zh.md 無相關記錄;推薦 Docker + Cloudflare Tunnel + Cloudflare Access + Authentik IdP 外層加 TOTP/Passkey/WebAuthn。2) Cloudflare Access 對外部服務影響:Access 認人不認機器,一刀切會令外部 API/webhook/cron/app 收到 302;解法為內部 Docker network 直連不受影響、service token(CF-Access-Client-Id/Secret header)、path-based bypass(如 /webhook/)、內網 rewrite 繞過(ERPNext 例 http://erp.benhoweb.com:8080);QwenPaw integrations(Telegram、n8n bridge、watchdog)行 http://qwenpaw:8088 唔受影響;唯一風險係硬編碼直連 public domain 嘅舊服務,上 Access 前要 scan 對外直連清單。3) wire.benhoweb.com IP:IPv4 152.70.8.210、IPv6 2603:c020:8021:2a00::10,WireGuard endpoint,DNS proxied:false,係 Oracle 主機真實公網 IP。4) Cloudflare Access IdP SAML→OIDC 遷移研究:CF 官方+Authentik 官方都推薦 OIDC(“we recommend OIDC”);環境已 3/4 provider 係 OIDC(pk=4/5/8 Dockhand/LiteLLM/Blinko),得 Cloudflare Zero Trust SAML(pk=2)係 SAML 孤兒;CF Access ~30 app 全部用 IdP b4a79d81(SAML);建議轉但唔急(單一用戶、冇 group policy、風險低),並行過渡:建 OIDC IdP→CF Test→試 1 app→批量→最後刪 SAML;已知 bug #7526 間歇 fetch 失敗非 blocker;scope 要包 groups;Authentik 2026.5.6;下一步:等用戶決定係咪而家遷移。5) Documenso(sign.benhoweb.com)8/14 21:27 用戶主動叫停(暫時唔用,非故障);docker stop documenso → Exited 137;已加入 MEMORY.md「手動停用容器」清單,唔再當異常;保持停用,DB/證書保留,要開返講聲幾秒搞掂。
  • telegram name: qwenpaw-telegram-bot-admin description: QwenPaw Telegram bot 管理兩件事:(1) 指令選單由 7 擴充到 23 個——setMyCommands 即刻生效(已驗證)+ channel.py 源碼 patch,升級會覆蓋需 re-apply;(2) 身份澄清:@n8n_shinggo_bot 就係 QwenPaw 自己,old 回應話「只註冊 /backup 冇 /compact」係認錯 bot;(3) bot username 進行中:正確流程係使用 /mybots → Edit Bot → Edit Username,懷疑新版 BotFather 將 username 修改界面搬到 Bot Settings 或 MiniApp,俾用戶更正完成後以 getMe 驗證。