主程序的逻辑
利用这些子程序,主程序的逻辑允许用户创建敲打序列,或在守护模式下监听敲打序列并执行命令。第一部分是在用户指定 -c
选项(用于创建模式)时执行的。可以用简单的超时进程来结束敲打序列。增大最大超时长度变量的值可以让两次敲打序列之间暂停 4 秒以上。如果我们保留最大超时长度为 4 秒,那么程序运行到这个时间时就会结束,并打印当前输入的敲打序列。
清单 9. 创建序列主逻辑
if( $option eq "-c" ){
print "create a knock pattern:\n";
$startTime = getEpochSeconds(); # reset time out start
while( $timeOut == 0 ){
$currTime = getEpochSeconds();
# check if there has not been a knock in a while
if( $currTime - $startTime > $MAX_TIMEOUT_LENGTH ){
$timeOut = 1; # 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 =0
if( @baseKnocks ){
print "place the following line in $ENV{HOME}/.knockFile\n\n";
for( @baseKnocks ){ print "$_ " }
print "_#_ (command here) _#_ <comments here>\n\n";
}#if knocks entered
|
第二部分是用来在一个无限循环中监听敲打序列的主逻辑,它在一个循环中大约要睡眠 1/100 秒。在这个循环中还使用了一个基于秒的超时,在足够的延时之后重置敲打序列。注意,在这个例子中,敲打监听超时时间为 2 秒,而最大超时时间为 4 秒。这样就提供了在敲打创建模式下进行简单测试设置的功能,并为敲打序列的监听模式提供了一个快速重置选项。
清单 10. 主程序中的敲打监听代码
}else{
# main code loop to listen for knocking and run commands
readKnockFile();
$startTime = getEpochSeconds();
while( $timeOut == 0 ){
$currTime = getEpochSeconds();
if( $currTime - $startTime > $LISTEN_TIMEOUT ){
$knockCount = 0;
@baseKnocks = ();
$startTime = $currTime;
if( $option ){ print "listen 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(undef, undef, undef, $SLEEP_INTERVAL);
}#main knock listen loop
}# if create or listen for knocks
|
警告:安全性
knockAge 程序非常适合用于为系统提供一种额外的用户输入通道。然而,需要注意的是使用 knockAge 来做任何事都需要在系统上进行认证。是的,它可以防止密钥记录程序监听密码的问题,但是很多与 “敲打认证” 有关的因素都表明在对安全性敏感的环境中使用这种技术还不够成熟。敲打序列目前是以 4 到 9 个数字在 ~/.knockFile 中进行存储的,它们以毫秒为单位来表示延时。这个 “密码” 文件非常容易读取,并且通过尝试和匹配敲打模式,可以获得对系统的访问权限。排除毫秒值中一些精度是一种可用的方法,但是这种练习就留给那些希望自行对系统风险进行评估的读者好了。
在任何敏感环境中,我们都应该进行一些研究,判断用户是否有足够的应变能力并能够精确地重现敲打序列。例如,我们是否具有能力创建并连续输入可接受长度的敲打密码?具有普通智商的人是否可以直观地使用这种敲打序列?或者我们是否准备使用 “刮脸和理发操作” 来作为密码?
本新闻共
6页,当前在第
6页
1 2 3 4 5 6