Linux 利用Google Authenticator實現ssh登錄雙因素認證

来源:http://www.cnblogs.com/tiannan/archive/2016/12/31/6238832.html
-Advertisement-
Play Games

1.介紹 雙因素認證:雙因素身份認證就是通過你所知道再加上你所能擁有的這二個要素組合到一起才能發揮作用的身份認證系統。雙因素認證是一種採用時間同步技術的系統,採用了基於時間、事件和密鑰三變數而產生的一次性密碼來代替傳統的靜態密碼。每個動態密碼卡都有一個唯一的密鑰,該密鑰同時存放在伺服器端,每次認證時 ...


1.介紹

雙因素認證:雙因素身份認證就是通過你所知道再加上你所能擁有的這二個要素組合到一起才能發揮作用的身份認證系統。雙因素認證是一種採用時間同步技術的系統,採用了基於時間、事件和密鑰三變數而產生的一次性密碼來代替傳統的靜態密碼。每個動態密碼卡都有一個唯一的密鑰,該密鑰同時存放在伺服器端,每次認證時動態密碼卡與伺服器分別根據同樣的密鑰,同樣的隨機參數(時間、事件)和同樣的演算法計算了認證的動態密碼,從而確保密碼的一致性,從而實現了用戶的認證。因每次認證時的隨機參數不同,所以每次產生的動態密碼也不同。由於每次計算時參數的隨機性保證了每次密碼的不可預測性,從而在最基本的密碼認證這一環節保證了系統的安全性。

說白了,就像我們幾年前去銀行辦卡送的口令牌,以及網易游戲中的將軍令,在你使用網銀或登陸游戲時會再讓你輸入動態口令的。

 

2.目的

實現登錄Linux 伺服器時,除了輸入用戶名密碼外,需要輸入一次性的動態口令才能驗證成功。

 

3.安裝過程

3.1安裝chrony

生成動態口令的其中一個因素是時間,需要保持終端設備和伺服器的系統時間一致,才能生成同一的動態口令

簡單說下chrony:chrony 是網路時間協議的(NTP)的另一種實現,與網路時間協議後臺程式(ntpd)不同,它可以更快地更準確地同步系統始終。

國內比較好用的ntp伺服器:官網

註,同步時間時請準確設置系統時區

[root@localhost ~]# yum install -y chrony
[root@localhost ~]# vim /etc/chrony.conf

server 0.cn.pool.ntp.org iburst

[root@localhost ~]# systemctl restart chronyd
[root@localhost ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? 223.112.179.133 0 6 0 10y +0ns[ +0ns] +/- 0ns
^* dns1.synet.edu.cn 2 6 33 0 +113us[ +284us] +/- 28ms
^? 2001:da8:202:10::61 0 6 0 10y +0ns[ +0ns] +/- 0ns
^? 42.96.167.209 2 6 10 8 +2011us[ +949us] +/- 127ms

[root@localhost ~]# date
2016年 12月 31日 星期六 09:30:24 CST

3.2安裝依賴組件

[root@localhost ~]# yum install -y git automake libtool pam-devel

3.3下載谷歌認證模塊

[root@localhost ~]# git clone https://github.com/google/google-authenticator-libpam.git
[root@localhost ~]# ll
drwxr-xr-x 11 root root 4096 12月 27 16:29 google-authenticator-libpam

[root@localhost ~]# cd google-authenticator-libpam/
[root@localhost google-authenticator-libpam]# ./bootstrap.sh
[root@localhost google-authenticator-libpam]# ./configure
[root@localhost google-authenticator-libpam]# make && make install
[root@localhost google-authenticator-libpam]# google-authenticator
[root@localhost google-authenticator-libpam]# cd ~
[root@localhost ~]# vim /etc/pam.d/sshd

auth       required     pam_google_authenticator.so no_increment_hotp

[root@localhost ~]# vim /etc/ssh/sshd_config

asswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# google-authenticator

Do you want authentication tokens to be time-based (y/n) y
#你想做的認證令牌是基於時間的嗎? Warning: pasting the following URL into your browser exposes the OTP secret to Google: https:
//www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/[email protected]%3Fsecret%3DN4HLEJOQHT27VCR6RX66WXB2SY%26issuer%3Dlocalhost.localdomain
Your new secret key is: N4HLEJOQHT27VCR6RX66WXB2SY
Your verification code is 299695
Your emergency scratch codes are:

  44477086
  92790948
  29251218
  26350870
  30696065

Do you want me to update your "/root/.google_authenticator" file? (y/n) y
#你希望我更新你的“/root/.google_authenticator”文件嗎(y/n)? Do you want to disallow multiple uses of the same authentication token
? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent
man-in-the-middle attacks (y/n) y
#你希望禁止多次使用同一個驗證令牌嗎?這限制你每次登錄的時間大約是30秒, 但是這加大了發現或甚至防止中間人攻擊的可能性(y/n)? By default, a new token is generated every
30 seconds by the mobile app. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) y
#預設情況下,令牌保持30秒有效;為了補償客戶機與伺服器之間可能存在的時滯,
我們允許在當前時間前後有一個額外令牌。如果你在時間同步方面遇到了問題, 可以增加視窗從預設的3個可通過驗證碼增加到17個可通過驗證碼,
這將允許客戶機與伺服器之間的時差增加到4分鐘。你希望這麼做嗎(y/n)?
If the computer that you are logging into isn
't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting? (y/n) y
#如果你登錄的那台電腦沒有經過固化,以防範運用蠻力的登錄企圖,可以對驗證模塊
啟用嘗試次數限制。預設情況下,這限制攻擊者每30秒試圖登錄的次數只有3次。 你希望啟用嘗試次數限制嗎(y/n)?

3.4 手機安裝身份驗證器

app下載地址:http://www.coolapk.com/apk/com.google.android.apps.authenticator2 

 

4.登錄驗證

註意,第一次登錄可能會出現登錄失敗的情況,查看日誌信息顯示錯誤如下:

[root@localhost ~]# tail -n10 /var/log/secure

...
Dec 31 09:42:46 localhost sshd[2393]: PAM unable to dlopen(/usr/lib64/security/pam_google_authenticator.so): /usr/lib64/security/pam_google_authenticator.so: cannot open shared object file: No such file or directory
Dec 31 09:42:46 localhost sshd[2393]: PAM adding faulty module: /usr/lib64/security/pam_google_authenticator.so
...

[root@localhost ~]# ln -sv /usr/local/lib/security/pam_google_authenticator.so /usr/lib64/security/pam_google_authenticator.so
"/usr/lib64/security/pam_google_authenticator.so" -> "/usr/local/lib/security/pam_google_authenticator.so" 

開始再次登錄

到了激動人心的時刻了,從手機app中獲取此刻驗證碼為077625,在Verification code裡面輸入,如下:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天發現它真的是一個問題。 拿我最喜歡的Oracle來說吧。一般情況下,建表不管大小寫,建完表名、欄位名總是大寫的,這樣你不得不在單詞之間加下劃線,從而增加了欄位名長度,有時就超長了。在select的結果中顯示也不美觀。Oracle也支持以雙引號括起來的欄位名,不過,你可要註意啦,用"Ok"建的欄位 ...
  • 下載 https://www.raspberrypi.org/downloads/raspbian/ Raspbian 系統這裡有兩個版本的Raspbian,桌面版本與極簡版本或下載其他支持樹莓派的操作系統,如 windows10 iot 等; 接下來我們要做的是把系統鏡像寫入到sd卡中,把sd作為 ...
  • 本文由ilanniweb提供友情贊助,首發於爛泥行天下 想要獲得更多的文章,可以關註我的微信ilanniweb 前一段時間寫過一篇codis集群的文章,寫那篇文章主要是因為當時的項目不支持redis自身集群的功能。 而現在最新的項目是需要redis集群的,這篇文章我們就來介紹下有關redis的安裝與... ...
  • resources 理解 %IOWAIT (%WIO) LINUX系統的CPU使用率和LOAD Linux Performance Observability Tools How Linux CPU Usage Time and Percentage is calculated Linux進程狀態 ...
  • Hi!大家好,我是CrazyCatJack。又和大家見面了。今天給大家帶來的是構建Linux下的根文件系統。希望大家看過之後都能構建出符合自己需求的根文件系統^_^ 1.內容概述 1.構造過程 今天給大家展示的根文件系統構造過程如下圖所示: 正如大家看到的,這是一個環環相扣的過程。因為在這四個方面的 ...
  • SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager teamd Issue Would like to configure a basic Team i ...
  • 我們使用vi或者vim的時候,如果想要顯示行號,可能會這樣做:切換到命令模式,然後輸入set nu,再按回車鍵就顯示了;還有就是咱們在編寫程式的時候,有的時候會希望按下回車鍵後,游標不是每次都在行首,而是與上一行的第一個非空格符處對齊,也就是實現所謂的縮排功能,這是你可以在命令模式下輸入set au ...
  • SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red Hat Enterprise Linux 5 (All Versions) Issue Need ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...