SSH重置群晖双重验证

SSH重置群晖双重验证
Photo by Oleksandr Skochko / Unsplash

背景

群晖 NAS 的双重验证(2FA/OTP)提供了额外的安全保护,但一旦丢失手机或验证码 App,就会被锁在 DSM 界面之外。

官方给出的解决方案是按实体 Reset 键。然而这个方法有两个明显问题:

  1. 必须接触设备 — 如果 NAS 在机房或异地托管,操作代价很高
  2. 会重置网络设置 — 按 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 行,以及操作完成后立即还原配置文件。