Linux中國

使用一次性密碼本通過 SSH 安全登錄 Linux

OTPW 是什麼

OTPW 由一次性密碼生成器和 PAM 認證規則組成。在 OTPW 中一次性密碼由生成器事先生成,然後由用戶以某種安全的方式獲得(比如列印到紙上)。另一方面,這些密碼會通過 Hash 加密保存在 SSH 伺服器端。當用戶使用一次性密碼登錄系統時,OTPW 的 PAM 模塊認證這些密碼,並且保證它們不能再次使用。

步驟1:OTPW 的安裝和配置

在 Debian, Ubuntu 或 Linux Mint 發行版上

使用 apt-get 安裝:

$ sudo apt-get install libpam-otpw otpw-bin

打開針對 SSH 服務的 PAM 配置文件(/etc/pam.d/sshd),注釋掉下面這行(目的是禁用 PAM 的密碼認證功能):

#@include common-auth

添加下面兩行(用於打開一次性密碼認證功能):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

在 Fedora 或 CentOS/RHEL 發行版上

在基於 RedHat 的發行版中沒有編譯好的 OTPW,所以我們需要使用源代碼來安裝它。

首先,安裝編譯環境:

$ sudo yum git gcc pam-devel
$ git clone https://www.cl.cam.ac.uk/~mgk25/git/otpw
$ cd otpw

打開 Makefile 文件,編輯以「PAMLIB=」開頭的那行配置:

64 位系統:

PAMLIB=/usr/lib64/security

32 位系統:

PAMLIB=/usr/lib/security

編譯安裝。需要注意的是安裝過程會自動重啟 SSH 服務一下,所以如果你是使用 SSH 連接到伺服器,做好被斷開連接的準備吧(LCTT 譯註:也許不會被斷開連接,即便被斷開連接,請使用原來的方式重新連接即可,現在還沒有換成一次性口令方式。)。

$ make
$ sudo make install

現在你需要更新 SELinux 策略,因為 /usr/sbin/sshd 會往你的 home 目錄寫數據,而 SELinux 默認是不允許這麼做的。如果沒有使用 SELinux 服務(LCTT 註:使用 getenforce 命令查看結果,如果是 enforcing,就是打開了 SELinux 服務),請跳過這一步。

$ sudo grep sshd /var/log/audit/audit.log | audit2allow -M mypol
$ sudo semodule -i mypol.pp

接下來打開 PAM 配置文件(/etc/pam.d/sshd),注釋下面這行(為了禁用密碼認證):

#auth       substack     password-auth

添加下面兩行(用於打開一次性密碼認證功能):

auth       required     pam_otpw.so
session    optional     pam_otpw.so

步驟2:配置 SSH 伺服器,使用一次性密碼

打開 /etc/ssh/sshd_config 文件,設置下面三個參數。你要確保下面的參數不會重複存在,否則 SSH 伺服器可能會出現異常。

UsePrivilegeSeparation yes
ChallengeResponseAuthentication yes
UsePAM yes

你還需要禁用默認的密碼認證功能。另外可以選擇開啟公鑰認證功能,那樣的話你就可以在沒有一次性密碼的時候使用公鑰進行認證。

PubkeyAuthentication yes
PasswordAuthentication no

重啟 SSH 伺服器。

Debian, Ubuntu 或 Linux Mint 發行版:

$ sudo service ssh restart

Fedora 或 CentOS/RHEL 7 發行版:

$ sudo systemctl restart sshd

(LCTT 譯註:雖然這裡重啟了 sshd 服務,但是你當前的 ssh 連接應該不受影響,只是在你完成下述步驟之前,無法按照原有方式建立新的連接了。因此,保險起見,要麼多開一個 ssh 連接,避免誤退出當前連接;要麼將重啟 sshd 伺服器步驟放到步驟3完成之後。)

步驟3:使用 OTPW 產生一次性密碼

之前提到過,你需要事先創建一次性密碼,並保存起來。使用 otpw-gen 命令創建密碼:

$ cd ~
$ otpw-gen > temporary_password.txt

這個命令會讓你輸入密碼前綴,當你以後登錄的時候,你需要同時輸入這個前綴以及一次性密碼。密碼前綴是另外一層保護,就算你的一次性密碼錶被泄漏,別人也無法通過暴力破解你的 SSH 密碼。

設置好密碼前綴後,這個命令會產生 280 個一次性密碼(LCTT 譯註:保存到 ~/.otpw 下),並將它們導出到一個文本文件中(如 temporary_password.txt)。每個密碼(默認是 8 個字元)由一個 3 位十進位數索引。你需要將這個密碼錶列印出來,並隨身攜帶。

查看 ./.otpw 文件,它存放了一次性密碼的 HASH 值。頭 3 位十進位數與你隨身攜帶的密碼錶的索引一一對應,在你登錄 SSH 伺服器的時候會被用到。

$ more ~/.otpw
OTPW1
280 3 12 8
191ai+:ENwmMqwn
218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

測試一次性密碼登錄 SSH 伺服器

使用普通的方式登錄 SSH 伺服器:

$ ssh user@remote_host

如果 OTPW 成功運行,你會看到一點與平時登錄不同的地方:

Password 191:

現在打開你的密碼錶,找到索引號為 191 的密碼。

023 kBvp tq/G  079 jKEw /HRM  135 oW/c /UeB  191 fOO+ PeiD  247 vAnZ EgUt

從上表可知,191 號密碼是「fOO+PeiD」。你需要加上密碼前綴,比如你設置的前綴是「000」,則你實際需要輸入的密碼是「000fOO+PeiD」。

成功登錄後,你這次輸入的密碼自動失效。查看 ~/.otpw 文件,你會發現第一行變成「---------------」,這表示 191 號密碼失效了。

OTPW1
280 3 12 8
------------218tYRZc%PIY27a
241ve8ns%NsHFmf
055W4/YCauQJkr:
102ZnJ4VWLFrk5N
2273Xww55hteJ8Y
1509d4b5=A64jBT
168FWBXY%ztm9j%
000rWUSdBYr%8UE
037NvyryzcI+YRX
122rEwA3GXvOk=z

總結

在這個教程中,我介紹了如何使用 OTPW 工具來設置一次性登錄密碼。你也許意識到了在這種雙因子的認證方式中,列印一張密碼錶讓人感覺好 low,但是這種方式是最簡單的,並且不用依賴任何第三方軟體。無論你用哪種方式創建一次性密碼,在你需要在一個不可信任的環境登錄 SSH 伺服器的時候,它們都很有用。你可以就這個主題來分享你的經驗和觀點。

via: http://xmodulo.com/secure-ssh-login-one-time-passwords-linux.html

作者:Dan Nanni 譯者:bazz2 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國