|
@@ -0,0 +1,127 @@
|
|
|
|
|
+# 遗留问题:lj 容器多用户准入未打通(2026-11-12 夜)
|
|
|
|
|
+
|
|
|
|
|
+| 字段 | 值 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| 状态 | 🔴 **未解决**,明日继续 |
|
|
|
|
|
+| 影响 | 同公司同事**无法使用 `agent-lj`**(能进会话、能发消息,但容器不回复) |
|
|
|
|
|
+| 对照 | `agent-node-lj-test` **正常**,同事已验证可用 |
|
|
|
|
|
+| 容器内能否解决 | ❌ **不能**,需平台侧操作 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 一、问题现象
|
|
|
|
|
+
|
|
|
|
|
+同事(`@pnfapmsbhs:fmode.cn`)在 App 里给 `lj` 发消息:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+17:05:17Z 同事「你好」 → 无回复
|
|
|
|
|
+17:23:29Z 同事「你好」 → 无回复(重启后)
|
|
|
|
|
+17:23:48Z 同事「你好」 → 无回复(重启后)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+App 侧表现:一直显示「已送达,等待回复…」直到超时。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 二、根因(已彻底定位)
|
|
|
|
|
+
|
|
|
|
|
+### 2.1 判定代码顺序
|
|
|
|
|
+
|
|
|
|
|
+`gateway/authz_mixin.py` 的 `_principal_authorized()`:
|
|
|
|
|
+
|
|
|
|
|
+```python
|
|
|
|
|
+platform_allowlist = _auth_env("MATRIX_ALLOWED_USERS")
|
|
|
|
|
+
|
|
|
|
|
+if not (platform_allowlist or group_user_allowlist or group_chat_allowlist or global_allowlist):
|
|
|
|
|
+ return _env_truthy("GATEWAY_ALLOW_ALL_USERS") # ← 兜底分支
|
|
|
|
|
+# 否则 → 走 allowlist 精确匹配 → 不在名单 → 拒绝
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+**`GATEWAY_ALLOW_ALL_USERS` 是「兜底」,只有所有 allowlist 都为空时才轮得到它。**
|
|
|
|
|
+
|
|
|
|
|
+### 2.2 lj 卡在哪
|
|
|
|
|
+
|
|
|
|
|
+| 层 | 值 | 来源 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| `/run/s6/container_environment/MATRIX_ALLOWED_USERS` | `@xhvrjtmwqh:fmode.cn` | **平台在容器启动时注入**(root:root,10-21 14:35) |
|
|
|
|
|
+| `/opt/data/.env` | 已改为含 `@pnfapmsbhs` | 容器内可写 |
|
|
|
|
|
+| **进程实际生效** | **仍是 `@xhvrjtmwqh`** | `.env` **压不过** s6 注入 |
|
|
|
|
|
+
|
|
|
|
|
+**实测证据**:日志持续出现
|
|
|
|
|
+```
|
|
|
|
|
+WARNING gateway.run: Unauthorized user (ignored): Dropped a message
|
|
|
|
|
+from unrecognized matrix user (@pnfapmsbhs:fmode.cn)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2.3 为什么 lj-test 没这个问题
|
|
|
|
|
+
|
|
|
|
|
+| 容器 | 创建时间 | `containerRef` | s6 里有 `MATRIX_ALLOWED_USERS` 吗 |
|
|
|
|
|
+|---|---|---|---|
|
|
|
|
|
+| `agent-node-lj-test` | 2026-10-17 | **空** | ❌ **没有** |
|
|
|
|
|
+| `agent-lj` | 2026-10-21 | `agent-lj` | ✅ **有**(10-21 14:35 注入) |
|
|
|
|
|
+
|
|
|
|
|
+**推测**:10-21 之后容器创建流程变更,开始注入 `MATRIX_ALLOWED_USERS`。
|
|
|
|
|
+lj-test 是旧流程创建的,没有这个注入,所以 `ALLOW_ALL=true` 天然生效。
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 三、已尝试且**失败**的方案
|
|
|
|
|
+
|
|
|
|
|
+| # | 方案 | 结果 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| 1 | 往 `.env` 追加 `@pnfapmsbhs` 到 `MATRIX_ALLOWED_USERS` | ❌ 重启后仍被拒 |
|
|
|
|
|
+| 2 | 设置 `GATEWAY_ALLOW_ALL_USERS=true` | ❌ 被非空白名单短路,不生效 |
|
|
|
|
|
+| 3 | `.env` 里把 `MATRIX_ALLOWED_USERS` 置空 | ❌ `_clear_known_keys_missing_from_dotenv` 只清「缺失的键」,空串不算缺失 |
|
|
|
|
|
+| 4 | **整行删除** `.env` 的 `MATRIX_ALLOWED_USERS` | ❌ s6 注入仍在,重启后恢复 |
|
|
|
|
|
+| 5 | 删除/清空 s6 里的文件 | ❌ **root:root,容器用户无权限** |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 四、明日待做(按优先级)
|
|
|
|
|
+
|
|
|
|
|
+### P0:让同事能用 `lj`
|
|
|
|
|
+
|
|
|
|
|
+| 方案 | 做什么 | 代价 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| **A(推荐)** | **平台/运维删除** lj 容器的 `/run/s6/container_environment/MATRIX_ALLOWED_USERS`,然后重启 | ✅ 不动数据,根治 |
|
|
|
|
|
+| B | 重建 lj 容器(按 lj-test 的方式) | ❌ 现有会话数据会丢 |
|
|
|
|
|
+| C | 暂用 lj-test | 同事能用,但 lj 空置 |
|
|
|
|
|
+
|
|
|
|
|
+**验证方法**(平台侧操作后):
|
|
|
|
|
+```bash
|
|
|
|
|
+# 1. 进程环境应无 MATRIX_ALLOWED_USERS
|
|
|
|
|
+PID=$(pgrep -f "gateway run" | tail -1)
|
|
|
|
|
+tr '\0' '\n' < /proc/$PID/environ | grep -E "MATRIX_ALLOWED|ALLOW_ALL"
|
|
|
|
|
+
|
|
|
|
|
+# 2. 日志无 Unauthorized
|
|
|
|
|
+tail -50 /opt/data/logs/gateway.log | grep -i unauthoriz
|
|
|
|
|
+
|
|
|
|
|
+# 3. 让同事发一条消息,App 里应收到回复
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### P1:确认平台注入的边界
|
|
|
|
|
+
|
|
|
|
|
+需要平台侧回答:
|
|
|
|
|
+- 为什么 10-21 之后的容器会注入 `MATRIX_ALLOWED_USERS`?
|
|
|
|
|
+- 能不能改成不注入(或注入为空)?
|
|
|
|
|
+- 如果必须注入,App 侧该怎么做才能让同公司共用?
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 五、对文档的影响(已更新)
|
|
|
|
|
+
|
|
|
|
|
+| 文档 | 更新内容 |
|
|
|
|
|
+|---|---|
|
|
|
|
|
+| `多用户共用容器-完整规范` | 新增 §3.7「s6 注入 vs `.env` 的优先级」 |
|
|
|
|
|
+| `提示词-容器自我优化-v2` | 踩坑表新增第 9 条 |
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 六、当前可用状态
|
|
|
|
|
+
|
|
|
|
|
+| 容器 | 主人能用 | 同事能用 |
|
|
|
|
|
+|---|---|---|
|
|
|
|
|
+| `agent-node-lj-test` | ✅ | ✅ **已验证** |
|
|
|
|
|
+| `agent-lj` | ✅ | ❌ **待平台侧处理** |
|
|
|
|
|
+
|
|
|
|
|
+**结论:多人共用功能在 lj-test 上已跑通,lj 受平台注入限制暂不可用。**
|