Linux Token Auth 一次性密碼認證

http://netkiller.github.io/journal/token.html

Mr. Neo Chen (陳景峯), netkiller, BG7NYT


中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890


Mr. 祥建, Android 手機端開發


中國廣東省深圳市南山區

+86 18665871161


版權聲明

轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。

文檔出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信掃瞄二維碼進入 Netkiller 微信訂閲號

QQ群:128659835 請註明“讀者”

2014-08-01

摘要

伺服器端腳本:

https://github.com/oscm/devops/blob/master/bin/chpasswd.sh

手機應用:

https://github.com/oscm/Token


目錄

1. 什麼是Token

Token(令牌)是一個身份認證標識,token還有一個特點,那就是存在過期時間的。也就是令牌不是長久有效的。

2. 為什麼使用令牌

我們通常需要臨時或者一次性使用的身份認證

3. 什麼時候能用到令牌技術

例如我們去餐廳就餐,向前台獲取Wifi密碼,然後可以享受30分鐘的上網服務。30分鐘過後密碼將失效。

我們公司有很多伺服器,密碼的管理非常麻煩,有時還會有人事變動,一旦人員發生變動,所有的伺服器密碼都需要修改一次,非常麻煩,偶爾會有漏改情況,使用堡壘機可以更好的管理密碼,但成本非常昂貴。

於是我便想起了Token技術,但購買Token硬件成本也要花費不少錢。Token的原理我很清楚,通過對稱算法算出相同對等密鑰,我們可以不購買硬件設備,自己開發,手機設備隨身攜帶,所以開發移動版Token最好不過。

4. 本文的Token應用在什麼地方

我採用Token技術實現Linux指定用戶的密碼周期變化,以時間為基準,手機同步算出伺服器上的密碼。為了防止密碼被窮舉,我增加了4個干擾字元。

如果對密碼算法強度感到不安全,你可以自行修改複雜度。

你還可以遠程修改密碼,不多講。

5. 誰來部署

首先由管理員部署密碼修改程序 chpasswd.sh 然後加入到crontab 中定時運行。

由於考慮到讀者的水平參差不齊,所以我使用shell完成,這樣絶大多數讀者都能看懂。

# cat chpasswd.sh 
		
#!/bin/bash
datetime=`date +%Y-%m-%d" "%H":"%M`
email="neo.chan@live.com"
#password=$(cat /dev/urandom | tr -cd [:alnum:] | fold -w30 | head -n 1)
string=$(date -u "+%Y$1%m$2%d$3%H$4%M")
password=$(echo $string | md5sum | cut -c 2-9 | base64 | tr -d "=" | cut -c 1-32)
echo $password > ~/.lastpasswd
echo $password | passwd www --stdin > /dev/null
		

~/.lastpasswd 中保存最後一次密碼

crontab 設置,每分鐘修改一次密碼。

# crontab -l
*/1 * * * * /root/chpasswd.sh a b c d
		

a b c d 自行設定,設定與手機端相同即可

至此伺服器端配置完成

6. 手機端配置

安裝Token.apk檔案到你的手機

https://github.com/oscm/Token

6.1. 設置密碼

確認密碼

選擇環境

設置干擾碼

6.2. 查看伺服器密碼

6.3. 設置刷新時間

預設1分鐘刷新一次,可能沒有來得及輸入完密碼就會更新密碼

如果修改此項,伺服器端crontab中的設置同步更改即可。