SSH重置群晖双重验证
背景
群晖 NAS 的双重验证(2FA/OTP)提供了额外的安全保护,但一旦丢失手机或验证码 App,就会被锁在 DSM 界面之外。
官方给出的解决方案是按实体 Reset 键。然而这个方法有两个明显问题:
- 必须接触设备 — 如果 NAS 在机房或异地托管,操作代价很高
- 会重置网络设置 — 按 Reset 后,IP、端口、DDNS 等网络配置全部恢复默认,需要重新配置
本文介绍一种纯 SSH 命令行的方式,在不接触硬件、不影响任何数据的前提下完成 2FA 重置。
前提条件
- 已开启群晖 SSH 访问(控制面板 → 终端机 → 启用 SSH)
- 拥有一个属于
administrators组的账号(可以是 root,也可以是另一个管理员) - 能通过 SSH 登录到 NAS
原理
群晖 DSM 的网页登录流程使用 PAM(Pluggable Authentication Modules)进行身份验证,配置文件位于:
/etc/pam.d/webui
其中 pam_syno_otp.so 模块负责处理 2FA 验证。通过修改这个文件,将 OTP 验证模块替换为直接放行,即可绕过 2FA,让账号只需密码即可登录 DSM 界面。
操作步骤
第一步:SSH 登录
ssh 你的用户名@NAS的IP -p SSH端口
进入后切换到 root:
sudo -i
第二步:备份 PAM 配置文件
这一步必做,备份保证了我们可以随时还原。
cp /etc/pam.d/webui /etc/pam.d/webui.bak
第三步:查看当前配置
cat /etc/pam.d/webui
你会看到类似这样的内容,其中包含 pam_syno_otp.so 的行:
auth [success=1 cred_unavail=die cred_err=bad no_module_data=die default=bad] pam_syno_otp.so
第四步:将 OTP 模块替换为直接放行
这里有两种方式,推荐使用替换方式(而非直接注释):
推荐:替换为 pam_permit.so(直接放行)
sed -i 's/pam_syno_otp.so/pam_permit.so/' /etc/pam.d/webui
不推荐直接注释整行,因为 PAM 的 success=N 跳转计数依赖每一行的存在,注释掉会导致跳转计数错乱,反而使密码验证也失败。验证修改结果:
cat /etc/pam.d/webui
确认 pam_syno_otp.so 已变为 pam_permit.so。
第五步:登录 DSM 网页界面
打开浏览器,访问 DSM 地址(如 https://your-nas:5001),用账号 + 密码登录,此时不再要求输入 2FA 验证码。
第六步:在控制面板正式关闭 2FA
登录成功后:
控制面板 → 用户与群组 → 选择账号 → 编辑 → 禁用双重验证
第七步:还原 PAM 配置文件
这一步非常重要,处理完 2FA 后必须立即还原:
cp /etc/pam.d/webui.bak /etc/pam.d/webui
验证还原成功:
cat /etc/pam.d/webui
# 确认 pam_syno_otp.so 已回来
第八步(可选):重新设置 2FA
在控制面板重新绑定 2FA,这次务必保存好备用码,防止下次再次丢失。
注意事项
- PAM 文件修改立即生效,无需重启 DSM 或任何服务
- 修改期间 2FA 对所有用户都失效,完成后必须立即还原
- 整个过程不影响任何数据、套件、网络配置
- 还原之前不要重启 NAS,否则备份文件也会在某些系统更新中丢失
与官方 Reset 键方案的对比
| SSH 方式 | Reset 键方式 | |
|---|---|---|
| 需要接触设备 | 否 | 是 |
| 影响网络配置 | 否 | 是(重置) |
| 影响数据 | 否 | 否(Mode 1) |
| 操作复杂度 | 中 | 低 |
| 适合场景 | 远程/托管环境 | 本地可操作 |
总结
通过修改 /etc/pam.d/webui 中的 PAM 模块,可以在不接触硬件的情况下完成 2FA 重置。整个流程的关键点有两个:用 pam_permit.so 替换而非注释 OTP 行,以及操作完成后立即还原配置文件。