Sources: ~/.openclaw/skills, ~/.agents/skills, workshop-skills, workspace/skills
3.7 KiB
name, description
| name | description |
|---|---|
| synchronet-bbs-admin | 修 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)。
修复步骤
-
定位文件:宿主机
/root/docker/sbbs-data/ctrl/main.cnf(容器内/sbbs-data/ctrl/main.cnf,/sbbs/ctrl是软链)。 -
改密码(保持 7 字节同长,原地替换默认
SYSPASS):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(日志见下)。 -
重启容器:
docker restart sbbs。 -
验证:
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。