Google Authenticator 是個好東西。它不僅可以增強 Google 賬戶登錄的安全性,更因為它開源的特性,被部署到別的地方使用。比如 Linux PAM、WordPress 等,使用戶可以借助 Google 的這套 OTP 方案,增強自己的服務器、網站和個人電腦的安全性。筆者之前就寫過一篇詳細的教程《用 Google Authenticator 加強 VPS 及 WordPress 甚至桌面電腦的安全性》,介紹如何把 Google Authenticator 部署到服務器、WordPress 和個人電腦上。如果你覺得這還不夠安全的話,本文將會教會你如何把它部署到 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 證書的過程的痛苦。
由於這不是官方模塊,所以必然是要我們自己來下載安裝的。這個項目的主頁在這裡,但是它的下載列表中提供的模塊是有 Bug 的,如果不想自己修復 Bug 的話,可以在這裡下載到 Bug 修復後的 mod_authn_google。
注意,這個模塊是在 64 位 Linux 下編譯的,如果你用的是 32 位的系統,請下載源碼後自行編譯。
下載得到的是一個 .so 的庫文件,可以使用 apxs2 腳本來安裝,以 Ubuntu 等基於 APT 和 dpkg 的發行版為例,這個腳本可以通過安裝 apache2-prefork-dev 包得到。
接下來便可使用 apxs2 來安裝模塊:
各參數含義:
由於這是一個已經編譯好的模塊了,所以除了用腳本來自動安裝,也可以手工安裝:
首先要建一個供它存放認證信息的地方,比如 /etc/apache2/ga_auth,接下來編輯 /etc/apache2/mods-available/authn_google.conf 文件,以下是范例:
保存退出之後,再
即可,如果沒有報錯的話,現在現在 mod_authn_google 應該已經在工作了,訪問 /secret 的話會提示輸入用戶名密碼,但是我們沒有添加用戶,所以輸啥都是錯的。
認證用戶是通過 Google Authenticator 提供的工具來生成認證文件的,將生成的認證文件復制到 GoogleAuthUserPath 所對應的目錄即可,比如/etc/apache2/ga_auth。
如何使用 Google Authenticator 生成新用戶的說明,在這篇文章中已經很清楚了,這裡再提一下:
命令,把屏幕上的 QR 碼掃描到裝有 Google Authenticator 的手機中,並按照提示回答幾個問題,生成新的 ~/.google_authenticator 文件。
這樣便生成了一個有效的用戶。將家目錄中新生成的 .google_authenticator 文件復制到 /etc/apache2/ga_auth 目錄下,文件名為用戶名,並使用
(把 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