76 FreeBSD连载:设置基本系统( 三 )


安全认证方式
由于FreeBSD是一个多用户系统,不但能由控制台用户使用,还可以通过网络,提供其他用户使用 。而允许其他用户通过网络使用系统的时候,必须要对用户进行验证 。此时的一个重要的安全问题就是口令以明文形式在网络中传输的问题 。
S/key和Kerberos
为了避免口令被窃听,有很多解决方法可以避免这个问题 。一个很有意思的解决方法是使用一次性的口令系统,如S/key,即使口令被窃听也不会对安全造成影响 。FreeBSD缺省就支持S/key系统,每个用户都可以选择是否使用这个系统保证自己的口令安全性 。为了使用S/key系统,首先需要使用keyinit初始化针对这个用户的口令串 。
bash-2.02$ keyinitUpdating wb:Old key: de415501Reminder - Only use this method if you are directly connected.If you are using telnet or rlogin exit with no passWord and use keyinit -s.Enter secret password:Again secret password:ID wb s/key is 99 de415502GAS SAM RUSK BASH NEWS WAIT由于这个命令是用于初始化S/key系统,要输入一个S/key口令短语(这个口令可以设置的非常长,通常建议使用一个句子以保证安全性),这个口令将影响以后产生的一次性口令,因此这个命令应该在一个安全连接的终端上(如控制台)执行,而不应该在通过普通telnet等网络连接的登录会话上执行 。在两次输入S/key的口令之后,keyinit将产生第一个一次性口令,keyinit输出的最后一行就是这个一次性口令,上面的ID行中的99指一次性口令的序列号,de415502是这个一次性口令对应的 “种子”。口令的 “种子”,和S/key口令短语相结合就用于产生不同的一次性口令序列 。
当使用了keyinit初始化S/key之后,就可以立即使用S/key一次性口令登录了 。也可以使用key命令产生其他一次性口令,这需要指定一次性口令的序列号和种子 。
bash-2.02$ key 99 de415502Reminder - Do not use this program while logged in via telnet or rlogin.Enter secret password:GAS SAM RUSK BASH NEWS WAITkey将提示用户输入口令短语,因此这个命令也不应该通过网络来使用,只能用于直接连接的时候 。然而不必为此担心,因为无论在那台计算机上,使用同样的序列号、种子和口令短语产生的口令序列都是同样的,因此可以在本地计算机上,产生用于远程FreeBSD计算机登录的一次性口令 。
注意,S/key系统用于产生一次性口令使用的单向Hash函数可能不同,最常用的有MD4、MD5和DES算法,使用不同算法产生的一次性口令序列不会相同 。FreeBSD的S/key系统使用MD4算法,因此如果要在客户计算机为FreeBSD服务器产生S/key一次性口令,需要使用采用MD4算法的key程序 。
这样当系统进行认证时,将提示skey序列号和种子 。这样用户就能使用正确的一次性口令登录了 。一旦一个口令用过,这个口令就不再被使用,而使用下一个序列号的口令 。
Login: wbs/key 99 de415502Password:由于每次使用过的口令将不再使用,而通过S/key认证的连接本身是不安全的连接,不应该用于再次产生新口令 。那么如果仅通过本地计算机产生S/key口令,就限制了客户机上必须安装有S/key系统 。事实上可以在建立安全连接的时候,一次可以产生多个S/key一次性口令,将这些口令记录或打印在密码本上,随用随查,只要密码本不丢失,就没有口令泄露的问题 。产生多个S/key一次性口令需要使用-n参数执行key:
bash-2.02$ key -n 5 80 de415503Reminder - Do not use this program while logged in via telnet or rlogin.Enter secret password:76: FIR SIGH BABE SUNG FUSS BAY77: SOCK HOME WAGE CAN BALL WORE78: DORA JUNO JAY YET HEAD SLUR79: COWL TROY HURT SLAB SCAR GAGE80: TOE BAKE FRAU PEG DOE I这将产生5个一次性口令的序列,80为口令序列的结束序号 。此后需要经常更新所使用的口令序列,即更改S/key的种子,以产生新的口令序列 。

推荐阅读