ssh 使用google authenticator 作爲二次認證

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

  • 如何認證
    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}

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

  • 發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章