歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 進一步部署 Google Authenticator:Apache 模塊

進一步部署 Google Authenticator:Apache 模塊

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

Google Authenticator 是個好東西。它不僅可以增強 Google 賬戶登錄的安全性,更因為它開源的特性,被部署到別的地方使用。比如 Linux PAM、WordPress 等,使用戶可以借助 Google 的這套 OTP 方案,增強自己的服務器、網站和個人電腦的安全性。筆者之前就寫過一篇詳細的教程《用 Google Authenticator 加強 VPS 及 WordPress 甚至桌面電腦的安全性》,介紹如何把 Google Authenticator 部署到服務器、WordPress 和個人電腦上。如果你覺得這還不夠安全的話,本文將會教會你如何把它部署到 Apache 裡。

一、Google Authenticator 的 Apache 模塊的優勢

如何增強服務器的安全性?這個問題向來都是站長們的討論焦點。從 SSH 登錄方面來說,可以限制 IP 地址登錄,可以禁用密碼登錄(僅用公鑰登錄),可以用 Fail2ban 來對付它們,甚至可以把嘗試暴力破解的 IP 加到 iptables 黑名單中等。但是,Web 前端怎麼辦?總不能限制 IP 地址訪問吧?比如 WordPress 的管理後台和 phpMyAdmin 的登錄頁面,就是很容易遭到攻擊的地方。為了防御這種人肉攻擊,簡單點地做法是用mod_auth_basic 或 mod_auth_digest 來進行驗證,高檔一點的話,可以用 mod_ssl 中的雙向 TLS 認證。但是前者太簡單,如果頁面是 http:// 的話,密碼是明文傳輸的,對攻擊者來說十分方便的,而後者相對來說比較復雜,要自己建立並維護一個 CA,或者需要花錢去請第三方 CA 簽名證書。而 Google Authenticator 的 Apache 模塊 mod_authn_google 則提供一種經濟、方便、簡潔、有效的認證方式:動態密碼認證。

相對 mod_auth_basic 來說,mod_authn_google 的密碼是動態的,更不易被猜解;相對 mod_ssl 的雙向 TLS 認證來說,mod_authn_google 免去了額外請第三方 CA 簽名的資金和復雜的配置 CA 證書的過程的痛苦。

二、安裝 mod_authn_google

由於這不是官方模塊,所以必然是要我們自己來下載安裝的。這個項目的主頁在這裡,但是它的下載列表中提供的模塊是有 Bug 的,如果不想自己修復 Bug 的話,可以在這裡下載到 Bug 修復後的 mod_authn_google。

注意,這個模塊是在 64 位 Linux 下編譯的,如果你用的是 32 位的系統,請下載源碼後自行編譯。

下載得到的是一個 .so 的庫文件,可以使用 apxs2 腳本來安裝,以 Ubuntu 等基於 APT 和 dpkg 的發行版為例,這個腳本可以通過安裝 apache2-prefork-dev 包得到。

  1. sudo apt-get install apache2-prefork-dev

接下來便可使用 apxs2 來安裝模塊:

  1. sudo apxs2 -i -a -n authn_google mod_authn_google.so

各參數含義:

-i
安裝
-a
自動添加 LoadModule 語句,方便加載
-n authn_google
安裝後模塊的名字
mod_authn_google.so
剛才下載得到的模塊的文件名

由於這是一個已經編譯好的模塊了,所以除了用腳本來自動安裝,也可以手工安裝:

  1. sudo cp mod_authn_google.so /usr/lib/apache2/modules/
  2. echo "LoadModule authn_google_module /usr/lib/apache2/modules/mod_authn_google.so"| sudo tee /etc/apache2/mods-available/authn_google.load

三、配置 mod_authn_google

首先要建一個供它存放認證信息的地方,比如 /etc/apache2/ga_auth,接下來編輯 /etc/apache2/mods-available/authn_google.conf 文件,以下是范例:

  1. <Directory/secret> # 要加上驗證的目錄
  2. Options FollowSymLinks Indexes ExecCGI
  3. AllowOverride All # 允許每個目錄下通過 .htaccess 覆蓋這裡的全局設置
  4. Order deny,allow
  5. Allow from all
  6. AuthType Basic
  7. AuthName "Secret" # 彈出窗口的提示信息
  8. AuthBasicProvider "google_authenticator"
  9. Require valid-user
  10. GoogleAuthUserPath ga_auth # 保存認證信息的目錄
  11. GoogleAuthCookieLife 3600 # Cookies 有效時間,這段時間內不用再輸密碼,單位為秒
  12. GoogleAuthEntryWindow 2 # 當時間不同步時,允許有這樣的正負誤差。以 30s 為單位
  13. </Directory>

保存退出之後,再

  1. sudo a2enmod authn_google && sudo service apache2 restart

即可,如果沒有報錯的話,現在現在 mod_authn_google 應該已經在工作了,訪問 /secret 的話會提示輸入用戶名密碼,但是我們沒有添加用戶,所以輸啥都是錯的。

四、添加認證用戶

認證用戶是通過 Google Authenticator 提供的工具來生成認證文件的,將生成的認證文件復制到 GoogleAuthUserPath 所對應的目錄即可,比如/etc/apache2/ga_auth。

如何使用 Google Authenticator 生成新用戶的說明,在這篇文章中已經很清楚了,這裡再提一下:

  1. 使用包管理器安裝 libpam-google-authenticator 這個包。以 Ubuntu Server 為例:
    1. sudo apt-get install libpam-google-authenticator
  2. 如果之前用過 Google Authenticator,請先將 ~/.google_authenticator 文件改名備份一下。
  3. 運行
    1. google-authenticator

    命令,把屏幕上的 QR 碼掃描到裝有 Google Authenticator 的手機中,並按照提示回答幾個問題,生成新的 ~/.google_authenticator 文件。

這樣便生成了一個有效的用戶。將家目錄中新生成的 .google_authenticator 文件復制到 /etc/apache2/ga_auth 目錄下,文件名為用戶名,並使用

  1. sudo chmod 640 wzyboy && sudo chown root:www-data wzyboy

(把 wzyboy 更換為相應的用戶名)更改文件權限,以確保 Apache 能讀取它,便完成了一個用戶的添加。如需更多用戶訪問,重復這些步驟即可。最後記得把家目錄裡的 .google_authenticator 文件改回來。

五、調試與偵錯

建議在浏覽器的隱身窗口中進行調試以排除 Cookies 的干擾。如果出錯,可從 /var/log/apache2/error.log 中找答案。

補充:該模塊在 Google Code 上的預編譯文件有 Bug,不讀取 Cookies,導致提示找不到 /etc/apache2/ga_auth/(null) 文件。這時一個比較搞笑的 wordaround 就是把你的用戶認證信息文件重命名為 (null),然後就可以配合這個 Bug 繼續工作了。此時用戶名輸什麼都可以,密碼則是要保持正確的。這倒也別有一番風味…… via @jimmy_xu_wrk。

via : http://wzyboy.im/post/869.html

Copyright © Linux教程網 All Rights Reserved