Ubuntu Server啟用SSH多重要素驗證方法

來源:互聯網
上載者:User

 

  大家都知道,SSH 預設是採用密碼方式來進行身分識別驗證的,即便你使用了 SSH 密鑰來代替密碼。由於還是單一因素的身分識別驗證方式,一旦密鑰泄漏,同樣還是會危及到伺服器安全。

  為瞭解決這一問題,本文中我們將介紹如何啟用 Ubuntu Server 的 SSH 多重要素驗證(MFA,Multi-factor authentication)。啟用之後,在登入 SSH 時需要驗證你綁定的電腦或手機等不同的驗證因素才能登入成功。當然,多重要素驗證的因素可以包括:

  密碼或安全問題

  驗證程式或安全性權杖

  指紋或語音

  ……

  常見的驗證方式就是使用 OATH-TOTP 應用,例如 Google Authenticator(Microsoft Account 的兩步驗證功能就是用的它)。OATH-TOTP(基於時間的一次性開放密碼)是一種開放協議,它用於產生不同的一次性使用密碼,通常情況下為每 30 秒新產生一個 6 位驗證碼。

  下面我們將介紹如何使用 OATH-TOTP 應用完成 SSH 登入認證,從而取代掉系統原本的 SSH 密碼或密鑰驗證方式,使得伺服器管理更安全。

  安裝libpam-google-authenticator

  在本步驟中我們將安裝和配置 Google PAM。

  熟知 Linux 身分識別驗證體系的朋友都知道,PAM 是 Linux 系統中驗證使用者身份的基礎架構和認證模組。Google 開發的 OATH-TOTP 應用也安全相容 PAM,所以我們可以使用 Google Authenticator 來完成 SSH 多重要素驗證。

  1. 使用如下命令更新 Ubuntu 軟體倉庫緩衝:

  sudo apt-get update

  2. 安裝 Google PAM:

  sudo apt-get install libpam-google-authenticator

  libpam-google-authenticator 安裝好之後,我們便需要為每個要進行重身分識別驗證的使用者產生 TOTP key。這個 Key 是在使用者基礎上產生的,而不是系統全域。也就是說,要使用 TOTP 認證程式登入 SSH 的使用者必需單獨擷取和維護自己的密鑰。

  google-authenticator

  執行上述命令後,程式會提出問題,第一個問題是詢問是否產生基於時間的認證令牌。Google PAM 支援基於時間或基於序列的存取權杖。使用基於序列的令牌時,每次訪問需要將令牌代碼遞增;基於時間的存取權杖會在一定時間內隨機變化,使用起來更像是 Google Authenticator,所以我們這裡選擇yes。

  Do you want authentication tokens to be time-based (y/n) y

  在回答第一個問題之後,便會立即輸出大量資訊。包括:QR 代碼、新的安全密碼、驗證碼及 5 個 8 位的緊急碼。這些資訊請務必妥善儲存,相當重要。

  此時請用 Google Authenticator 掃描輸出的二維碼將其添加到 Google 的 OATH-TOTP 應用當中,一旦添加成功,將會出現一個新的條目並每 30 秒重新整理一次 6 位元令牌。

  剩下的就是告訴 Google PAM 如何工作,我們一步一步來看。

  Do you want me to update your “~/.google_authenticator” file (y/n) y

  表示將 key 和配置選項寫入 .google_authenticator 檔案,我們選擇yes。

  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

  是否將使用過的密碼配置為立即到期,這裡通常選擇yes,以防止有人截獲。

  By default, tokens are good for 30 seconds and 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. If you experience problems with poor

  time synchronization, you can increase the window from its default

  size of 1:30min to about 4min. Do you want to do so (y/n) n

  預設令牌有效時間為 30 秒並會自動補償伺服器與用戶端之間的時間差,該選項表示是否將時間容差改為 4 分鐘,我們選擇No。

  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 次登入,我們選擇yes以防止人有暴力破解。

  完成以上步驟後,Google PAM 的所有配置工作就已經完成了。

  配置OpenSSH支援MFA

  接下來,我們要配置 SSH 來使用 TOTP key,這需要告訴 SSH 使用 Google PAM 進行身分識別驗證。

  1. 在/etc/pam.d/sshd檔案最後添加如下內容:

  auth required pam_google_authenticator.so nullok

  最後的nullok是告訴 PAM 此種身分識別驗證方式為可選,此時使用者仍然可同時使用 SSH 密碼和密鑰的方式進行登入。當我們測試使用 OATH-TOTP key 能夠正確無誤登入時,便可將nullo刪除以指明強制使用 MFA。

  2. 接下來我們需要配置 SSH 支援此種方式的身分識別驗證。編輯/etc/ssh/sshd_config設定檔,將其中的ChallengeResponseAuthentication配置為yes,再重啟 SSH 服務:

  sudo service ssh restart

  至此,我們的 SSH 已經可以使用 Google Authenticator 進行驗證了,是不是非常不錯。最後,為了保證伺服器安全,建議大家開啟 SSH 金鑰 + MFA 雙步驟驗證的方式,放棄對 SSH 密碼驗證方式的使用。

  編輯/etc/ssh/sshd_config設定檔:

  PasswordAuthentication no

  UsePAM yes #下面增加

  AuthenticationMethods publickey,keyboard-interactive

  重要:在配置過程中大家務必在測試好使用 Google Authenticator 可以登入 SSH 之後再停用 SSH 密碼或密鑰驗證方式,否則導致無法串連就 Over 了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.