Linux 笔记本基于“敲打”的命令
cks ){ my $cmd = system( $knockHash{@confKnocks }{ cmd } ); if( $option ){ print $cmd\n } last; # otherwise make the count of matches zero in order to not reset }else{ $countMatch = ; } }#for keys # if the match count is zero exit and dont reset variables so a longer # knock sequence can be entered and checked if( $countMatch == ){ return() } # if a match occurred reset the variables so it wont match another pattern $knockCount = ; @baseKnocks = (); }#compareKnockSequences
主程序的逻辑
利用这些子程序主程序的逻辑允许用户创建敲打序列或在守护模式下监听敲打序列并执行命令第一部分是在用户指定 c 选项(用于创建模式)时执行的可以用简单的超时进程来结束敲打序列增大最大超时长度变量的值可以让两次敲打序列之间暂停 秒以上如果我们保留最大超时长度为 秒那么程序运行到这个时间时就会结束并打印当前输入的敲打序列
清单 创建序列主逻辑
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}/knockFile\n\n; for( @baseKnocks ){ print $_ } print _#_ (command here) _#_ \n\n; }#if knocks entered
第二部分是用来在一个无限循环中监听敲打序列的主逻辑它在一个循环中大约要睡眠/ 秒在这个循环中还使用了一个基于秒的超时在足够的延时之后重置敲打序列注意在这个例子中敲打监听超时时间为 秒而最大超时时间为 秒这样就提供了在敲打创建模式下进行简单测试设置的功能并为敲打序列的监听模式提供了一个快速重置选项
清单 主程序中的敲打监听代码
}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 程序非常适合用于为系统提供一种额外的用户输入通道然而需要注意的是使用 knockAge 来做任何事都需要在系统上进行认证是的它可以防止密钥记录程序监听密码的问题但是很多与 敲打认证 有关的因素都表明在对安全性敏感的环境中使用这种技术还不够成熟敲打序列目前是以 到 个数字在 ~/knockFile 中进行存储的它们以毫秒为单位来表示延时这个 密码 文件非常容易读取并且通过尝试和匹配敲打模式可以获得对系统的访问权限排除毫秒值中一些精度是一种可用的方法但是这种练习就留给那些希望自行对系统风险进行评估的读者好了
在任何敏感环境中我们都应该进行一些研究判断用户是否有足够的应变能力并能够精确地重现敲打序列例如我们是否具有能力创建并连续输入可接受长度的敲打密码?具有普通智商的人是否可以直观地使用这种敲打序列?或者我们是否准备使用 刮脸和理发操作 来作为密码?
- REDIce-Linux--灵活的实时Linux内核(11-12)
- linux文件系统基础(02-09)
- Linux标准趋向统一(11-12)
- linux基础技术(02-09)
- LINUX的目录树(02-09)
- 在Windows下启动Linux(02-09)