ssh 使用google authenticator 做爲二次認證

  • google 實現TOTP(基於時間認證)原理
    1.用戶須要開啓Google Authenticator服務時,服務器隨機生成一個相似於
    『DPI45HKISEXU6HG7』的密鑰,而且把這個密鑰保存在.google_authenticator中。
    2.客戶端掃描二維碼,把密鑰『DPI45HKISEXU6HG7』保存在客戶端,同
    時客戶端也能夠手動輸入密鑰,生成驗證碼html

  • 如何認證
    1.客戶端每30秒使用密鑰『DPI45HKISEXU6HG7』和時間戳經過一種『算法』
    生成一個6位數字的一次性密碼,如『684060』
    2.用戶登錄時輸入一次性密碼『684060』
    3.服務器端使用保存在.google_authenticator中的密鑰『DPI45HKISEXU6HG7』
    和時間戳經過同一種『算法』生成一個6位數字的一次性密碼。你們都懂控制
    變量法,若是算法相同、密鑰相同,又是同一個時間(時間戳相同),那麼客
    戶端和服務器計算出的一次性密碼是同樣的。服務器驗證時若是同樣,就登陸
    成功了
  • 安裝(centos7)
    1.install
    a.增長epel repo 算法

    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

    #  yum install google-authenticator
            b.修改ssh配置,vim /etc/ssh/sshd_config 修改以下
                    #ChallengeResponseAuthentication yes   ###容許交互
                    #AuthenticationMethods publickey,password publickey,keyboard-interactive     #增長認證方法,默認只有密碼認證才須要輸入驗證碼,增長以後,有公鑰也須要輸入驗證碼
                    #重啓服務 systemctl restart sshd
             c.在認證文件/etc/pam.d/sshd增長以下內容
                 #auth       required      pam_google_authenticator.so nullok   #auth  substack password-auth 放於先後取決於先輸入驗證碼仍是先輸入密碼
              d.生成認證文件
                    #google-authenticator -t -d -f -r 3 -R 30 -W  #生成文件在當前家目錄的.google_authenticato,同時也會彈出生成的條形碼及5次緊急驗證碼,5次驗證碼使用一次少一次
                    #用cat .google_authenticator 打開文件後,其實內容很簡單,第一行是認證生成的密鑰,包括認證方法,時間等參數
                    #也能夠一步一步生成,參考文檔:https://shenyu.me/2016/09/05/centos-google-authenticator.html
  • 面臨的問題
    1. 若是認證文件都每一個用戶的加目錄下,若是用戶刪除文件.google_authenticator以後怎麼辦?難道寫監控腳本按期check文件是否存在及文件有無被修改,對於這個問題,能夠將認證文件放在統一放置,而且只能root用戶能夠訪問及修改,權限爲400
      • 在/etc/pam.d/sshd 中,認證信息後面添加

        auth required pam_google_authenticator.so user=root secret=/data/google_authenticator/${USER}

        #指定用戶去讀取認證文件及認證文件的路徑vim

相關文章
相關標籤/搜索