Files
NightStar 3d3dd79df0 Add 39 shared skills from local agent inventory
Sources: ~/.openclaw/skills, ~/.agents/skills, workshop-skills, workspace/skills
2026-09-10 16:54:57 +08:00

3.7 KiB
Raw Permalink Blame History

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)。

修复步骤

  1. 定位文件:宿主机 /root/docker/sbbs-data/ctrl/main.cnf(容器内 /sbbs-data/ctrl/main.cnf,/sbbs/ctrl 是软链)。

  2. 改密码(保持 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(日志见下)。

  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。