宝塔面板开启Google Authenticator二次验证需手动配置PAM和Nginx:编辑/www/server/panel/data/pam.d/bt文件,设auth_secret权限600且属主root;用google-authenticator命令覆盖生成密钥;IP白名单须在bt.conf的location /中用allow/deny配置,并适配CDN;失效后只能SSH root删除auth_secret恢复。

宝塔面板开启 Google Authenticator 二次验证后登录失败
二次验证不是开个开关就完事,宝塔默认用的是 libpam-google-authenticator,但它的 PAM 配置和宝塔的 Nginx 认证流程有冲突——本质是认证链没串对。不改配置直接点“启用”,你会看到登录页反复跳转或提示“验证码错误”,哪怕手机 App 显示的码完全正确。
- 必须手动编辑
/www/server/panel/data/pam.d/bt(如果不存在就新建),内容只保留一行:auth [success=ok default=ignore] pam_google_authenticator.so secret=/www/server/panel/data/auth_secret user=root -
/www/server/panel/data/auth_secret文件权限得是600,且属主为root;宝塔后台生成密钥时,它默认写进这个路径,但不会自动设权限 - 别用手机扫宝塔界面上那个二维码就完事——扫完后立刻在命令行执行
google-authenticator -t -d -f -r 3 -R 30 -w 17 -s /www/server/panel/data/auth_secret覆盖生成,确保时间戳同步、禁用备用码、关闭多设备支持(避免干扰)
IP 白名单只对登录页生效,但 API 和文件管理器仍可被暴力探测
宝塔的“IP 白名单”功能(在【安全】→【IP 白名单】里设置)只过滤 /login 和 /api 的部分接口,但 /files、/config、/database 这些高危入口默认不走白名单逻辑。攻击者只要拿到一个弱口令或撞中 session,就能绕过 IP 限制直连。
- 真正的防护得落到 Nginx 层:编辑
/www/server/panel/vhost/nginx/bt.conf,在location /块里加allow 203.208.60.1;(替换成你的 IP),再加deny all; - 注意顺序:
allow必须在deny all之前,否则全拦死;IPv6 要单独写allow 2001:db8::1; - 如果你用 CDN 或反向代理(比如套了 Cloudflare),得把
real_ip_header X-Forwarded-For;和set_real_ip_from加进全局 Nginx 配置,否则白名单永远匹配不到真实客户端 IP
启用双因子后忘记备份密钥或丢失手机,恢复流程极简但依赖 root 权限
没有“找回账号”按钮,也没有邮箱验证,宝塔的二次验证一旦失效,唯一可靠路径就是服务器本地操作。界面里那个“重置验证”按钮只是清掉当前密钥,不解决你已经登不进去的问题。
- 必须能 SSH 登录服务器,且有
root权限——用普通用户 su 不上去也白搭 - 停面板:
bt stop,删掉/www/server/panel/data/auth_secret,再bt start,这时二次验证自动失效,可正常登录 - 别试图改数据库字段或删 session 文件——
/www/server/panel/data/session.db是 SQLite,但宝塔登录校验不查它,改了也没用

















