1. 概述
- 目的:在台湾好app的服务器上实现安全的登入流程,减少被入侵风险。
- 范围:包含 SSH 服务器强化、使用公钥、以及在 SSH 上启用基于时间的一次性密码(TOTP)作为第二因素(Google Authenticator / Authy 等)。
- 前提:你需具备服务器的 sudo 或 root 权限,以及能远端重连的备用通道(控制台或 KVM)。
2. 先決條件與備份
- 登录到服务器并切换到有 sudo 的账号:ssh user@server。
- 建议先备份重要配置:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak && sudo tar czf ~/etc-backup-$(date +%F).tgz /etc。
- 确认可以通过主控台或云平台的紧急访问面板恢复连接,以防操作中断导致被锁。
3. 安全更新與基本硬化
- 更新系统:sudo apt update && sudo apt upgrade -y(Debian/Ubuntu)或 sudo yum update -y(CentOS)。
- 创建受限管理账号:sudo adduser deploy && sudo usermod -aG sudo deploy;避免使用 root 直接登录。
- 限制可登录用户:在 /etc/ssh/sshd_config 加入 AllowUsers deploy youradminuser。
4. 配置與強制使用 SSH 公鑰
- 生成密钥(客户端):ssh-keygen -t ed25519 -C "your-email",将公钥(~/.ssh/id_ed25519.pub)上傳到服务器 ~/.ssh/authorized_keys。
- 在 /etc/ssh/sshd_config 中设置:PasswordAuthentication no、PermitRootLogin no、PubkeyAuthentication yes、PermitEmptyPasswords no。保存后 sudo systemctl reload sshd。
- 测试新连接:先保留原始会话,开启新会话验证公钥登录成功后再关闭旧会话。
5. 安装 TOTP 多因素(以 libpam-google-authenticator 为例)
- 安装组件(Ubuntu):sudo apt install libpam-google-authenticator -y。
- 为每个需要 MFA 的用户运行:google-authenticator,按提示扫描二维码并保存 emergency codes(务必记录并安全存放)。选项建议:y y y y(视提示而定,选择防重放与时间步长)。
- 注意:每个用户都需执行一次,或由管理员代为生成后安全传递。
6. 配置 PAM 與 sshd 以啟用 TOTP
- 编辑 PAM SSH 文件(备份先):sudo cp /etc/pam.d/sshd /etc/pam.d/sshd.bak。然后在文件顶部或适当位置加入:auth required pam_google_authenticator.so nullok。nullok 参数表示如果用户未配置 TOTP 则允许通过(初期部署可用),生产环境移除 nullok 强制所有人使用。
- 修改 /etc/ssh/sshd_config:ChallengeResponseAuthentication yes;将 AuthenticationMethods 设为你想要的组合,例如:AuthenticationMethods publickey,keyboard-interactive。如果想允许公钥或密码+TOTP 可设置 AuthenticationMethods publickey,password publickey,keyboard-interactive:pam(语法和需求视 OpenSSH 版本)。保存后 sudo systemctl restart sshd。
7. 恢復碼與設備丟失處理
- 在运行 google-authenticator 时会得到 emergency scratch codes,这些代码只显示一次,需打印或放入密码管理器。
- 若用户丢失手机:可以用管理员账户通过删除或修改该用户家目录下的 .google_authenticator 文件来重置(sudo rm /home/USER/.google_authenticator),然后指导用户重新设置 MFA。务必记录所有变更并使用受控流程。
8. 保護自動化與腳本賬號
- 对于 CI/CD 或自动化机器,使用仅限公钥的服务账号,避免为这些账号启用交互式 MFA。
- 在允许的账户列表或 PAM 配置中排除机器账号(通过组或用户名判断),并对这些密钥使用强加密与到期策略。
9. 日志、入侵防护與防火牆
- 安装 fail2ban 并启用针对 sshd 的规则以限制暴力登录尝试:sudo apt install fail2ban。
- 配置防火墙(UFW 或 iptables)仅允许必要的 IP/端口:sudo ufw allow from YOUR_OFFICE_IP to any port 22。
- 定期查看 /var/log/auth.log(或 /var/log/secure)以检测异常登录。
10. 上線測試與回滚步骤
- 测试流程:在另一终端开启新 session 验证公钥登录、TOTP 提示及恢复码功能;确认无误后再在生产中生效。
- 回滚:若出现问题,使用预留控制台连接或 cloud provider 控制台,通过恢复备份的 /etc/ssh/sshd_config.bak 与 /etc/pam.d/sshd.bak 回退并重启 sshd。
11. 文件與存取權限管理
- 确保 ~/.google_authenticator 仅对用户可读:chmod 600 ~/.google_authenticator && chown USER:USER ~/.google_authenticator。
- 管理员脚本或自动化进程不得明文保存 TOTP 秘鑰或 emergency codes,使用企业级密钥库(Vault、AWS Secrets Manager 等)。
12. 程序與教育
- 制定 MFA 上线流程:谁负责开通、谁负责备份、如何审核与审计变更。
- 培训使用者:如何使用 Google Authenticator、如何安全保存恢复码、设备更换流程。
13. 常見問答 — 問:什麼是多因素認證(MFA)?
- 答:MFA 是在登入時要求兩種或以上不同類型的驗證因素(知識:密碼;持有:手機一次性碼或安全金鑰;屬性:指紋),能顯著降低帳戶被破解風險。
14. 常見問答 — 問:如果手機遺失,如何恢復登入?
- 答:使用在設定時保存的 emergency recovery codes;若無,聯絡伺服器管理員由管理員在受控程序下刪除或重置該用戶的 ~/.google_authenticator,再讓使用者重新設置 MFA。
15. 常見問答 — 問:啟用 MFA 會影響自動化部署嗎?
- 答:對交互式登入有影響。對自動化應使用專用服務帳號與只允許公鑰的方式,並透過安全的密鑰管理流程避免在自動化路徑中觸發互動式 MFA。
来源:如何安全配置台湾好app服务器登入并开启多因素认证