Add 39 shared skills from local agent inventory
Sources: ~/.openclaw/skills, ~/.agents/skills, workshop-skills, workspace/skills
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
---
|
||||
name: "synchronet-bbs-admin"
|
||||
description: "修 Synchronet BBS(bbsio/synchronet docker) 的 sysop 注册/系统密码/远程访问/临时IP封禁。触发词:BBS 注册失败、Login/SY 卡住、system password、被 ban、sysop 登不上。"
|
||||
---
|
||||
|
||||
# Synchronet BBS sysop / 系统密码 排错修复
|
||||
|
||||
针对已部署的 `bbsio/synchronet` 容器(`sbbs`,端口 2323→23 / 2222→2222,数据卷 `/root/docker/sbbs-data`)。用户问"BBS 注册不了/Login 卡住/SY 输密码不对/被 ban"时用。
|
||||
|
||||
## 第一步先分清:3.19 读 main.cnf,不读 sbbs.ini
|
||||
|
||||
这个镜像跑的是 **Synchronet 3.19**(banner 会打 `Version 3.19`)。3.19 的系统密码是从 `ctrl/main.cnf` ——一个**二进制定长字段文件**——顺序读取的(`read_main_cfg()` 里 `get_str(cfg->sys_pass, instream)`),而 **`sbbs.ini` 的根层级 `password`/`settings` 键是 3.20+(master)才支持的**。所以改 `sbbs.ini` 对 SY 密码**完全无效**(这是最容易白费的弯路)。
|
||||
|
||||
## 关键事实(源自源码验证)
|
||||
|
||||
- main.cnf 字符串字段顺序:`sys_name, sys_id, sys_location, sys_phonefmt, sys_op, sys_guru, sys_pass, sys_nodes, ...` → 系统密码是**第 7 个字符串字段**,镜像默认值是 `SYSPASS`。
|
||||
- `chksyspass()` 用 `getstr(...K_UPPER | K_NOECHO)` 提示输入(输入被转大写、不回显),用 `stricmp` 比较(**不区分大小写**)。所以在 `SY:` 处输入密码即可,大小写无所谓。
|
||||
- 远程 sysop 需要 `sys_misc` 里 `SM_R_SYSOP` 位(1<<15 = 32768)。
|
||||
|
||||
## 修复步骤
|
||||
|
||||
1. **定位文件**:宿主机 `/root/docker/sbbs-data/ctrl/main.cnf`(容器内 `/sbbs-data/ctrl/main.cnf`,`/sbbs/ctrl` 是软链)。
|
||||
|
||||
2. **改密码**(保持 7 字节同长,原地替换默认 `SYSPASS`):
|
||||
```bash
|
||||
python3 -c "d=open('/root/docker/sbbs-data/ctrl/main.cnf','rb').read(); \
|
||||
assert d.count(b'SYSPASS')==1; d2=d.replace(b'SYSPASS', b'123456', 1); \
|
||||
assert len(d2)==len(d); open('/root/docker/sbbs-data/ctrl/main.cnf','wb').write(d2)"
|
||||
```
|
||||
⚠️ 长度必须一致(7 字符对 7 字符)。若要更长/更短的密码,用 `scfg` 交互改(`docker exec -it sbbs /sbbs/exec/scfg`),别硬改破坏定长字段。
|
||||
想开远程 sysop:把对应 `sys_misc` 字段(4 字节 little-endian int)设为 32768;默认镜像可能已带 SM_R_SYSOP(日志见下)。
|
||||
|
||||
3. **重启容器**:`docker restart sbbs`。
|
||||
|
||||
4. **验证**:`telnet 127.0.0.1 2323` → `Login:` 输 `New` → `SY:` 输密码 → 应进入 "Creating sysop account...",之后能正常建号登录。
|
||||
|
||||
## 日志判读(docker logs sbbs)
|
||||
|
||||
- `System password attempt: 'XXX'` → 已过远程权限检查(SM_R_SYSOP 满足),只是 XXX 跟当前 `cfg.sys_pass` 不匹配 → 改密码或用正确的。
|
||||
- `Remote sysop access disabled` → `SM_R_SYSOP` 位没设,需设置 `sys_misc` 位或改回 main.cnf。
|
||||
- `!TEMPORARY BAN of <IP> (N login attempts...)` → 连续失败或被当成高危用户名触发封禁。
|
||||
|
||||
## 防封踩坑(重要)
|
||||
|
||||
- 千万别在 `Login:` 输 `Sysop`/`Admin` 这类**高危用户名**——Synchronet 把它列入 blocked user name,**1 次尝试就临时封 IP 10 分钟**(`LoginAttemptTempBanThreshold` 是 20 只对普通错密码,高危名是特例)。
|
||||
- 临时封禁是**运行时内存态**:`docker restart sbbs` 立即清掉。
|
||||
- 用户终端可能"首字母自动大写"(如输入 nightstar 变 NIGHTSTAR)——没关系,比较是 `stricmp` 不区分大小写,且 SY 输入被 K_UPPER 转大写,所以输入大写或小写都过。
|
||||
|
||||
## 完成判据
|
||||
|
||||
`Login:`→`New`→`SY:`→密码后能创建 sysop 账户,之后正常 `Login:` 登入。日志里不再出现 `password verification failure` / `Remote sysop access disabled`。
|
||||
Reference in New Issue
Block a user