歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 用 Google Authenticator 加強 VPS 及 WordPress 甚至桌面電腦的安全性

用 Google Authenticator 加強 VPS 及 WordPress 甚至桌面電腦的安全性

日期:2017/2/28 14:35:25   编辑:Linux教程

傳統地用 SSH 登錄 VPS 的時候,靠的只是一串字符密碼,如果密碼被洩露、被猜解、被暴力枚舉成功,那麼 VPS 就完全暴露在壞人手中了。安全意識高一些的用戶會使用公私鑰代替字符來登錄,但是這樣的缺點是如果在陌生的電腦上想要臨時登錄一下,由於沒有私鑰,也就沒辦法了。傳統地登錄 WordPress 的時候,更是只有一個密碼,如果被洩露、猜解、暴力枚舉,辛辛苦苦經營的博客就完蛋了。

本文介紹如何通過 Google Authenticator 構建“物理屏障”,最大限度地阻斷來自網絡的密碼攻擊。本文假定你已經了解 Google Authenticator 的工作原理。

一、前言

雖然從小就被教導說操作系統一定要設置強勁的密碼,但實際上,小時候用的大多是“遠程桌面連接”默認被禁用的盜版 Windows,且在家裡上網時候總是在路由器後面,沒有獨立公網 IP,因此就算電腦設置為空密碼,也沒有什麼大問題。

後來,上了大學了,網絡環境也有所改變:在宿捨上網的時候,電腦能分配到獨立公網 IP,並且能直接從校外網絡連入(甚至可以跑 Apache 玩),而我的 Xubuntu 又裝了 OpenSSH Server,所以這時候密碼就非常重要了,如果密碼不夠強勁的話,別人可以在互聯網的任何一個地方通過 SSH 完全控制我的電腦。這太可怕了。

雖然不是所有人的電腦都有公網 IP 可以方便地從外網連入,但是顯然 VPS 是有公網 IP 的。我以前居然沒有意識到 VPS 是多麼地脆弱,但是某天突然靈光一現:如果 VPS 的 root 密碼被洩露、猜解或是暴力枚舉,那麼任何人都可以通過 ssh [email protected] 來完全控制我的網站!

這麼遲才想到這一點的確比較奇怪,但是好在,目前還沒有“亡羊”,趕緊先“補牢”吧。個人又非常喜歡 Google Authenticator 這種二步驗證工具(以前寫過文章)於是便結合 Google Authenticator 折騰出了這篇簡陋但是還算安全的教程。本教程中環境默認為:

  • 服務器為 512MiB RAM 的 LAMP VPS,在 XeHost 買的(半廣告推薦:此家 VPS 物美價廉,想買的點我),裝著 Ubuntu 11.04 amd64。
  • 客戶機為裝著 Xubuntu 11.10 amd64 的筆記本電腦。
  • 驗證器為裝有 Android 版 Google Authenticator 的 HTC Desire Z (Vision)。

二、用 Google Authenticator 加強 SSH 登錄安全性

安裝相關 PMA 模塊

首先需要在服務器上安裝 libpam-google-authenticator 這個包。Ubuntu 11.10 及以上的官方源裡自帶了這個包,直接使用sudo apt-get install libpam-google-authenticator 命令便可自動解決依賴關系並安裝。但是如果是 11.10 以上或者是其他發行版,就要自己的編譯安裝了。輸入以下幾條命令就行了:

  1. sudo apt-get install apt-get install libpam0g-dev libqrencode3 #這是它依賴的兩個包,各發行版裡大多帶了。
  2. git clone https://code.google.com/p/google-authenticator/ #下載源代碼
  3. cd google-authenticator/libpam/
  4. make install #編譯並安裝

如果用著 Ubuntu 11.10 以下又不想自己編譯的話(比如 VPS 是 11.04 的我),其實也有偷懶的辦法的,就是直接拿官方源裡編譯好的 11.10 的二進制包來充數。這回是不需要 libpam0g-dev 這個包了,直接用下面的命令就好了:

  1. sudo apt-get install apt-get install libqrencode3 #這個包依然是要的
  2. wget http://us.archive.ubuntu.com/ubuntu/pool/universe/g/google-authenticator/libpam-google-authenticator_20110413.68230188bdc7-1ubuntu1_amd64.deb #下載二進制包,如果是 32 位的操作系統的話請把 amd64 換成 i386
  3. sudo dpkg -i libpam-google-authenticator_20110413.68230188bdc7-1ubuntu1_amd64.deb #安裝之

配置 Google Authenticator

Google Authenticator 的服務器端已經安裝好了,那麼客戶端呢?Android 用戶請點這裡安裝,iOS 用戶請點這裡安裝,其他智能手機用戶也有相應的開源解決方案,請自行搜索下載。非智能手機用戶暫時無解。:-( 不過,正在閱讀本文的你一定早就用過 Google Authenticator 了吧?

Google Authenticator 其實是一套開源的解決方案,所以不僅在 Google 的網站上能用,在其他地方也能用的。然而,在 Google 的網站上,會直接給你一個 QR 碼讓你掃的,而自己配置的 Google Authenticator 則要自己生成了。

首先需要切換到對應的用戶,如果 VPS 上只有一個用戶的話,自然是可以省略這一步的,但是多用戶的 VPS 需要先切換到對應的用戶,再運行google-authenticator 命令,結果類似這樣:

這個 QR 碼自然是給 Google Authenticator 應用程序來掃描的,也可以訪問上面的那個鏈接,用 Google Chart API 生成的 QR 碼來掃描。還可以照著 QR 碼下面的文字密鑰手工輸入。當 Google Authenticator 識別了這個賬號之後,驗證器就配置好了。在文字密鑰下面還提供了幾個應急碼,為手機丟了等情況下所用的,可以妥善保管。

這時 Google Authenticator 雖然運行了,但是相關設置還沒有保存,程序會問你Do you want me to update your "~/.google_authenticator" file (y/n) (是否將配置寫入家目錄的配置文件),當然是回答 y 了。又會問

  1. Do you want to disallow multiple uses of the same authentication
  2. token?This restricts you to one login about every 30s, but it increases
  3. your chances to notice or even prevent man-in-the-middle attacks (y/n)

大意是說是否禁止一個口令多用,自然也是答 y。下一個問題是

  1. Bydefault, tokens are good for30 seconds andin order to compensate for
  2. possible time-skew between the client and the server, we allow an extra
  3. token before and after the current time.If you experience problems with poor
  4. time synchronization, you can increase the window from its default
  5. size of 1:30min to about 4min.Do you want to do so (y/n)

大意是問是否打開時間容錯以防止客戶端與服務器時間相差太大導致認證失敗。這個可以根據實際情況來。我的 Android 設備時間很准(與網絡同步的),所以答 n,如果一些 Android 平板電腦不怎麼連網的,可以答 y 以防止時間錯誤導致認證失敗。再一個問題是

  1. If the computer that you are logging into isn't hardened against brute-force
  2. login attempts, you can enable rate-limiting for the authentication module.
  3. By default, this limits attackers to no more than 3 login attempts every 30s.
  4. Do you want to enable rate-limiting (y/n)

選擇是否打開嘗試次數限制(防止暴力攻擊),自然答 y。

問題答完了,家目錄中多出一個 .google_authenticator 文件(默認權限為 400),這時客戶端與服務端已經配套起來了,以後不用再運行google-authenticator 命令了,否則會重新生成一組密碼。

配置 SSH 驗證

此時雖然 Google Authenticator 已經配置好了,但是並沒有任何程序會去調用它。所以需要設置 SSH 登錄的時候去通過它驗證。

打開 /etc/pam.d/sshd 文件,添加

  1. auth required pam_google_authenticator.so

這一行,保存。再打開 /etc/ssh/sshd_config 文件,找到

  1. ChallengeResponseAuthenticationno

把它改成

  1. ChallengeResponseAuthentication yes

並保存。最後,輸入

  1. sudo service ssh restart

來重啟 SSH 服務以應用新的配置。

這時候再用 SSH 登錄的話就會這樣了:

  1. wzyboy@vermilion:~$ ssh root@natatio
  2. Password:[輸入密碼]
  3. Verification code:[輸入驗證碼]
  4. Welcome to Ubuntu11.04(GNU/Linux2.6.38-8-generic x86_64)

於是就這樣成功了。

當然,如果經常要登錄 SSH 的話,每次這樣輸入未免太麻煩了,好在,這個額外的認證步驟與以前的公私鑰認證是可以同時使用的。所以在自己的桌面電腦上可以做一下公私鑰認證:

  1. ssh-keygen #生成密鑰對,一路回車即可,已經生成過的不用生成了
  2. ssh-copy-id [email protected] #把公鑰添加到 VPS 上

這樣達到的效果是,以後在自己的電腦上 SSH 到 VPS 的時候,是不需要輸入任何密碼的,可以直接連接,而在陌生的電腦上需要管理 VPS 時,需要輸入賬戶密碼及 Google Authenticator 的驗證碼。而想要從網絡上攻擊你的 VPS 的壞人,就算猜出、枚舉出 VPS 的密碼由於沒有手機上 Google Authenticator 的驗證碼,就沒辦法了……

三、用 Google Authenticator 增強 WordPress 安全性

SSH 登錄已經有 Google Authenticator 保護了,但是服務器運行的程序還沒有,比如 WordPress。相對於 MySQL 漏洞攻擊等高難度操作,我覺得 WordPress 被攻破的可能性更大:畢竟也只有一個短短的密碼保護著。好在由於 WordPress 是“大路貨”,用的人很多,插件自然也不少,有人便開發出了 WordPress 用的 Google Authenticator 的插件。啟用方法如下:

  1. 在 WordPress 後台搜索並安裝 Google Authenticator 這個插件,啟用之。
  2. 在 WordPress 後台個人 Profile 頁面 Google Authenticator Settings 選項下,選中 Active,填好 Description(只是在手機上顯示的名字而已),再點擊 Show/Hide QR Code。
  3. 在 Google Authenticator 應用程序中掃描這個 QR 碼以添加賬號,或者手工輸入 Secret 也行。

配置成功以後,再登錄 WordPress 後台的時候就會是這樣的:

不輸入正確的 Google Authenticator code 是不能登錄的。當然在自己的電腦上是可以勾選 Remember Me 以減少麻煩的。

四、用 Google Authenticator 增強桌面電腦的安全性?

本文第二節講了如何把 Authenticator 用在 VPS 上以增強 SSH 登錄時的安全性。自然,Authenticator 也是能用在裝有 GNU/Linux 的桌面電腦上的。安裝模塊的方法和在 VPS 上是一樣的,手機上配置也是一樣,但是調用的時候是不同的。

進入 /etc/pam.d/ 目錄,可以看到一些文件:

  1. wzyboy@vermilion:/etc/pam.d$ ls
  2. atd common-password lightdm-autologin ppp
  3. chfn common-session login samba
  4. chpasswd common-session-noninteractive newusers sshd
  5. chsh cron other su
  6. common-account cups passwd sudo
  7. common-auth lightdm polkit-1 xscreensaver

這些文件從文件名就能看出它們是干嘛的:控制一些重要操作的認證。在 VPS 中,我們在 sshd 中添加了 auth required pam_google_authenticator.so 這一行,於是在 SSH 登錄的時候就會調用 Authenticator 來認證。在別的文件中加入 auth required pam_google_authenticator.so 這一行的話,就會在相應的操作中調用 Authenticator 來認證了。下面是幾個重要的:

  • lightdm。這個會使通過圖形界面登錄的時候要求輸入驗證碼,效果如下:

    輸入密碼之後還要再輸入驗證碼:

    需要注意的是,lightdm 只是 Ubuntu 11.10 和 Xubuntu 11.10 及以上版本默認的顯示管理器,其他的發行版可能是 gdm、kdm 等,請自行修改。
  • xscreensaver。這個會使屏保解鎖的時候也要輸入密碼和驗證碼,效果如下:
  • login。這個會使在字符界面下(如 tty)登錄的時候也會要求輸入驗證碼。
  • passwd。這個會使設置用戶密碼的時候要求輸入驗證碼。
  • sudo。這個會使普通用戶試圖提權執行系統操作的時候要求輸入驗證碼。很適合給多人共享電腦用。

當然,如果你的電腦像我一樣裝了 OpenSSH Server 的話,也可以在 sshd 中加入 auth required pam_google_authenticator.so 這一行,使壞人無法從公網上登錄你的電腦。

五、尾聲

相對前幾篇博客,這篇博客寫得有一些倉促。並且,教程的內容並不怎麼復雜,Linux 的高級用戶肯定都會的,所以本文的目標讀者只能是剛接觸 Linux VPS 的用戶了,希望能幫到他們。

VIA: http://wzyboy.im/post/765.html

Copyright © Linux教程網 All Rights Reserved