Linux配置OpenSSH双因子认证

  • A+
所属分类:攻防演练

OpenSSH双因子认证是信息安全等级保护中较为重要的安全检测项之一,要求远程登陆核心服务器时必须进行二次认证(指纹、虹膜、动态码等)。配置免费开源的Google Authenticator动态码认证便是一个不错的双因子认证方案,轻松实现远程登陆核心服务器时,必须正确输入谷歌验证码和系统用户密码后才能正常远程登陆。

实验环境

操作系统:RHEL 6.10

Google Authenticator:1.06

OpenSSH:8.0p1

安装篇

第一步 禁用SElinux

  1. [root@wanghualang ~]# setenforce 0  
  2. [root@wanghualang ~]# sed -ri 's#^(SELINUX=).*#\1disabled#g' /etc/selinux/config  

第二步 安装依赖包

  1. [root@wanghualang ~]# yum install -y gcc autoconf automake libtool pam-devel  

第三步 下载、解压源码包

  1. [root@wanghualang ~]# cd /usr/local/src/  
  2. [root@wanghualang src]# wget --no-check-certificate https://github.com/google/google-authenticator-libpam/archive/1.06.tar.gz  
  3. [root@wanghualang src]# tar xzf google-authenticator-libpam-1.06.tar.gz  

第四步 编译安装Google Authenticator

  1. [root@wanghualang ~]# cd /usr/local/src/google-authenticator-libpam-1.06  
  2. [root@wanghualang google-authenticator-libpam-1.06]# ./bootstrap.sh  
  3. [root@wanghualang google-authenticator-libpam-1.06]# ./configure  
  4. [root@wanghualang google-authenticator-libpam-1.06]#  make  
  5. [root@wanghualang google-authenticator-libpam-1.06]#  make install  

第五步 创建软链接

  1. [root@wanghualang ~]# ln -s /usr/local/lib/security/pam_google_authenticator.so /lib64/security/pam_google_authenticator.so  

第六步 配置谷歌密钥

  1. [root@wanghualang ~]# /usr/local/src/google-authenticator-libpam-1.06/google-authenticator  
  2.   
  3. Do you want authentication tokens to be time-based (y/n) y  
  4. Your new secret key is: BJODJZEAQWYR7AGBALCD2HLLDQ  
  5. Enter code from app (-1 to skip): -1  
  6. Your emergency scratch codes are:  
  7. 26541787  
  8. 51594490  
  9. 57532120  
  10. 83441040  
  11. 75099457  
  12. Do you want me to update your "/root/.google_authenticator" file? (y/n) y  
  13. your chances to notice or even prevent man-in-the-middle attacks (y/n) y  
  14. Do you want to do so? (y/n) y  
  15. Do you want to enable rate-limiting? (y/n) y  

默认全部选择y,记录secret key和emergency scratch codes。

第七步 下载app创建动态码

首次创建动态码时需要输入secret key进行验证,手机不在身边需要紧急登陆时,则可以使用emergency scratch codes,使用后自动失效。

IOS:https://apps.apple.com/cn/app/google-authenticator/id388497605
Android:https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=zh_CN

第八步 编译安装OpenSSH

参考教程:Linux编译安装OpenSSH

第九步 配置OpenSSH PAM

  1. [root@wanghualang ~]# sed -i '1a\auth       required     pam_google_authenticator.so' /etc/pam.d/sshd  

完整配置展开

  1. #%PAM-1.0  
  2. auth       required     pam_google_authenticator.so  
  3. auth       required     pam_tally2.so deny=5 unlock_time=60 even_deny_root root_unlock_time=300  
  4. auth       include      system-auth  
  5. account    required     pam_tally2.so   
  6. account    required     pam_nologin.so   
  7. account    include      system-auth  
  8. password   include      system-auth  
  9. session    optional     pam_keyinit.so force revoke   
  10. session    include      system-auth   
  11. session    required     pam_loginuid.so  

第十步 配置OpenSSH

  1. [root@wanghualang ~]# sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config  

完整配置展开

  1. #Port 22  
  2. AddressFamily inet  
  3. #ListenAddress 0.0.0.0  
  4. #ListenAddress ::  
  5. #HostKey /etc/ssh/ssh_host_rsa_key  
  6. #HostKey /etc/ssh/ssh_host_ecdsa_key  
  7. #HostKey /etc/ssh/ssh_host_ed25519_key  
  8. #RekeyLimit default none  
  9. #SyslogFacility AUTH  
  10. SyslogFacility AUTHPRIV  
  11. #LogLevel INFO  
  12. #LoginGraceTime 2m  
  13. PermitRootLogin yes  
  14. #StrictModes yes  
  15. #MaxAuthTries 6  
  16. #MaxSessions 10  
  17. #PubkeyAuthentication yes  
  18. AuthorizedKeysFile  .ssh/authorized_keys  
  19. #AuthorizedPrincipalsFile none  
  20. #AuthorizedKeysCommand none  
  21. #AuthorizedKeysCommandUser nobody  
  22. #HostbasedAuthentication no  
  23. #IgnoreUserKnownHosts no  
  24. #IgnoreRhosts yes  
  25. #PasswordAuthentication yes  
  26. #PermitEmptyPasswords no  
  27. ChallengeResponseAuthentication yes  
  28. #KerberosAuthentication no  
  29. #KerberosOrLocalPasswd yes  
  30. #KerberosTicketCleanup yes  
  31. #KerberosGetAFSToken no  
  32. #GSSAPIAuthentication no  
  33. #GSSAPICleanupCredentials yes  
  34. UsePAM yes  
  35. #AllowAgentForwarding yes  
  36. #AllowTcpForwarding yes  
  37. #GatewayPorts no  
  38. X11Forwarding yes  
  39. #X11DisplayOffset 10  
  40. #X11UseLocalhost yes  
  41. #PermitTTY yes  
  42. PrintMotd no  
  43. PrintLastLog no  
  44. #TCPKeepAlive yes  
  45. #PermitUserEnvironment no  
  46. #Compression delayed  
  47. #ClientAliveInterval 10  
  48. #ClientAliveCountMax 3  
  49. UseDNS no  
  50. #PidFile /var/run/sshd.pid  
  51. #MaxStartups 10:30:100  
  52. #PermitTunnel no  
  53. #ChrootDirectory none  
  54. #VersionAddendum none  
  55. #Banner none  
  56. #Subsystem  sftp    /usr/libexec/sftp-server  

第十一步 重启OpenSSH

  1. [root@wanghualang ~]# service sshd restart  

第十二步 登陆测试

目前仅root用户支持双因子认证,其他用户不论输入任何动态码都一律视为验证失败而导致无法正常登陆。其他用户配置双因子认证只需拷贝/root/.google_authenticator到对应用户的家目录再赋权即可。

  1. [root@wanghualang ~]# ssh root@127.0.0.1  
  2. Verification code:  
  3. Password:  
  • 微信赞助网站
  • weinxin
  • 支付宝赞助网站
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: