Linux 筆記本基于“敲打”的命令
主程序的邏輯
利用這些子程序主程序的邏輯允許用戶創(chuàng)建敲打序列或在守護(hù)模式下監(jiān)聽敲打序列并執(zhí)行命令第一部分是在用戶指定 c 選項(用于創(chuàng)建模式)時執(zhí)行的可以用簡單的超時進(jìn)程來結(jié)束敲打序列增大最大超時長度變量的值可以讓兩次敲打序列之間暫停 秒以上如果我們保留最大超時長度為 秒那么程序運行到這個時間時就會結(jié)束并打印當(dāng)前輸入的敲打序列
清單 創(chuàng)建序列主邏輯
if( $option eq c ){ print create a knock pattern:n; $startTime = getEpochSeconds(); # reset time out start while( $timeOut == ){ $currTime = getEpochSeconds(); # check if there has not been a knock in a while if( $currTime $startTime > $MAX_TIMEOUT_LENGTH ){ $timeOut = ; # exit the loop }else{ # if a knock has been entered before timeout reset timers so # more knocks can be entered if( $knockCount != $knockAge ){ $startTime = $currTime; # reset timer for longer delay $knockAge = $knockCount; # synchronize knock counts }# if a new knock came in }# if timer not reached knockListen(); select(undef undef undef $SLEEP_INTERVAL); }#timeOut = if( @baseKnocks ){ print place the following line in $ENV{HOME}/knockFilenn; for( @baseKnocks ){ print $_ } print _#_ (command here) _#_ nn; }#if knocks entered
第二部分是用來在一個無限循環(huán)中監(jiān)聽敲打序列的主邏輯它在一個循環(huán)中大約要睡眠/ 秒在這個循環(huán)中還使用了一個基于秒的超時在足夠的延時之后重置敲打序列注意在這個例子中敲打監(jiān)聽超時時間為 秒而最大超時時間為 秒這樣就提供了在敲打創(chuàng)建模式下進(jìn)行簡單測試設(shè)置的功能并為敲打序列的監(jiān)聽模式提供了一個快速重置選項
清單 主程序中的敲打監(jiān)聽代碼
}else{ # main code loop to listen for knocking and run commands readKnockFile(); $startTime = getEpochSeconds(); while( $timeOut == ){ $currTime = getEpochSeconds(); if( $currTime $startTime > $LISTEN_TIMEOUT ){ $knockCount = ; @baseKnocks = (); $startTime = $currTime; if( $option ){ printlisten timeout resetting knocks n } }else{ if( $knockCount != $knockAge ){ $startTime = $currTime; # reset timer for longer delay $knockAge = $knockCount; # synchronize knock counts }# if a new knock came in compareKnockSequences(); }#if not reset timeout knockListen(); select(undefundef undef $SLEEP_INTERVAL); }#main knock listen loop }# if create or listen for knocks
警告安全性
knockAge 程序非常適合用于為系統(tǒng)提供一種額外的用戶輸入通道然而需要注意的是使用 knockAge 來做任何事都需要在系統(tǒng)上進(jìn)行認(rèn)證是的它可以防止密鑰記錄程序監(jiān)聽密碼的問題但是很多與 敲打認(rèn)證 有關(guān)的因素都表明在對安全性敏感的環(huán)境中使用這種技術(shù)還不夠成熟敲打序列目前是以 到 個數(shù)字在 ~/knockFile 中進(jìn)行存儲的它們以毫秒為單位來表示延時這個 密碼 文件非常容易讀取并且通過嘗試和匹配敲打模式可以獲得對系統(tǒng)的訪問權(quán)限排除毫秒值中一些精度是一種可用的方法但是這種練習(xí)就留給那些希望自行對系統(tǒng)風(fēng)險進(jìn)行評估的讀者好了
在任何敏感環(huán)境中我們都應(yīng)該進(jìn)行一些研究判斷用戶是否有足夠的應(yīng)變能力并能夠精確地重現(xiàn)敲打序列例如我們是否具有能力創(chuàng)建并連續(xù)輸入可接受長度的敲打密碼?具有普通智商的人是否可以直觀地使用這種敲打序列?或者我們是否準(zhǔn)備使用 刮臉和理發(fā)操作 來作為密碼?
評論