Linux 下如何為登入和 sudo 設定雙因子認證

linux.cn發表於2016-07-13

安全就是一切。我們生活的當今世界,資料具有令人難以置信的價值,而你也一直處於資料丟失的風險之中。因此,你必須想盡辦法保證你桌面系統和伺服器中資料的安全。結果,管理員和使用者就會建立極其複雜的密碼、使用密碼管理器甚至其它更復雜的東西。但是,如果我告訴你你可以只需要一步,至多兩步就能登入到你的 Linux 伺服器或桌面系統中呢?多虧了 Google 身份驗證器,現在你可以做到了。並且,配置也極其簡單。

我會給你簡要介紹為登入和 sudo 設定雙因子認證的步驟。我基於 Ubuntu 16.04 桌面系統進行介紹,但這些步驟也適用於其它伺服器。為了實現雙因子認證,我會使用 Google 身份驗證器。

這裡有個非常重要的警告:一旦你設定了認證,沒有一個從認證器中獲得的由 6 個數字組成的驗證碼你就不可能登入賬戶(或者執行 sudo 命令)。這也給你增加了一步額外的操作,因此如果你不想每次登入到 Linux 伺服器(或者使用 sudo)的時候都要拿出你的智慧手機,這個方案就不適合你。但你也要記住,這額外的一個步驟也給你帶來一層其它方法無法給予的保護。

話不多說,開始吧。

安裝必要的元件

安裝Google 身份驗證器(Google Authenticator),首先要解決兩個問題。一是安裝智慧機應用。下面是如何從 Google 應用商店安裝的方法:

  1. 在你的安卓裝置中開啟 Google 應用商店
  2. 搜尋 google 身份驗證器(Google Authenticator)
  3. 找到並點選有 Google Inc. 標識的應用
  4. 點選安裝
  5. 點選“接受”
  6. 等待安裝完成

接下來,我們繼續在你的 Linux 機器上安裝這個認證器。步驟如下:

  1. 開啟一個終端視窗
  2. 輸入命令 sudo apt-get install google-authenticator
  3. 輸入你的 sudo 密碼並敲擊回車
  4. 如果有彈窗提示,輸入 y 並敲擊回車
  5. 等待安裝完成

接下來配置使用 google-authenticator 進行登入。

配置

要為登入和 sudo 新增雙因子認證只需要編輯一個檔案,即 /etc/pam.d/common-auth。開啟並找到如下一行:

auth    [success=1 default=ignore]      pam_unix.so nullok_secure

在這行上面新增:

auth required pam_google_authenticator.so

儲存並關閉檔案。

下一步就是為系統中的每個使用者設定 google-authenticator(否則他們就不能登入了)。為了簡單起見,我們假設你的系統中有兩個使用者:jack 和 olivia。首先為 jack 設定(我們假設這是我們一直使用的賬戶)。

開啟一個終端視窗並輸入命令 google-authenticator。之後會問你一系列的問題(每個問題你都應該用 y 回答)。問題包括:

  • 是否允許更新你的 “/home/jlwallen/.google_authenticator” 檔案 (y/n) y
  • 是否禁止多個使用者使用同一個認證令牌?這會限制你每 30 秒內只能登入一次,但能增加你注意到甚至防止中間人攻擊的可能 (y/n)
  • 預設情況下令牌時長為 30 秒即可,為了補償客戶端和伺服器之間可能出現的時間偏差,我們允許使用當前時間之前或之後的其它令牌。如果你無法進行時間同步,你可以把這個時間視窗由預設的 1:30 分鐘增加到 4 分鐘。是否希望如此 (y/n)
  • 如果你嘗試登入的計算機沒有針對暴力破解進行加固,你可以為驗證模組啟用速率限制。預設情況下,限制攻擊者每 30 秒不能嘗試登陸超過 3 次。是否啟用速率限制 (y/n)

一旦完成了問題回答,你就會看到你的金鑰、驗證碼以及 5 個緊急刮碼(emergency scratch code)。把這些刮碼列印出來並儲存。你可以在無法使用手機的時候使用它們(每個刮碼僅限使用一次)。金鑰用於你在 Google 身份驗證器上設定賬戶,驗證碼是你能當下就能夠立即使用(如果需要)的一次性驗證碼。

設定應用

現在你已經配置好了使用者 jack。在設定使用者 olivia 之前,你需要在 Google 身份驗證器應用上為 jack 新增賬戶(LCTT 譯註:實際操作情形中,是為 jack 的手機上安裝的該應用建立一個賬戶)。在開啟應用,點選“選單”按鈕(右上角三個豎排點)。點選“新增賬戶”然後點選“輸入提供的金鑰”。在下一個視窗(圖1),你需要輸入你執行 google-authenticator 應用時提供的 16 個數字的金鑰。給賬戶取個名字(以便你記住這用於哪個賬戶),然後點選“新增”。

如何為登入和 sudo 設定雙因子認證

圖1: 在 Google Authenticator 應用上新建賬戶

(譯註:Google 身份驗證器也可以掃描你在伺服器上設定時顯示的二維碼,而不用手工輸入金鑰)

新增完賬戶之後,你就會看到一個 6 個數字的密碼,你每次登入或者使用 sudo 的時候都會需要這個密碼。

最後,在系統上設定其它賬戶。正如之前提到的,我們會設定一個叫 olivia 的賬戶。步驟如下:

  1. 開啟一個終端視窗
  2. 輸入命令 sudo su olivia
  3. 在智慧機上開啟 Google 身份驗證器
  4. 在終端視窗(圖2)中輸入(應用提供的) 6 位數字驗證碼並敲擊回車
  5. 輸入你的 sudo 密碼並敲擊回車
  6. 以新使用者輸入命令 google-authenticator,回答問題並記錄生成的金鑰和驗證碼。

成功為 olivia 使用者設定好之後,用 google-authenticator 命令,在 Google 身份驗證器應用上根據使用者資訊(和之前為第一個使用者新增賬戶相同)新增一個新的賬戶。現在你在 Google 身份驗證器應用上就會有 jack 和 olivia 兩個賬戶了。(LCTT 譯註:在實際操作情形中,通常是為 jack 和 olivia 兩個人的手機分別設定。)

如何為登入和 sudo 設定雙因子認證

圖2: 為 sudo 輸入 6位數字驗證碼

好了,就是這些。每次你嘗試登入系統(或者使用 sudo) 的時候,在你輸入使用者密碼之前,都會要求你輸入提供的 6 位數字驗證碼。現在你的 Linux 機器就比新增雙因子認證之前安全多了。雖然有些人會認為這非常麻煩,我仍然推薦使用,尤其是那些儲存了敏感資料的機器。

相關文章